Problemas con array - un verdadesro reto para mi

Hola David te envío un cordial saludo.
Te comento que hasta ahora todo lo he podido solucionar gracias a tu es ayudas, he avabnzado bastante pero se me presento un inconveniente y no se como solucionarlo. Te envío el código para que sepas a que me refiero.
Resulta que estoy enviando un array de una página a otra, dicho array almacena una información de selección de artículos en una página anterior; es algo así como primero seleccionar los artículos y luego llenar las cantidades de los artículos llenados en otra página. Hasta aquí no he tenido problemas. El problema esta al llenar pues tengo un formulario con con 5 campos que a su vez se convierten en 5 columnas. Las dos primeras son los códigos y los nombres de los artículos seleccionados en una página anterior y las otras tres son una para digitar la cantidad en Kilogramos, la otra para digitar la cantidad en Unidades ("SOLAMENTE SE PUEDE LLENAR UNA DE LAS DOS"), y la ultima columna o campo en para convertir las unidades digitadas en Kilogramos. (Esto tampoco se como hacerlo pues una vez lo hice pero sin array o regiones de repetición")
El inconveniente o problema que tengo es que no se como unir lo digitado con el array ya existente y enviarlo a una tabla de MySQL.
Te envío el código para que sepas que he hecho hasta el momento y como puedo hacer lo que quiero.
<?php
session_start();
if(isset($_SESSION['usuario']) and ($_SESSION['estado'] == 'Autenticado')
{
?>
<html>
<style type="text/css">
<!--
.Estilo1 {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
font-weight: bold;
}
.Estilo3 {font-size: 16px}
-->
</style>
<body>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td colspan="6">
<div align="center">
<p class="Estilo1 Estilo3">ESTOS SON LOS PRODUCTOS DE SU PEDIDO.</p>
<?php
$variden=$_POST['tidencli'];
$varcontra=$_POST['tcontracli'];
include("conectar.inc");
$database=conecta();
$resultado1 = mysql_query("SELECT * FROM tclientes WHERE idencli='$variden' and contracli='$varcontra'");
while($encontrado = mysql_fetch_array($resultado1))
{
$nomcli=$encontrado["nomcli"];
$nit=$encontrado["idencli"];
echo ("$nomcli <br> NIT $nit");
$fecha=date("Y-m-d");
}
$_SESSION["productos"] = $_POST['ch'];
?>
// AQUI EMPIEZA EL PROBLEMA
<form action="guardar_pedidos.php" method="get" enctype="multipart/form-data" name="form1">
<p align="center"><input name="tidencli" type="hidden" value="<?php echo $nit?>"><input name="tnomcli" type="hidden" value="<?php echo $nomcli?>"></p>
<p>Fecha de Generacion: <input type="text" value="<?php echo $fecha?>" name="tfechagen" readonly="true">
Fecha de Envio de Pedido: <input type="text" value="aaaa-mm-dd" name="tfechaped"></p>
<p class="Estilo1">Recuerde: En el cuadro de OTROS PRODUCTOS escriba los productos y las cantidades deseadas. </p>
</div>
</td>
</tr>
<tr class="Estilo1">
<td width="65">
<div align="center">Codigo</div>
</td>
<td width="320">
<div align="center">Productos</div>
</td>
<td width="50">
<div align="center">Kg</div>
</td>
<td width="59">
<div align="center"> Und</div>
</td>
<td width="57">
<div align="center">Total Kg. </div>
</td>
<td width="398">
<div align="center">Caracteristicas</div>
</td>
</tr>
</table>
<?php
echo"<input name=tidencli type=hidden value='$nit'><input name=tnomcli type=hidden value='$nomcli'>";
if (isset($_POST['ch']))
{
foreach ($_POST['ch'] as $value)
{
$consulta2=("select * from tproductos where codpro=$value");
$resultado1 = mysql_query($consulta2);
while($get_infor=mysql_fetch_array($resultado1))
{
$vcodpro=($get_infor['codpro']);
$vnompro=($get_infor['nompro']);
echo("
<table border=0 align=center width=100% cellpadding=0 cellspacing=0>
<tr>
<td><input type=text size=6 name=tcodpro value='$vcodpro' class=Estilo2
readonly=true</td>
<td><input type=text size=47 name=tnompro value='$vnompro' class=Estilo2 readonly=true </td>
<td><input type=text size=5 name=tcantik value='' class=Estilo2</td>
<td><input type=text size=5 name=tcantiu value='' class=Estilo2</td>
<td><input type=text size=5 name=ttotalk value='' class=Estilo2 readonly=true</td>
<td><input type=text size=60 name=tobser value='' class=Estilo2</td>
</tr>
</table>
");
}
}
}
?>
<table width="100%" border=0 align=center cellpadding="0" cellspacing="0">
<tr>
<td width="903">
<div align="right" class="Estilo1">TOTAL Kg PEDIDOS </div>
</td>
<td width="86"><input name="ttotalped" type="text" size="6" readonly="true"></td>
</tr>
</table>
<div align="center" class="Estilo1">Otros Productos
</div>
<div align="center">
<p>
<textarea name="textarea" cols="60" rows="4"></textarea>
</p>
</div>
<?php echo "
<p align=center><a href='javascript:history.go(-1)'><<volver a lista de Productos</a></p>
<br>"; ?>
<p align="center"><input type="submit" name="Submit" value="Guardar Pedido">
</form>
</body>
</html>
//La pregunta es como hago para asociar o unir lo digitado por el usuario al array ya existente que trae una información. Y luego enviar toda esa información a mysql.
//Yo intente hacerlo con ayuda de dreamweaver pero solo me guarda la ultima cantidad del ultmo articulo encontrado en el array
<?php
}
else
{
echo "Su sesion esta cerrada Satisfactoriamente. <br>";
echo "Debe empezar sesion nuevamente <br>";
echo "<a href=login_clientes.php>Iniciar sesion</a> <br>";
exit();
}
?>

1 Respuesta

Respuesta
1
El problema está en que llamas a los elementos de formulario con el mismo nombre en toda la columna. Por lo tanto no pueden distinguirse (y por eso te devuelve el último que encuentra).
Por ejemplo, en lugar de name=tnompro deberías usar name=tnompro[]
Para que así cada fila sea un componente de un array.
Cuando recuperes los valores de tnompro estarán en una matriz (un valor para cada fila).
David. Te envío un cordial saludo.
Te comento que seguí tu concejo pero no me funciono no se que estoy haciendo mal o que me hace falta. Te comento nuevamente que la idea es que al llenar un formulario que viene de una consulta con un array, se almacene en una base de datos o pase a otra página.
Te envío parte del código nuevamente cone el cambio que hice con tu sugerencia. Pues es casi el mismo que el que te envíe anteriormente.
<?php
session_start();
if(isset($_SESSION['usuario']) and $_SESSION['estado'] == 'Autenticado')
{
?>
<html>
<style type="text/css">
<!--
.Estilo1 {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
font-weight: bold;
}
.Estilo3 {font-size: 16px}
-->
</style>
<body>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td colspan="6">
<div align="center">
<p class="Estilo1 Estilo3">ESTOS SON LOS PRODUCTOS DE SU PEDIDO.</p>
<?php
$variden=$_POST['tidencli'];
$varcontra=$_POST['tcontracli'];
include("../administracion/conectar.inc");
$database=conecta();
$resultado1 = mysql_query("SELECT * FROM tclientes WHERE idencli='$variden' and contracli='$varcontra'");
while($encontrado = mysql_fetch_array($resultado1))
{
$nomcli=$encontrado["nomcli"];
$nit=$encontrado["idencli"];
echo ("$nomcli <br> NIT $nit");
$fecha=date("Y-m-d");
}
$_SESSION["productos"] = $_POST['ch'];
?>
<form action="guardar_pedidos.php" method="post" enctype="multipart/form-data" name="form1">
<p align="center"><input name="tidencli" type="hidden" value="<?php echo $nit?>"><input name="tnomcli" type="hidden" value="<?php echo $nomcli?>"></p>
<p>Fecha de Generacion: <input type="text" value="<?php echo $fecha?>" name="tfechagen" readonly="true">
Fecha de Envio de Pedido: <input type="text" value="aaaa-mm-dd" name="tfechaped"></p>
<p class="Estilo1">Recuerde: En el cuadro de OTROS PRODUCTOS escriba los productos y las cantidades deseadas. </p>
</div>
</td>
</tr>
<tr class="Estilo1">
<td width="65">
<div align="center">Codigo</div>
</td>
<td width="320">
<div align="center">Productos</div>
</td>
<td width="50">
<div align="center">Kg</div>
</td>
<td width="59">
<div align="center"> Und</div>
</td>
<td width="57">
<div align="center">Total Kg. </div>
</td>
<td width="398">
<div align="center">Caracteristicas</div>
</td>
</tr>
</table>
<?php
echo"<input name=tidencli type=hidden value='$nit'><input name=tnomcli type=hidden value='$nomcli'>";
if (isset($_POST['ch']))
{
/*$compactada=($_POST['ch']);
print_r($compactada);
$productos=($compactada);
print_r($productos);*/
foreach ($_POST['ch'] as $value)
{
$consulta2=("select * from tproductos where codpro=$value");
$resultado1 = mysql_query($consulta2);
while($get_infor=mysql_fetch_array($resultado1))
{
$vcodpro=($get_infor['codpro']);
$vnompro=($get_infor['nompro']);
echo("
<table border=0 align=center width=100% cellpadding=0 cellspacing=0>
<tr>
<td><input type=text size=6 name=tcodpro[] value='$vcodpro' class=Estilo2
readonly=true</td>
<td><input type=text size=47 name=tnompro[] value='$vnompro' class=Estilo2 readonly=true </td>
<td><input type=text size=5 name=tcantik[] value='' class=Estilo2</td>
<td><input type=text size=5 name=tcantiu[] value='' class=Estilo2</td>
<td><input type=text size=5 name=ttotalk[] value='' class=Estilo2 readonly=true</td>
<td><input type=text size=60 name=tobser[] value='' class=Estilo2</td>
</tr>
</table>
");
}
}
}
?>
<table width="100%" border=0 align=center cellpadding="0" cellspacing="0">
<tr>
<td width="903">
<div align="right" class="Estilo1">TOTAL Kg PEDIDOS  </div>
</td>
<td width="86"><input name="ttotalped" type="text" size="6" readonly="true"></td>
</tr>
</table>
<div align="center" class="Estilo1">Otros Productos
</div>
<div align="center">
<p>
<textarea name="textarea" cols="60" rows="4"></textarea>
</p>
</div>
<?php echo "
<p align=center><a href='javascript:history.go(-1)'><<volver a lista de Productos</a></p>
<br>"; ?>
<p align="center"><input type="submit" name="Submit" value="Hacer Pedido">
</form>
</body>
</html>
<?php
}
else
{
// Usuario que no se ha logueado
echo("location: cerrarsesion.php");
exit();
}
?>
La pregunta es como hago para que lo que escriba en ese formulario se guarde en una tabla o se muestre en otra página, teniendo en cuenta que algunos campos están asociados a una consulta y esta asu vez a un array de nombre (ch).
<?php
session_start();
if(isset($_SESSION['usuario']) and $_SESSION['estado'] == 'Autenticado')
{
include("conectar.inc");
$database=conecta();
//$aa=($_SESSION["productos"]);
$_SESSION['pro'] = $_POST['tcodpro'];
$_SESSION['pro'] = $_POST['tnompro'];
$_SESSION['pro'] = $_POST['tcantik'];
$_SESSION['pro'] = $_POST['tcantiu'];
$_SESSION['pro'] = $_POST['ttotalk'];
$_SESSION['pro'] = $_POST['tobser'];
$aa=$_SESSION['pro'];
$compactada=$_SESSION['pro'];
print_r($compactada);
$productos1=($compactada);
print_r($productos1);
De antemano te doy gracias y te pido que me ayudes es lo único que me hace falta para terminarla
Si quieres pasar esas matrices que obtienes a variables de sesión, lo estás haciendo mal, puesto que estás sobrescribiendo la misma variable.
Deberías cambiarlo por, por ejemplo:
$_SESSION['pro']['tcodpro'] = $_POST['tcodpro'];
$_SESSION['pro']['tnompro'] = $_POST['tnompro'];
Y así con el resto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas