Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Ideas con tabla generada PHP por una consulta a base de datos.

Estas en el tema de Ideas con tabla generada PHP por una consulta a base de datos. en el foro de PHP en Foros del Web. Soy nuevo en el foro así que lo primero es lo primero, Hola y muy buenas a todos!!! Estoy estudiando php y demás cositas para ...
  #1 (permalink)  
Antiguo 07/10/2014, 13:01
Avatar de cascanfer56  
Fecha de Ingreso: octubre-2014
Mensajes: 9
Antigüedad: 9 años, 6 meses
Puntos: 0
Ideas con tabla generada PHP por una consulta a base de datos.

Soy nuevo en el foro así que lo primero es lo primero, Hola y muy buenas a todos!!!

Estoy estudiando php y demás cositas para diseñar webs así que aún estoy algo verde perdonad si el tema es un poco novatillo .

Bueno dicho esto os comento:
Estoy haciendo página de un portal de pedidos web en el cual necesito mostrar los pedidos de cada cliente registrado, hasta aquí todo bien.Sin embargo no logró introducir una función cuyo objetivo es imprimir un mensaje que te muestre una pregunta con 2 enlaces, por ejemplo; para poder confirmar pedidos o rechazarlos solo en caso de que en la tabla se imprima un pedido con estado "localizado" (es decir tenga dicho estado en la base de datos).

El caso es, quiero que si alguna de esas celdas digamos imprime el valor,en este caso la palabra "pendiente"; en la celda de estado, aparezca el mensaje con los enlaces para confirmar o no el producto modificando luego el estado de este en la base de datos a "confirmado" o "rechazado" dependiendo del script.

No se me ocurre como lograr identificar si en las celdas ha aparecido "pendiente" o no y luego si aparecen varios productos en estado "pendiente" como identificar cada uno para poder ir modificando su estado con los scripts.

Primero pensé en usar la variable de "row" del array generado por foreach para identificar los estados pero este se queda solo con el último pedido de la base lógicamente.
Luego pensé en poner un id o name a las filas de las tablas y celdas para sacar la info con DOM ;pero al ser generadas de manera automática se generan todas con el mismo id/name y no sirve para identificar cada producto de la tabla.

Pff espero haberme logrado explicar decentemente '^^ A ver si alguien me puede echar una manita con alguna idea para seguir avanzando.Muchas gracias a todos!

Os adjunto el código de la página con algunos comentarios en el lugar del conflicto de lo que he intentado ir haciendo :)

Código PHP:
 <article class="content">
      <h1 class="auto-style12">Pedidos</h1>
      <br>
      <div class="auto-style13" style="width: 779px; height: 186px; position: absolute; left: 20px; top: 241px; border: #FF6600 groove">
          <img alt="pedidos" height="186" src="../../Archivos%20necesarios/videojuegosAlmacen.jpg" width="779"></div>
      <p>&nbsp;</p>
      <p>&nbsp;</p>
      <p>&nbsp;</p>
      <p>&nbsp;</p>
      <p>&nbsp;</p>
    <section>
      <h2 class="eslogan">Tus pedidos :</h2>
      
      <table class="auto-style2" style="margin: 10px 0 15px 10px; height: 47px; width: 377px;">
          <tr>
              <th class="auto-style11">Pedido</th>
              <th class="auto-style11">Plataforma</th>
              <th class="auto-style11">Estado</th>
              <th class="auto-style11">Precio</th>
          </tr>
       <?php 
          
require '../ModeloControlador/conexion.php';
          
$result $con ->query("SELECT nombre,plataforma,estado,precio FROM productos WHERE propietario like"$con ->quote($_SESSION["user"]));
          foreach(
$result as $row) {
          
          echo 
"<tr>
                <td>$row[0]</td>
                <td>$row[1]</td>
                <td>$row[2]</td> 
                <td>$row[3]</td>
                </tr>"
;
          
          
/*$row[2] representa el estado, primero pensé en crear un if con esta varibale tal que: if($row[2] == "pendiente")
           * y ya el mensaje con los de los enlaces a sus respectivos scripts, sin embargo esta idea solo serviría si estuvieramos habando 
           * de un solo producto ya que al haber más se van sobreescribiendo en la variable, pudiendo el último no estar
           * pendiente mientras que el 2º sí.
           * La segunda opción fue <td name=celdaEstado>$row[2]<\td> y con DOM meter el valor de la celda en una variabley etsa en un if,
           * desechada por la misma razón que antes todas las filas tienen el mismo identififcador y por tanto al haber varios productos 
           * no se puede realizar correctamente la comprobación.
           */
          
}
          
       
?>       
      </table>
  #2 (permalink)  
Antiguo 07/10/2014, 14:13
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Ideas con tabla generada PHP por una consulta a base de datos.

Bienvenido al foro, quizas esto te sirva como guia, es algo "purista" pero se entiende:
Código PHP:
Ver original
  1. <table class="auto-style2" style="margin: 10px 0 15px 10px; height: 47px; width: 377px;">
  2.     <tr>
  3.        <th class="auto-style11">Pedido</th>
  4.        <th class="auto-style11">Plataforma</th>
  5.        <th class="auto-style11">Estado</th>
  6.        <th class="auto-style11">Precio</th>
  7.        <th class="auto-style11">Acciones</th>
  8.     </tr>
  9.     <?php  
  10.         require '../ModeloControlador/conexion.php';
  11.        
  12.         // Agrega el campo codigo o como sea que se llame la clave primaria.
  13.         // Puedes usar "=" en vez de LIKE, no creo que sea necesario a menos que tengas un error de diseño.
  14.         $result = $con ->query("SELECT nombre,plataforma,estado,precio, codigo FROM productos WHERE propietario = ".$con->quote($_SESSION["user"]));
  15.        
  16.         foreach($result as $row)
  17.         {
  18.             // Segun el estado elijes que opciones mostrarle.
  19.             switch($row[2])
  20.             {
  21.                 case "pendiente" :
  22.                     $accion = "<span class=\"accionar confirmado\">Confirmar</span> | <span class=\"accionar rechazado\">Rechazar</span>";
  23.                 break;
  24.                 case "confirmado" :
  25.                     $accion = "<span class=\"accionar pendiente\">Pendiente</span> | <span class=\"accionar rechazado\">Rechazar</span>";
  26.                 break;
  27.                 case "rechazado" :
  28.                     $accion = "<span class=\"accionar pendiente\">Pendiente</span> | <span class=\"accionar confirmado\">Confirmar</span>";
  29.                 break;                
  30.                 default :
  31.                     $accion = "---";
  32.                 break;
  33.             }
  34.            
  35.             echo "<tr data-codigo=\"$row[4]\">
  36.                    <td>$row[0]</td>
  37.                    <td>$row[1]</td>
  38.                    <td>$row[2]</td>  
  39.                    <td>$row[3]</td>  
  40.                    <td>$accion</td>
  41.                </tr>";
  42.         }        
  43.     ?>        
  44. </table>
  45. <script>
  46.     function accionar_pendiente()
  47.     {
  48.         var codigo = this.parentNode.parentNode.dataset.codigo;
  49.         alert("Pasar a pendiente el codigo: "+codigo);
  50.     }
  51.    
  52.     function accionar_confirmado()
  53.     {
  54.         var codigo = this.parentNode.parentNode.dataset.codigo;
  55.         alert("Confirmar el codigo: "+codigo);    
  56.     }
  57.    
  58.     function accionar_rechazado()
  59.     {
  60.         var codigo = this.parentNode.parentNode.dataset.codigo;
  61.         alert("Rechazar el codigo: "+codigo);    
  62.     }
  63.    
  64.     var elements;
  65.    
  66.     elements = document.querySelectorAll('.accionar.pendiente');
  67.     for (var i = 0; i < elements.length; i++)
  68.         elements[i].addEventListener("click", accionar_pendiente, false);
  69.        
  70.     elements = document.querySelectorAll('.accionar.confirmado');
  71.     for (var i = 0; i < elements.length; i++)
  72.         elements[i].addEventListener("click", accionar_confirmado, false);
  73.        
  74.     elements = document.querySelectorAll('.accionar.rechazado');
  75.     for (var i = 0; i < elements.length; i++)
  76.         elements[i].addEventListener("click", accionar_rechazado, false);
  77. </script>
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #3 (permalink)  
Antiguo 08/10/2014, 16:31
Avatar de cascanfer56  
Fecha de Ingreso: octubre-2014
Mensajes: 9
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Ideas con tabla generada PHP por una consulta a base de datos.

