Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/02/2015, 12:55
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 3 meses
Puntos: 977
Respuesta: convertir cadena de texto en inputs de una tabla que muestra varios regist

En lugar de imprimir directamente los datos, puedes mostrarlos en cajas de texto y, a estas últimas, aplicarles la propiedad readOnly para que no puedan ser modificados.

Código PHP:
Ver original
  1. <td>
  2.     <input
  3.         type = "text"
  4.         value = "<?php echo $row['strNombreImagen']; ?>"
  5.         onclick = "modificar(this)"
  6.         onkeypress = "guardar(event, this)"
  7.         readOnly />
  8. </td>
  9. <td>
  10.     <input
  11.         type = "text"
  12.         value = "<?php echo $row['strTituloImagen']; ?>"
  13.         onclick = "modificar(this)"
  14.         onkeypress = "guardar(event, this)"
  15.         readOnly />
  16. </td>

Como verás, además del atributo readOnly, les asigné dos funciones que se ejecutarán en dos casos en particular. La primera, para cuando se le de un clic a la caja de texto (modificar()) y la segunda, para cuando se pulse una tecla mientras la caja de texto tenga el enfoque (guardar()). A la primera, le envío a la propia caja de texto como parámetro, mientras que a la segunda, le envío el objeto del evento y a la caja de texto.

Las funciones serían así:

Código Javascript:
Ver original
  1. function modificar(caja){
  2.     if (caja.readOnly){
  3.         caja.readOnly = false;
  4.     }
  5.     else{
  6.         caja.readOnly = true;
  7.     }
  8. }
  9.  
  10. function guardar(evento, caja){
  11.     var ajax = new XMLHttpRequest();
  12.  
  13.     if (evento.keyCode == 13){
  14.         ajax.open("GET", "tupagina.php?valor=" + caja.value, true);
  15.         ajax.onreadystatechange = function(){
  16.             if (ajax.readyState == 4 && ajax.status == 200){
  17.                 alert(ajax.responseText);
  18.             }
  19.         };
  20.         ajax.send();
  21.         caja.readOnly = true;
  22.     }
  23. }

En la primera función (modificar()), recibo a la caja de texto y evalúo el estado de su atributo readOnly; si este es true (colocando la expresión de esa manera en la condición, se evalúa si es true o false), le asigno false a dicho atributo para que se pueda escribir en la caja de texto, caso contrario, le vuelvo a asignar true.

En la segunda función (guardar()), recibo al objeto del evento y a la caja de texto. Primero, declaro a la variable ajax y le asigno un objeto XMLHttpRequest para poder realizar una petición asíncrona (Ajax), luego, evalúo el código interno de la tecla pulsada; si este es igual a 13, que es el código que corresponde a la tecla ENTER, envío el valor de la caja de texto hacia la página que deberá actualizar el dato en la base de datos.

Esta parte sería más o menos así:

Código PHP:
Ver original
  1. $valor = $_GET['valor'];
  2. if (mysqli_query($conexion, "UPDATE tabla SET campo = '$valor' WHERE {aquí va tu condición}"){
  3.     echo 'El dato ha sido actualizado';
  4. }
  5. else{
  6.     echo 'No se pudo actualizar el dato';
  7. }

Si te fijas, ya sea cuando se logre o no actualizar el dato en la base de datos, se imprime un mensaje; dicho mensaje será lo que se devolverá a la petición asíncrona y que recibirás en ajax.responseText, el cual muestro mediante un mensaje de alerta.

Finalmente, vuelvo a asignar true al atributo readOnly de la caja de texto, para que nuevamente solo se muestre el dato y no se lo pueda modificar hasta que se le vuelva a dar un clic a la caja de texto.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand