Foros del Web » Programando para Internet » PHP »

Recorrer tres arreglos al mismo tiempo

Estas en el tema de Recorrer tres arreglos al mismo tiempo en el foro de PHP en Foros del Web. Hola a todos! pues la verdad es que soy un novato en esto de php y en este momento me encuentro muy atorado mi problema ...
  #1 (permalink)  
Antiguo 30/07/2009, 07:58
Avatar de ix0ye  
Fecha de Ingreso: julio-2009
Ubicación: queretaro
Mensajes: 41
Antigüedad: 14 años, 8 meses
Puntos: 1
Recorrer tres arreglos al mismo tiempo

Hola a todos!

pues la verdad es que soy un novato en esto de php y en este momento me encuentro muy atorado

mi problema es el siguiente:

en la pagina ver_carrito.php hago una consulta a mi bd, lo muestro en una tabla, el problema es que en esa pagina el usuario debe ingresar la cantidad de productos que desea, ademas de poner un comentario del producto o de su pedido.

por lo que creo un arreglo de los valores que necesito es decir

id_producto[] cantidad[] comentario[]

y los mando junto con otros valoes a actualiza_carrito.php

pero . . .

con un foreach puedo recorrer cada arreglo, el punto es que yo necesito recorrer los tres arreglos al mismo tiempo, pues el update de mi bd se basa en esos tres valores

de antemano mil gracias masters!

acodigo de ver_carrito.php
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<html>
<head>
<link rel="shortcut icon" href="leeslab.ico">
<title>
<?php
echo"Carrito de $e ";
?>
</title>
<style type="text/css">
<!--
a {font-family:Arial;font-size:12px;color:#003366;text-decoration:none}

a:visited {font-family:Arial;font-size:12px;color:#003366;text-decoration:none}

a:hover {font-family:Arial;font-size:14px;color:#003366;text-decoration:underline}

.descripcion {font-family:Arial, Helvetica, sans-serif;font-size:11px;color:#000066;}

.titulos {font-family:Arial;font-size:16px;color:#FFFFFF;font-weight:bold;}

.default
{
font-family:Verdana;font-size:12px;color:#BDBDBD
}
-->
</style>
<script language="JavaScript" type="text/javascript">
<!--
  function enviar()
 {
  document.forma.submit();
 } 
//-->
</script>
</head>
<?php
include("funciones.php");
conectar();
if(
verifica_sesion($e,$s))
{
$result=mysql_query("select id_producto,nombre_producto,descripcion,unidad,cantidad from productos left join productos_carrito using (id_producto) where id_carrito='$id_carro'")or die (mysql_error());
$total=mysql_num_rows($result);
if(
$total<=0)
{
 echo
"<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
<html>
<head>
<title>Untitled</title>
<style type='text/css'>
<!--
.formularios {font-family:Verdana;font-size:20px;color:blue}
a {font-family:Arial;font-size:16px;color:#639EEA;text-decoration:none}
a:visited {font-family:Arial;font-size:16px;color:#639EEA;text-decoration:none}
a:hover {font-family:Arial;font-size:16px;color:##639EEA;text-decoration:underline}
-->
</style>
</head>
<body bgcolor='#639EEA'>
<br><br><br><br>
<table border='1' bgcolor='#FFFFFF' align='center'>
<tr>
<td>
<table summary='' width='400'>
<tr align='center'>
<td><img src='llla.gif' alt='' width='275' height='62'></a></td>
</tr>
<tr align='center'>
<td class='formularios'>No se ha insertado ningun producto</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>"
;
}
else
{
echo
"<body bgcolor='#639EEA'>";

echo
"<form name='forma' method='post' action='actualiza_cantidad.php'>
<table summary='' align='center' width=1000 style='border:1px solid #000000;' border=0>
<tr class='titulos' bgcolor='#000066'>
<td>Nombre</td><td>Descripcion</td><td>Unidad</td><td>Cantidad</td><td>Comentario</td><td>Actualizar cantidades</td>
</tr><tr><td><input type='text' name='id_carro' value='$id_carro' /></td></tr>"
;
while(
$row=mysql_fetch_array($result))
{
 
extract($row);
 echo
"<tr  class='descripcion' bgcolor='#CCCCCC'>
 <td>$nombre_producto</td>
 <td>$descripcion</td>
 <td>$unidad</td>
 <td><input type='text' name='$id_producto' value='$cantidad' maxlength='10' size='2'><input type='text' name='id_producto[]' value='$id_producto'</td>
 <td><input type='text' class='default' name='coment[]' value='hola hola hola' maxlength='100' size='60' onfocus='javascript:comentar();' ></form></td>
 <td></td> 
 </tr>"
;
}
echo
"<tr><td><input type='button' value='Enviar' onclick='javascript:enviar();' /></td></tr></table></form>";
echo
"<p align='center'><a href='ver_carrito.php?e=$e&s=$s&id_carro=$id_carro'>Actualiz&aacute;r<img src='actualizar.gif' title='Actualizar' border=0></a></p><br></body>";

}
}
else
{
 
header("location:error.php?tipoerror=2");
 
desconectar();
}
?>
este es el codigo de actualiza_carrito.php
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<?php
include("funciones.php");
conectar();
echo
"hola";
/*
echo"<table border><tr><th>Id_producto</th><th>Cantidad</th><th>Comentario</th></tr><tr>";
echo"$cantidad";
foreach($_POST['id_producto'] as $id_producto)

 foreach($_POST['cantidad'] as $cantidad)
 {
  $rs=("update productos_carrito set cantidad='$cantidad' where id_producto='$id_producto' and id_carro='$id_carro'")or die (mysql_error());
    if(mysql_query($rs))
    {
     echo"agragado<br>";     
    }
    else
    {
     echo"maldito error!";
    }
 }
  //$rs=mysql_query("select id_producto,cantidad,comentario from productos_carrito where id_producto='$id_producto' and id_carrito='$id_carro'")or die (mysql_error());
  //$row=mysql_fetch_array($rs);
  //extract($row);
  //print("<td>$id_producto</td><td>$cantidad</td><td>$comentario</td></tr>");  
}
echo"</table>";
*/
//echo"<table><tr><th>Id producto</th><th>Cantidad</th><th>Comentario<th></th></tr><tr><td>";
/* 

echo"</td><td>";
foreach($_POST['cantidad'] as $cantidadd)
{
 echo"$cantidadd<br>";
}
echo"</td><td>";
foreach($_POST['coment'] as $comentario)
{
 echo"$comentario<br>";
}
echo"</td></tr></table>";
*/
?>
</body>
</html>
otra vez gracias!!!
  #2 (permalink)  
Antiguo 30/07/2009, 08:08
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Recorrer tres arreglos al mismo tiempo

simple, si todos tus arreglos son del mismo tamaño, y deben tener el mismo indice, recorre uno solo y uriliza el indice en los demás:
Código PHP:
foreach($primero as $k => $v){
    
$obtener_segundo=$segundo[$k];
    
$obtener_tercero=$tercero[$k];

  #3 (permalink)  
Antiguo 30/07/2009, 09:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Recorrer tres arreglos al mismo tiempo

Hace poco hice este script para moverme por muchos arrays al mismo tiempo:
Código PHP:
Ver original
  1. <?php
  2. $items1 = array( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 );
  3. $items2 = array( 2, 4, 6 );
  4. $items3 = array( 10, 20, 30, 40 );
  5. $items4 = array( 100, 200, 300, 400, 500, 600, 700 );
  6.  
  7. echo "<table border=1><tr>";
  8. while(true) {
  9.     // Fetch Values
  10.     $item1 = current($items1);
  11.     $item2 = current($items2);
  12.     $item3 = current($items3);
  13.     $item4 = current($items4);
  14.    
  15.     // Print Values
  16.     echo "<td>" . (( $item1 !== false) ? $item1 : "&nbsp;") . "</td>";
  17.     echo "<td>" . (( $item2 !== false) ? $item2 : "&nbsp;") . "</td>";
  18.     echo "<td>" . (( $item3 !== false) ? $item3 : "&nbsp;") . "</td>";
  19.     echo "<td>" . (( $item4 !== false) ? $item4 : "&nbsp;") . "</td>";
  20.    
  21.     // Up! Next Value
  22.     $item1 = next( $items1 );
  23.     $item2 = next( $items2 );
  24.     $item3 = next( $items3 );
  25.     $item4 = next( $items4 );
  26.    
  27.     // Check terminator
  28.     if($item1 === false && $item2 === false && $item3 === false && $item4 === false) break;
  29.     echo "</tr><tr>";
  30. }
  31. echo "</tr></table>";
  32.  
  33. echo sprintf("Done! Max array size is %s.", get_max_count($items1, $items2, $items3, $items4));
  34.  
  35. function get_max_count() {
  36.     $nMax = 0;
  37.     foreach(func_get_args() as $param ) {
  38.         if(is_array($param)) {
  39.             $nSize = count($param);
  40.             if($nSize > $nMax) {
  41.                 $nMax = $nSize;
  42.             }
  43.         }
  44.     }
  45.    
  46.     return $nMax;
  47. }

Saludos.
  #4 (permalink)  
Antiguo 30/07/2009, 11:13
Avatar de ix0ye  
Fecha de Ingreso: julio-2009
Ubicación: queretaro
Mensajes: 41
Antigüedad: 14 años, 8 meses
Puntos: 1
!!!!!wow!!!!!

No cabe duda que son unos genios

jamas lo habia imaginado!

muchisimas gracias a los dos yo no se mucho pero si necesitan algo no duden en pedirlo



Hola de nuevo a todos!

pues el asunto aquel de los tres foreach ya quedo arreglado, bueno, mas bien ya lo arreglaron, el punto ahora es que no se como pasar el arreglo id_cantidad[] de php a javascript.

todo esto porque necesito validar que la cantidad no sea letra, decimal o menor a uno

tal ves es una pregunta muy simple, pero no tengo idea le he picado toda la tarde pero nada

de antemano gracias masters!!!!

Última edición por GatorV; 28/10/2009 a las 09:34
  #5 (permalink)  
Antiguo 30/07/2009, 16:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Recorrer tres arreglos al mismo tiempo

Puedes usar JSON para encodear tus datos y enviarlos a Javascript y leerlos ahí (usando json_encode).

Saludos.
  #6 (permalink)  
Antiguo 31/07/2009, 15:06
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Recorrer tres arreglos al mismo tiempo

Muy bueno el script.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 16:17.