Cita:
Iniciado por NSD Ver Mensaje
Bienvenido al foro, quizas esto te sirva como guia, es algo "purista" pero se entiende:
Código PHP:
Ver original
  1. <table class="auto-style2" style="margin: 10px 0 15px 10px; height: 47px; width: 377px;">
  2.     <tr>
  3.        <th class="auto-style11">Pedido</th>
  4.        <th class="auto-style11">Plataforma</th>
  5.        <th class="auto-style11">Estado</th>
  6.        <th class="auto-style11">Precio</th>
  7.        <th class="auto-style11">Acciones</th>
  8.     </tr>
  9.     <?php  
  10.         require '../ModeloControlador/conexion.php';
  11.        
  12.         // Agrega el campo codigo o como sea que se llame la clave primaria.
  13.         // Puedes usar "=" en vez de LIKE, no creo que sea necesario a menos que tengas un error de diseño.
  14.         $result = $con ->query("SELECT nombre,plataforma,estado,precio, codigo FROM productos WHERE propietario = ".$con->quote($_SESSION["user"]));
  15.        
  16.         foreach($result as $row)
  17.         {
  18.             // Segun el estado elijes que opciones mostrarle.
  19.             switch($row[2])
  20.             {
  21.                 case "pendiente" :
  22.                     $accion = "<span class=\"accionar confirmado\">Confirmar</span> | <span class=\"accionar rechazado\">Rechazar</span>";
  23.                 break;
  24.                 case "confirmado" :
  25.                     $accion = "<span class=\"accionar pendiente\">Pendiente</span> | <span class=\"accionar rechazado\">Rechazar</span>";
  26.                 break;
  27.                 case "rechazado" :
  28.                     $accion = "<span class=\"accionar pendiente\">Pendiente</span> | <span class=\"accionar confirmado\">Confirmar</span>";
  29.                 break;                
  30.                 default :
  31.                     $accion = "---";
  32.                 break;
  33.             }
  34.            
  35.             echo "<tr data-codigo=\"$row[4]\">
  36.                    <td>$row[0]</td>
  37.                    <td>$row[1]</td>
  38.                    <td>$row[2]</td>  
  39.                    <td>$row[3]</td>  
  40.                    <td>$accion</td>
  41.                </tr>";
  42.         }        
  43.     ?>        
  44. </table>
  45. <script>
  46.     function accionar_pendiente()
  47.     {
  48.         var codigo = this.parentNode.parentNode.dataset.codigo;
  49.         alert("Pasar a pendiente el codigo: "+codigo);
  50.     }
  51.    
  52.     function accionar_confirmado()
  53.     {
  54.         var codigo = this.parentNode.parentNode.dataset.codigo;
  55.         alert("Confirmar el codigo: "+codigo);    
  56.     }
  57.    
  58.     function accionar_rechazado()
  59.     {
  60.         var codigo = this.parentNode.parentNode.dataset.codigo;
  61.         alert("Rechazar el codigo: "+codigo);    
  62.     }
  63.    
  64.     var elements;
  65.    
  66.     elements = document.querySelectorAll('.accionar.pendiente');
  67.     for (var i = 0; i < elements.length; i++)
  68.         elements[i].addEventListener("click", accionar_pendiente, false);
  69.        
  70.     elements = document.querySelectorAll('.accionar.confirmado');
  71.     for (var i = 0; i < elements.length; i++)
  72.         elements[i].addEventListener("click", accionar_confirmado, false);
  73.        
  74.     elements = document.querySelectorAll('.accionar.rechazado');
  75.     for (var i = 0; i < elements.length; i++)
  76.         elements[i].addEventListener("click", accionar_rechazado, false);
  77. </script>
Genial! Muchas gracias la verdad es que es como si me hubieras leído la mente :D justo cuando pensaba en posibles soluciones, imaginaba algo como esto con las opciones para cada fila y todo eso.Gracias a tu idea ya he podido retocar el código para que quede como esperaba ^^.

Sin embargo continuo perdido en la otra parte del problema que sería modificar la base de datos para que al pulsar confirmado digamos ,en la fila 1, por ejemplo, el estado del producto cambie a confirmado.
Aquí si que estoy atascado ya que no he sido capaz de sacar nada efectivo ni con la ayuda de tu tip para el data-* y dataset que no conocía.Ya que aun teniendo los identificadores en cada fila no se como podría hacer para que al pulsar en un enlace (confirmar y rechazar los he cambiado a enlaces a script php con un update) el script php "reconozca" que "x" pedido va ser cambiado y no "y".
Lo único que se me ha ocurrida son cosas relacionadas con variables de sesión pero estas solo pueden almacenar un dato así que vuelvo al principio.Creo que con AJAX se podría hacer algo pero apenas se de este, lo que he estado viendo un poco y parece que estaría en un problema parecido; ya que tendría que generar muchas variables que coincidiesen con los "x" pedidos que vayan a ser modificados.

Bueno si pudieras echarme una mano sería genial sino de todas maneras te agradezco la pedazo de ayuda de antes ,me ha servido muchísimo de verdad!!

Un saludo!!!
  #4 (permalink)  
Antiguo 08/10/2014, 18:45
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Ideas con tabla generada PHP por una consulta a base de datos.

Lo que debes hacer es usar ajax, en la misma w3c esta su especificacion.

Siguiendo con el ejemplo dado, podrias hacer algo asi:
Código Javascript:
Ver original
  1. function cambiarEstado(accion, codigo)
  2. {
  3.     var xmlhttp = new XMLHttpRequest();
  4.     xmlhttp.open("POST", "actualizador.php", true);
  5.     xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  6.     xmlhttp.onreadystatechange = function()
  7.     {
  8.         if (xmlhttp.readyState == 4 && xmlhttp.status==200)
  9.         {
  10.             if(xmlhttp.responseText == "ok")
  11.             {
  12.                 alert("El cambio se realizo correctamente");
  13.             }
  14.             else
  15.             {
  16.                 alert(xmlhttp.responseText);
  17.             }
  18.         }
  19.     }
  20.     xmlhttp.send("accion="+accion+"&codigo="+codigo);
  21. }
  22.  
  23. function accionar_pendiente()
  24. {
  25.     var codigo = this.parentNode.parentNode.dataset.codigo;
  26.     cambiarEstado("pendiente", codigo);
  27. }
  28.    
  29. function accionar_confirmado()
  30. {
  31.     var codigo = this.parentNode.parentNode.dataset.codigo;
  32.     cambiarEstado("confirmado", codigo);
  33. }
  34.    
  35. function accionar_rechazado()
  36. {
  37.     var codigo = this.parentNode.parentNode.dataset.codigo;
  38.     cambiarEstado("rechazado", codigo);
  39. }

