Foros del Web » Programando para Internet » PHP »

pasar array bidimensional a otra función

Estas en el tema de pasar array bidimensional a otra función en el foro de PHP en Foros del Web. Hola tengo un formulario de este tipo Código: $i=0; //$article biene de haber consultado los artículos de una tabla de la Bd foreach ($article as ...
  #1 (permalink)  
Antiguo 18/09/2008, 08:37
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
pasar array bidimensional a otra función

Hola tengo un formulario de este tipo

Código:
 
$i=0;
//$article biene de haber consultado los artículos de una tabla de la Bd
 foreach ($article as $row){
   echo "<td colspan='2'><input type='hidden' name='art[$i][0]' value='$row[artid]'></td>";

  echo "<td colspan='2'><input type='text' name='art[$i][1]' value='$row[unidades]'></td>";
 echo "<td><b>PedRef:</b>$row[ref]</td>";
 echo "<td><b>Nombre:</b>$row[nombre]</td>";
 echo "<td><b>Precio:</b>$row[precio]</td> </tr>";
 $i++;


}
Código:
//Esto es para comprobar que el foreach funcionó y descartar posibles errores
 echo "artid: ".$row[artid]."<br>";
  echo "unidades: ".$row[unidades]."<br>";
Es decir recoje en el array bidimensional la id de un artículo y las unidades de este; el problema que tengo es que quiero pasarlo a una función para desde allí haciendo un update a la bd actualizar una lista de artículos de mi tienda. Los valores los paso de este modo:
update_articles_pedido($_POST['article'],$_POST['ref']);
//creo que aquí esta el problema
Y no me funciona . La función no recibe ningún valor ya que lo compruebo con echo y no devuelve nada.

