Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con Foreach en PHP para generar TABLA

Estas en el tema de Problema con Foreach en PHP para generar TABLA en el foro de PHP en Foros del Web. Hola buen dia colegas, este es mi problema, tenia mi script con Mysqli el cual hacia consulta a bdd y manda a imprmir una tabla ...
  #1 (permalink)  
Antiguo 28/02/2013, 15:30
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 11 años, 8 meses
Puntos: 6
Exclamación Problema con Foreach en PHP para generar TABLA

Hola buen dia colegas, este es mi problema, tenia mi script con Mysqli el cual hacia consulta a bdd y manda a imprmir una tabla html generada dinamicamente desde PHP, el detalle es que al migrar a PDO (Por causas de fuerza mayor) ya no me funciona el foreach.. les pongo el código del antes(mysqli) y el despues(pdo)

Agrego como estoy obteniendo el valor de result:
Código PHP:
Ver original
  1. $sql='SELECT folio_intel as FOLIO,date(fecha_venta) as FECHA_VENTA,ventas.sku_garantia as SKU_GARANTIA,
  2.                        garantias.desc_garantia AS NOMBRE_GARANTIA,productos.descripcion as TIPO_PRODUCTO,
  3.                        marca as MARCA,ventas.descripcion as DESCRIPCION_EQUIPO,finicioA as INICIO_ASISTENCIA,
  4.                        ffinA as FIN_ASISTENCIA,finicioG AS INICIO_GARANTIA,ffinG AS FIN_GARANTIA,
  5.                        importe as IMPORTE_SIN_IVA,financiamiento as TOTAL_PAGOS,mensualidad AS MENSUALIDADES,origen AS ORIGEN,
  6.                        nombre_canal AS CANAL_VENTA,users.nombre as VENDEDOR,profile.profile as PERFIL_VENDEDOR,
  7.                        sucursales.nombre_suc as NOMBRE_SUCURSAL
  8.                        FROM ventas
  9.                        RIGHT JOIN canal_venta ON ventas.id_canal=canal_venta.id_canal
  10.                        INNER JOIN users ON ventas.id_user=users.id_user
  11.                        RIGHT JOIN profile ON users.id_profile=profile.id_profile
  12.                        INNER JOIN sucursales ON users.clave_suc=sucursales.clave_suc
  13.                        RIGHT JOIN productos ON ventas.tipo_prod=productos.id_prod
  14.                        RIGHT JOIN garantias ON ventas.SKU_garantia=garantias.SKU_garantia
  15.                        WHERE ventas.folio_intel=:folio';
  16.         $query = $conn->prepare($sql);
  17.                 $query->bindParam(':folio', $folio);
  18.                 $query->execute();
  19.                 $result = $query->fetchAll();
  20.                 $query->closeCursor();
Aqui con Mysqli funcionando perfecto:
Código PHP:
Ver original
  1. $tabla ="<b>INFORMACION DE LA VENTA...</b><br>";
  2.        $tabla .= '<table border="1"><tr><th class="B_Titulos">Campo</th><th class="B_Titulos">Valor</th></tr>';
  3.        foreach($result->fetch_assoc() as $key => $val){
  4.                $tabla .= "<tr><td class='C_subtitulos'>$key</td><td>$val</td></tr>";
  5.        }
  6.        $tabla .= '</table>';
  7.        echo $tabla;

Aqui con PDO, como el foreach que usaba antes me mandaba error en el fetch_all(), le cambie a esto, y no me envia error, solo que no me arroja lo que yo deseo..
Código PHP:
Ver original
  1. $tabla ="<b>INFORMACION DE LA VENTA...</b><br>";
  2.                     $tabla .= '<table border="1"><tr><th class="B_Titulos">Campo</th><th class="B_Titulos">Valor</th></tr>';
  3.                     //foreach($result->fetch_all() as $key => $val){
  4.                     foreach ($result as $key => $val){
  5.                             $tabla .= "<tr><td class='C_subtitulos'>$key</td><td>$val</td></tr>";
  6.                     }
  7.                     $tabla .= '</table>';
  8.                         echo $tabla;
  9.                 }

lo que me muestra es una tabla con esto:
| Campo | Valor |
===========
| [0] | Array |

Alguien podria ayudarme a saber como puedo hacer el foreach para que me funcione correctamente, se supone que la tabla resultante debe contener todos los datos que yo obtento de mi query, que son como 10... Saludos!

Última edición por art_rockerd; 28/02/2013 a las 15:39 Razón: agrear info
  #2 (permalink)  
Antiguo 28/02/2013, 15:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con Foreach en PHP para generar TABLA

¿Ya consultaste el manual?

Que curioso que no hayas probado ningún ejemplo directamente del manual antes de comenzar a migrar, tan fácil que es.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 28/02/2013, 15:55
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Problema con Foreach en PHP para generar TABLA

Prueba esto

Código PHP:
Ver original
  1. //quita estas lineas
  2. $result = $query->fetchAll();
  3. $query->closeCursor();
  4.  
  5.  
  6. //el foreach quedaria asi
  7.  foreach ($query->fetchAll() as $key => $val){

Pruebalo y nos comentas

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #4 (permalink)  
Antiguo 28/02/2013, 16:41
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 11 años, 8 meses
Puntos: 6
De acuerdo Respuesta: Problema con Foreach en PHP para generar TABLA

Cita:
Iniciado por jonni09lo Ver Mensaje
Prueba esto

Código PHP:
Ver original
  1. //quita estas lineas
  2. $result = $query->fetchAll();
  3. $query->closeCursor();
  4.  
  5.  
  6. //el foreach quedaria asi
  7.  foreach ($query->fetchAll() as $key => $val){

Pruebalo y nos comentas

Saludos
MUCHAS GRACIAS!!

quedo asi mira:
Código PHP:
Ver original
  1. $sql='SELECT folio_intel as FOLIO,date(fecha_venta) as FECHA_VENTA,ventas.sku_garantia as SKU_GARANTIA,
  2.                        garantias.desc_garantia AS NOMBRE_GARANTIA,productos.descripcion as TIPO_PRODUCTO,
  3.                        marca as MARCA,ventas.descripcion as DESCRIPCION_EQUIPO,finicioA as INICIO_ASISTENCIA,
  4.                        ffinA as FIN_ASISTENCIA,finicioG AS INICIO_GARANTIA,ffinG AS FIN_GARANTIA ....  WHERE ventas.folio_intel=:folio';
  5.         $query = $conn->prepare($sql);
  6.                 $query->bindParam(':folio', $folio);
  7.                 $query->execute();
  8.                 $result = $query->fetch(PDO::FETCH_ASSOC);
  9.                 $query->closeCursor();
  10.                 if(count($result) > 0){
  11.                     $username=$_SESSION["u_name"];
  12.                     $accion="GERENTE SELECCIONA INFO DE VENTA: $folio";
  13.                     $origen=$_SERVER['REMOTE_ADDR'];
  14.                     generaLogs($username,$accion,$origen);
  15.                     //todo lo que coloques antes del ciclo solo se ejecuta una vez
  16.                     $tabla ="<b>INFORMACION DE LA VENTA...</b><br>";
  17.                     $tabla .= '<table border="1"><tr><th class="B_Titulos">Campo</th><th class="B_Titulos">Valor</th></tr>';
  18.                     //foreach($result->fetch_all() as $key => $val){
  19.                     /*foreach ($result as $key => $val){
  20.                             $tabla .= "<tr><td class='C_subtitulos'>$key</td><td>$val</td></tr>";
  21.                     }*/
  22.                    
  23.                     foreach($result as $campo => $value){
  24.                         $tabla .= "<tr><td class='C_subtitulos'>$campo</td><td>$value</td></tr>";
  25.                      }
  26.                                        
  27.                     $tabla .= '</table>';
  28.                         echo $tabla;
  29.                 }
  30.                 $conn=null;

Etiquetas: foreach, pdo, tablas
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




La zona horaria es GMT -6. Ahora son las 12:34.