Y luego en tu archivo actualizador.php
Código PHP:
Ver original
  1. <?php  
  2.     require '../ModeloControlador/conexion.php';
  3.     switch($_POST["accion"])
  4.     {
  5.         case "pendiente" :
  6.         case "confirmado" :
  7.         case "rechazado" :
  8.             $con->query("UPDATE productos SET estado = '$_POST[accion]' WHERE codigo = ".$con->quote($_POST["codigo"])." LIMIT 1;");
  9.             if($con->affected_rows)
  10.                 $status = "ok";
  11.             else
  12.                 $status = "No se actualizo ningun producto.";          
  13.         break;
  14.         default :
  15.             $status = "Estado invalido";
  16.         break;
  17.     }        
  18.    
  19.     die($status);

Si bien el codigo podria optimizarse un poco no se que es lo que contiene el objeto $con por ejemplo, te servira a modo de guia como para orientarte pero no lo tomes como la unica solucion.

Saludos.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 09/10/2014, 14:47
Avatar de cascanfer56  
Fecha de Ingreso: octubre-2014
Mensajes: 9
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Ideas con tabla generada PHP por una consulta a base de datos.

Cita:
Iniciado por NSD Ver Mensaje
Lo que debes hacer es usar ajax, en la misma [URL="http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp"]w3c esta su especificacion[/URL].

Siguiendo con el ejemplo dado, podrias hacer algo asi:
Código Javascript:
Ver original
  1. function cambiarEstado(accion, codigo)
  2. {
  3.     var xmlhttp = new XMLHttpRequest();
  4.     xmlhttp.open("POST", "actualizador.php", true);
  5.     xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  6.     xmlhttp.onreadystatechange = function()
  7.     {
  8.         if (xmlhttp.readyState == 4 && xmlhttp.status==200)
  9.         {
  10.             if(xmlhttp.responseText == "ok")
  11.             {
  12.                 alert("El cambio se realizo correctamente");
  13.             }
  14.             else
  15.             {
  16.                 alert(xmlhttp.responseText);
  17.             }
  18.         }
  19.     }
  20.     xmlhttp.send("accion="+accion+"&codigo="+codigo);
  21. }
  22.  
  23. function accionar_pendiente()
  24. {
  25.     var codigo = this.parentNode.parentNode.dataset.codigo;
  26.     cambiarEstado("pendiente", codigo);
  27. }
  28.    
  29. function accionar_confirmado()
  30. {
  31.     var codigo = this.parentNode.parentNode.dataset.codigo;
  32.     cambiarEstado("confirmado", codigo);
  33. }
  34.    
  35. function accionar_rechazado()
  36. {
  37.     var codigo = this.parentNode.parentNode.dataset.codigo;
  38.     cambiarEstado("rechazado", codigo);
  39. }

Y luego en tu archivo actualizador.php
Código PHP:
Ver original
  1. <?php  
  2.     require '../ModeloControlador/conexion.php';
  3.     switch($_POST["accion"])
  4.     {
  5.         case "pendiente" :
  6.         case "confirmado" :
  7.         case "rechazado" :
  8.             $con->query("UPDATE productos SET estado = '$_POST[accion]' WHERE codigo = ".$con->quote($_POST["codigo"])." LIMIT 1;");
  9.             if($con->affected_rows)
  10.                 $status = "ok";
  11.             else
  12.                 $status = "No se actualizo ningun producto.";          
  13.         break;
  14.         default :
  15.             $status = "Estado invalido";
  16.         break;
  17.     }        
  18.    
  19.     die($status);

Si bien el codigo podria optimizarse un poco no se que es lo que contiene el objeto $con por ejemplo, te servira a modo de guia como para orientarte pero no lo tomes como la unica solucion.