función update_articles_pedido
Código:
function update_articles_pedido($articles,$ref) {

  $conn = db_connect();

for ($i=0;$i<count($artid);$i++) {
  //Actualizamos el Stock de cada articulo del pedido 
 	$sSQL =mysql_query ( "update  pedidos_articulos   
             				set unidades='".$articles[$i][1]."'
			 				where artid='".$articles[$i][0]."' 
							AND ref='$ref'" );
	$result=mysql_query($sSQL)or die("<br><h3>El usuario no existe </h3>".mysql_error());
	mysql_free_result($sSQL);						  

	if (!$result)
	return false;
	
	}
	
	return true	;
}
Un saludo y gracias
  #2 (permalink)  
Antiguo 18/09/2008, 08:44
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 19 años, 5 meses
Puntos: 1
Respuesta: pasar array bidimensional a otra función

Que tal Dundee, primero no dices donde estas llamando la función o por lo menos en este trozo de código no esta, pareciera que lo estas haciendo desde otra página, si es así en tu primera página donde llenas el arreglo debes colocar un control en el formulario donde guardas los valores de article, puedes colocar input tipo hidden con el valor del arreglo. Espero te sirva de ayuda. Saludos...

Se me olvidaba, si lo estas haciendo en la misma página donde haces la consulta tienes que cambiar el llamado de la función asi:
update_articles_pedido($article,$row['ref']);

Espero te sirva de ayuda. Saludos...
__________________
Ante el desconocimiento ni entendimiento de las cosas decimos que los demás estan locos.

José Quintero. Saludos.
:adios:
  #3 (permalink)  
Antiguo 18/09/2008, 09:24
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: pasar array bidimensional a otra función

Cita:
Iniciado por jmqc Ver Mensaje
Que tal Dundee, primero no dices donde estas llamando la función o por lo menos en este trozo de código no esta, pareciera que lo estas haciendo desde otra página, si es así en tu primera página donde llenas el arreglo debes colocar un control en el formulario donde guardas los valores de article, puedes colocar input tipo hidden con el valor del arreglo. Espero te sirva de ayuda. Saludos...

Se me olvidaba, si lo estas haciendo en la misma página donde haces la consulta tienes que cambiar el llamado de la función asi:
update_articles_pedido($article,$row['ref']);

Espero te sirva de ayuda. Saludos...
Hola ante todo gracias por tu rápida respuesta pero te cuento : la función
function update_articles_pedido($articles,$ref) está en otro archivo , es decir la llamo con require , ese require está bien púes si pongo en la función cualquier cosa , por ejemplo echo "hola" y la invoco funciona.
El problema que tengo es que por algún motivo no llegan los valores del formulario a la función . Es curioso pero tengo un hidden en el formulario
<input type="hidden" name="ref" value="<? echo $ref ?>"/>
y parece que el valor de $ref no llega , ya que despúes de esto hago :
echo $_POST['ref']; Y NO SALE NADA , tremendamente raro. Creo que lo mejor es que pegue el script entero sino siempre vamos a estar con las dudas , y seguro que es una tontería pero que me está volviendo loco.

Código:
//ya ,ya se que es mejor usar $_SESSION[] qu esta ,pero es php 4 I'm sorry 
if (!session_is_registered("admin_user")) 
{
	echo "XTT";
	exit;
}
panel_control ();
if ($_GET['ref'])
	$ref=$_GET['ref'];
else
	$ref=$_POST['ref'];
//Comprobamos si hay artículos en el pedido
	//(esto funciona bien y es para mostrar  los artículos con el foreach)
 if (!$article=edit_pedido($ref))
 {
 	echo "<h3>Pedido vacío, por favor añada artículos</h3>";
 	exit;
}
if ($_POST['ref']) {


	if (!update_articles_pedido($_POST['art'],$ref))
 	echo "<p>No se han podido actualizar los artículos, disculpe las molestias, inténtelo más tarde, Gracias</p>";
	
 	else
 	echo "<p>Pedido actualizado correctamente</p>";

}

 ?>
 <form name='edit' action="<? $PHP_SELF ?>">
 <table cellpadding="16" cellspacing="8">
 
 <tr>
 <th> Pedido Ref: <? echo $ref ?> </th>
 </tr>
 <?
$i=0;

 foreach ($article as $row){
   echo "<td colspan='2'><input type='hidden' name='art[$i][0]' value='$row[artid]'></td>";

  echo "<td colspan='2'><input type='text' name='art[$i][1]' value='$row[unidades]'></td>";
 echo "<td><b>PedRef:</b>$row[ref]</td>";
 echo "<td><b>Nombre:</b>$row[nombre]</td>";
 echo "<td><b>Precio:</b>$row[precio]</td> </tr>";
 $i++;
 echo "artid: ".$row[artid]."<br>";
  echo "unidades: ".$row[unidades]."<br>";

}

?>
<tr> 	
<td colspan='4'><input type="submit" name="ok"  value="ACTUALIZAR PEDIDO"/>
				
					<input type="hidden" name="ref"  value="<? echo $ref ?>"/>	
</td>
</tr>
</form>

</table>
Un saludo
  #4 (permalink)  
Antiguo 18/09/2008, 09:35
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 19 años, 5 meses
Puntos: 1
Respuesta: pasar array bidimensional a otra función

Dundee ref viene por url?, o lo llenas cuando haces la consulta? si es así la primera vez que lo muestras en <th> Pedido Ref: <? echo $ref ?> </th> no debería mostrarte el valor pq no existe la variable, yo agregue casi al final del foreach esto: $ref = $row[ref];para llenar la variable y cuando coloques el valor al hidden la variable este llena eso lo puedes comprobar cuando cargues tu página viendo el codigo html generado.
__________________
Ante el desconocimiento ni entendimiento de las cosas decimos que los demás estan locos.

José Quintero. Saludos.
:adios:
  #5 (permalink)  
Antiguo 18/09/2008, 09:45
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: pasar array bidimensional a otra función

Cita:
Iniciado por jmqc Ver Mensaje
Dundee ref viene por url?, o lo llenas cuando haces la consulta? si es así la primera vez que lo muestras en <th> Pedido Ref: <? echo $ref ?> </th> no debería mostrarte el valor pq no existe la variable, yo agregue casi al final del foreach esto: $ref = $row[ref];para llenar la variable y cuando coloques el valor al hidden la variable este llena eso lo puedes comprobar cuando cargues tu página viendo el codigo html generado.
He editado porque acabo de compobar que la función devuelve true , es decir que sí pasa ya el $ref. Creo que el fallo está en mi UPDATE a la bd , haber si alguien me puede decir que falla.

Código:
function update_articles_pedido($articles,$ref) {

  $conn = db_connect();

for ($i=0;$i<count($articles);$i++) {
  //Actualizamos el Stock de cada articulo del pedido 
 	$sSQL =mysql_query ( "update  pedidos_articulos   
             				set unidades='".$articles[$i][1]."'
			 				where artid='".$articles[$i][0]."' 
							AND ref='$ref'" );
	$result=mysql_query($sSQL)or die(mysql_error());
	mysql_free_result($sSQL);						  

	if (!$result)
	return false;
	
	}
	
	return true	;
}
Acabo de localizar el problema , pero aún no he sido capaz de resolverlo (creo que me falla la sintaxis), el tema es que si hacemos
echo count($articles) que se supone que es un array bidimensional con el número de artículos con sus IDS y UNIDADES me da 0 . es decir que no los guarda bien el formulario.
Lo curioso es que si miramos la barra de direcciones despúes de enviar el formulario parece que los pasa bien, así que el tema estará digo yo en que no paso los valores bien a la función que hace el UPDATE ¿no?.
Código:
?art[0][0]=1376&art[0][1]=22&art[1][0]=1383&art[1][1]=1&art[2][0]=1377&art[2][1]=5&art[3][0]=1374&art[3][1]=6&ok=ACTUALIZAR+PEDIDO&ref=307
¿ SEGURO QUE ESTO ESTÁ BIEN PASADO ASÍ: ?
if (!update_articles_pedido($_POST['art'],$ref))

Si le doy a ver ćodigo fuente en el mozilla sale esto (por eso no entiendo porque no pasa el array correctamente).
Código:
<td colspan='2'><input type='hidden' name='art[0][0]' value='1376'></td>
<td colspan='2'><input type='text' name='art[0][1]' value='22'></td>
<td><b>Nombre:</b>Burro 10 Carro</td>
<td><b>Precio:</b>1315.6</td>
 </tr>
artid: 1376<br>unidades: 22<br>
<td colspan='2'><input type='hidden' name='art[1][0]' value='1383'></td>
<td colspan='2'><input type='text' name='art[1][1]' value='1'></td>
<td><b>Nombre:</b>Buey 14</td><td><b>Precio:</b>26.3</td> 
</tr>
artid: 1383<br>unidades: 1<br>
<td colspan='2'><input type='hidden' name='art[2][0]' value='1377'>
</td><td colspan='2'><input type='text' name='art[2][1]' value='5'>
</td><td><b>Nombre:</b>Burro 10 Carro</td><td><b>Precio:</b>299
</td> </tr>artid: 1377<br>unidades: 5<br><td colspan='2'><input type='hidden' name='art[3][0]' value='1374'>
</td><td colspan='2'><input type='text' name='art[3][1]' value='6'></td>
<td><b>Nombre:</b>Burro 8 Carro</td><td><b>Precio:</b>243</td> </tr>artid: 1374<br>unidades: 6<br>numero: 1<tr>
Un saludo y gracias

Última edición por Dundee; 18/09/2008 a las 11:26
  #6 (permalink)  
Antiguo 18/09/2008, 12:18
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: pasar array bidimensional a otra función

SOLUCINADO EN PARTE .
Ya he conseguido dar con el fallo definitivo que era que el array se llenaba pero no pasaba hablo
de $art[$i][0] para las ids y $art[$i][1] para las unidades. El problema es que al intentar pasárselo
a la función hacía esto.
if (!update_articles_pedido($_POST['art'],$ref))
pero nooooo esta mal , nunca en la vida pasaba el valor del array , sino que de tanto probar he dado con la solución : es así:
if (!update_articles_pedido($art,$ref)):
Parece ser (que alguien cuando pueda lo explique porfa) que los arrays no hay que ponerles POST aunque vengan de un formulario.

Saludos y gracias a tod@s.
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 03:33.