Saludos.
La verdad es que para ser sincero el script AJAX me sonaba a chino, pero bueno con la ayuda de la buena w3 y dedicándole unas horitas lo he acabado entendiendo todo bastante bien, obviamente jamás se me hubiera ocurrido a mi porque como dije antes de AJAX poco.
Sin embargo tras adaptar tu código y arreglar algunas cosas que no encajaban con mi idea(básicamente he quitado la función de "localizado" ya que la idea era que el cliente pueda confirmar y rechazar solamente) no acabo de entender por que no funciona aparentemente todo está todo bien, no ocurren errores de servidor; pero aun así no se modifica la base de datos, salta todo el rato "ningún elemento modificado" si no te importa echarle un vistazo al código a ver si encuentras algo que se me haya pasado.
Muuuuchas gracias! por la ayuda y la paciencia :)

Código Javascript:
Ver original
  1. function cambiarEstado(accion, idProd)
  2. {
  3.     var xmlhttp = new XMLHttpRequest();
  4.     xmlhttp.open("POST", "../ModeloControlador/pedidoConfir.php", true);
  5.     xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  6.     xmlhttp.onreadystatechange = function()
  7.     {
  8.         if (xmlhttp.readyState == 4 && xmlhttp.status==200)
  9.         {
  10.             if(xmlhttp.responseText == "ok")
  11.             {
  12.                 alert("El cambio se realizo correctamente");
  13.             }
  14.             else
  15.             {
  16.                 alert(xmlhttp.responseText);
  17.             }
  18.         }
  19.     }
  20.     xmlhttp.send("accion="+accion+"&id="+idProd);
  21. }
  22.  
  23. function accionar_confirmado()
  24. {
  25.     var idProd = this.parentNode.parentNode.dataset.idProductos;
  26.     cambiarEstado("confirmado", idProd);
  27. }
  28.    
  29. function accionar_rechazado()
  30. {
  31.     var idProd= this.parentNode.parentNode.dataset.idProductos;
  32.     cambiarEstado("rechazado", idProd);
  33. }
  34.    var elements;
  35.        
  36.     elements = document.querySelectorAll('.accionar.confirmado');
  37.     for (var i = 0; i < elements.length; i++)
  38.         elements[i].addEventListener("click", accionar_confirmado, false);
  39.        
  40.     elements = document.querySelectorAll('.accionar.rechazado');
  41.     for (var i = 0; i < elements.length; i++)
  42.         elements[i].addEventListener("click", accionar_rechazado, false);
  43. </script>

El script php que modifica la base de datos
Código PHP:
<?php
require 'conexion.php';
switch (
$_POST["accion"])
{
        case 
"rechazado":
        case 
"confirmado":
            
$con->query("UPDATE productos SET estado = '$_POST[accion]' WHERE idProductos = ".$con->quote($_POST["idProd"])." LIMIT 1;");
            if(
$con->affected_rows)
                
$status "ok";
            else
                
$status "No se actualizo ningun producto.";           
        break;
        default :
            
$status "Estado invalido";
        break;
    }         
    
    die(
$status);                      
header ("location: ../ModeloControlador/pedidos.php");
En cuanto a la tabla generada con el php embebido es lo mismo de antes, no he modificado nada simplemente he quitado los enlaces que ya no tenían sentido para que el cliente solo pueda confirmar y rechazar en caso de estar el pedido "localizado" y las etiquetas de "a" puesto que ya no hacen falta por que la función la llama AJAX.

Un saludo!!
  #6 (permalink)  
Antiguo 09/10/2014, 21:08
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Ideas con tabla generada PHP por una consulta a base de datos.

Revisa con atencion estos fragmentos que has escrito:

Código Javascript:
Ver original
  1. xmlhttp.send("accion="+accion+"&id="+idProd);
Código PHP:
Ver original
  1. ".$con->quote($_POST["idProd"])."

¿Notas algo raro?

Recuerda que lo que envias por un lado es lo que recibes por el otro.

Estas dos lineas te pueden ayudar a darte cuenta que es lo que estas haciendo mal:

Código Javascript:
Ver original
  1. console.log("Estoy enviando esto: 'accion="+accion+"&id="+idProd+"'");

Código PHP:
Ver original
  1. echo "Estoy recibiendo esto: ".json_encode($_POST);

Notaras que en ambos casos la información es la misma sin ninguna diferencia, y si has prestado atencion a los primeros fragmentos que te señale, encontraras rápidamente el error.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 09/10/2014, 21:17
 
Fecha de Ingreso: octubre-2014
Mensajes: 1
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Ideas con tabla generada PHP por una consulta a base de datos.

Muy padre me gusto mucho la informacion
  #8 (permalink)  
Antiguo 10/10/2014, 10:36
Avatar de cascanfer56  
Fecha de Ingreso: octubre-2014
Mensajes: 9
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Ideas con tabla generada PHP por una consulta a base de datos.

Cita:
Iniciado por NSD Ver Mensaje
Revisa con atencion estos fragmentos que has escrito:

Código Javascript:
Ver original
  1. xmlhttp.send("accion="+accion+"&id="+idProd);
Código PHP:
Ver original
  1. ".$con->quote($_POST["idProd"])."

¿Notas algo raro?

Recuerda que lo que envias por un lado es lo que recibes por el otro.

Estas dos lineas te pueden ayudar a darte cuenta que es lo que estas haciendo mal:

Código Javascript:
Ver original
  1. console.log("Estoy enviando esto: 'accion="+accion+"&id="+idProd+"'");

Código PHP:
Ver original
  1. echo "Estoy recibiendo esto: ".json_encode($_POST);

Notaras que en ambos casos la información es la misma sin ninguna diferencia, y si has prestado atencion a los primeros fragmentos que te señale, encontraras rápidamente el error.
mmm después de romperme el coco durante unas horas está claro que el error está en iProd, se envía con valor indefinido y por eso no realiza bien el update(no sabía lo de console me ha aparecido bastante útil, me lo apunto ^^) problema; no se porque no se esta captando bien la propiedad, si se envía con valor indefinido supongo que el fallo viene de las funciones que captan la propiedad y puesto que no conocía dataset ni data-type no se cual puede ser el fallo, aparentemente todo está bien... por que los id se generan bien en la tabla; se puede ver en el depurador :(

También pensé que el fallo podía estar en la sintaxis del send pero solo veo como "fallo" la tontería de poner "&id="+idProd y lo cambié por idProd por si era necesario para que el servidor reconociera la propiedad al devolver los valores pero claro...que valor? undefined... así que realmente me imagino que el fallo está al captar la propiedad idProductos de las filas en las funciones que la captan con DOM,pero ni idea de como solucionarlo o porque se está produciendo realmente .
  #9 (permalink)  
Antiguo 10/10/2014, 11:38
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Ideas con tabla generada PHP por una consulta a base de datos.

Cita:
"accion="+accion+"&id="+idProd
Ahi estas enviando el idProd con el nombre de "id"

Cita:
".$con->quote($_POST["idProd"])."
y aca lo estas quereiendo recibir con el nombre de idProd, el cual no existe.

Debes recibirlo con $_POST["id"] que es el mismo nombre con el que lo mandas.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #10 (permalink)  
Antiguo 10/10/2014, 18:21
Avatar de cascanfer56  
Fecha de Ingreso: octubre-2014
Mensajes: 9
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Ideas con tabla generada PHP por una consulta a base de datos.

Cita:
Iniciado por NSD Ver Mensaje
Ahi estas enviando el idProd con el nombre de "id"


y aca lo estas quereiendo recibir con el nombre de idProd, el cual no existe.

Debes recibirlo con $_POST["id"] que es el mismo nombre con el que lo mandas.
A eso me refería antes, de echo lo cambié y pensé que ese sería el fallo pero no funciona por lo que he puesto anteriormente; al ver lo que se envía y se recibe, se ve que el valor es undefined en "id" o "idProd" en mi caso ,independientemente de que el valor coincida o no (antes de corregir el error de "id" y después también) creo que algo está fallando a la hora de captar la propiedad creada con data-type porque, por ejemplo, en estado si que sale "estado"= confirmado; mientras que en: "id"= undefined.Tanto en el depurador(mensaje de lo que se envía) como en el mensaje de lo que se está recibiendo.

No tengo ni idea de que puede ser
De todas maneras muchas gracias por contestar y por todo la ayuda que me estás prestando.
  #11 (permalink)  
Antiguo 10/10/2014, 20:02
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Ideas con tabla generada PHP por una consulta a base de datos.

a ver, vamos por partes.
la propiedad "dataset" lo que haces es contener a todos los atributos que empiecen con "data-", tu estas usando: "dataset.idProductos" con lo cual, el tr deberias armarlo asi:

Código PHP:
Ver original
  1. echo "<tr data-id-productos=\"$row[4]\">

Pero la sintaxis CamelCase no es recomendable para html, ya que introduce un problema que es la sensibilidad a mayusculas, "idProductos" no es lo mismo que "idproductos" en determinados lugares, ademas de que no es descriptivo (si lo es, pero podria ser mejor), una buena opcion seria:

Código PHP:
Ver original
  1. echo "<tr data-idproducto=\"$row[4]\">

Código Javascript:
Ver original
  1. var idProd= this.parentNode.parentNode.dataset.idproducto;

Notese que se hace referencia al id en singular no en plural, es una cuestion gramatical pero que facilita al lector saber que esa variable tiene un valor escalar y no un array. (piensa en que si tu mismo dentro de 6 meses vuelves a mirar el codigo que tu escribistes, lo que querras sera acordarte lo mas rapido posible de que es lo que hace, nombres erroneos te dificultaran la tarea)

Se entiende la idea?

Puede interesarte este link para entender mejor el concepto.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #12 (permalink)  
Antiguo 11/10/2014, 15:25
Avatar de cascanfer56  
Fecha de Ingreso: octubre-2014
Mensajes: 9
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Ideas con tabla generada PHP por una consulta a base de datos.

Cita:
Iniciado por NSD Ver Mensaje
a ver, vamos por partes.
la propiedad "dataset" lo que haces es contener a todos los atributos que empiecen con "data-", tu estas usando: "dataset.idProductos" con lo cual, el tr deberias armarlo asi:

Código PHP:
Ver original
  1. echo "<tr data-id-productos=\"$row[4]\">

Pero la sintaxis CamelCase no es recomendable para html, ya que introduce un problema que es la sensibilidad a mayusculas, "idProductos" no es lo mismo que "idproductos" en determinados lugares, ademas de que no es descriptivo (si lo es, pero podria ser mejor), una buena opcion seria:

Código PHP:
Ver original
  1. echo "<tr data-idproducto=\"$row[4]\">

Código Javascript:
Ver original
  1. var idProd= this.parentNode.parentNode.dataset.idproducto;

Notese que se hace referencia al id en singular no en plural, es una cuestion gramatical pero que facilita al lector saber que esa variable tiene un valor escalar y no un array. (piensa en que si tu mismo dentro de 6 meses vuelves a mirar el codigo que tu escribistes, lo que querras sera acordarte lo mas rapido posible de que es lo que hace, nombres erroneos te dificultaran la tarea)

Se entiende la idea?

Puede interesarte [URL="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dataset"]este link[/URL] para entender mejor el concepto.
FANTÁSTICO! Muy buena explicación de verdad! podría haber tardado años en darme cuenta (es lo que tiene la falta de experiencia ).
Y es verdad lo que dices de las propiedades, a partir de ahora tendré más cuidado con los nombres que pongo.
Ha costado pero ahora todo funciona bien ^^.No se como agradecerte la ayuda, un post fantástico lleno de información y cositas muy útiles.Realmente te estoy muy agradecido.Un saludo!!!

Etiquetas: ideas, select, tabla, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 18:24.