Foros del Web » Programando para Internet » PHP »

Ayuda con un arreglo

Estas en el tema de Ayuda con un arreglo en el foro de PHP en Foros del Web. Hola, estoy trabajando con checkbox desde un foemulario para que el usuario pueda seleccionar mas de una opcion: Código PHP: $i = 1 ;  While( ...
  #1 (permalink)  
Antiguo 18/04/2005, 17:17
Avatar de polaya  
Fecha de Ingreso: diciembre-2004
Ubicación: Chile
Mensajes: 191
Antigüedad: 13 años
Puntos: 0
Ayuda con un arreglo

Hola, estoy trabajando con checkbox desde un foemulario para que el usuario pueda seleccionar mas de una opcion:
Código PHP:
$i=1;
 While(
$row=mysql_fetch_array($conad))
{
   echo 
"<input type='checkbox' name='ad$i' value='$row[nombre]'>&nbsp;$row[nombre]<br>";
     
$i++;
 } 
la idea es guardar los valores seleccionados en un arreglo:
Código PHP:
$i=1;
 while(
$i<=$NFilas)
 {
       
$lisad = array('$_POST[ad$i]');
       foreach (
$lisad as $adic){echo "adic:$adic<br>";}
        
$i++;
                       
  } 
Pero me llena el arreglo con la palabra $_POST[ad$i], no con los valores de la variable.Hice un foreach para verlo y me muestra eso, no los valores de las variables.
¿Alguien puede ver lo que yo no veo?
Gracias
__________________
La vida da muchas vueltas...debe ser por eso que uno se marea.
  #2 (permalink)  
Antiguo 18/04/2005, 17:23
 
Fecha de Ingreso: noviembre-2003
Ubicación: Veracruz
Mensajes: 131
Antigüedad: 14 años, 1 mes
Puntos: 0
Código PHP:
 $i=1;
While(
$row=mysql_fetch_array($conad))
{
   echo 
'<input type="checkbox" name="ad'.$i.'" value="'.$row[nombre].'">&nbsp;'.$row[nombre].'<br>';
     
$i++;

Prueba y me dices
Saludos
  #3 (permalink)  
Antiguo 19/04/2005, 01:58
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
No puedes hacer eso de $_POST[ad$i]... .. creo sí habría una manera... pero pa' lo que quieres esta mal...

También haz de saber que $_POST es ya una matriz... .. no sé ni qué "resulte" (si lo hicieras funcionar) de algo como $lisad = array('$_POST[ad$i]')... solo agregarias un índice a un nuevo array... creo quedaría algo como:
$lisad[0][indice?][ad1]=valor;
$lidas[0][indice?][ad2]=valor;
..... pregunto indice? porque no sé que resultaria del $_POST
$lidad[0][indice?][adn]= valor;

Bueno.. ni al caso... solo como comentario de lo que estarias tratando de hacer... como ves no tiene mucho sentido tener siempre un [0][indice?][ad1] pudiendo tener un simple [ad1]...

Ahora bien... dejándonos de payasadas y ya ayudandote.. ... en ves de hacer un name="ad1" haz un name="ad[]" con ello pasas un arreglo y puedes recojerlo con
Código PHP:
foreach ($_POST['ad'] as $clave=>$valor)
// donde 'ad' es el nombre de tu arreglo
// $clave será el índice del arreglo
// $valor será el contenido de tu arreglo en $clave
        
echo "El índice ".$clave." tiene como valor <b>".$valor."</b><br>"
Ahora... como comentario al estar pasando solo un arreglo de la forma name="ad[]" al recogerlo se le asignarán indices numéricos partiendo de 0 como se haria normalmente... más! puedes pasarle índices que tu quieras de la forma name="ad['algo']"

Creo me compliqué mucho. Si necesitas algo más "gráfico" hazmelo saber. Suerte!

ah! y http://mx2.php.net/manual/es/ref.array.php
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 26/04/2005, 08:44
Avatar de polaya  
Fecha de Ingreso: diciembre-2004
Ubicación: Chile
Mensajes: 191
Antigüedad: 13 años
Puntos: 0
Exclamación chicos, nada resulta

hola, lo intente de las dos maneras que me enviaron y no resulto con ninguna de las dos...¿cual sera la forma correcta dehacer lo que necesito?
gracias
1.- llenar el arrehlo con los valores obtenidos de los chekbox
2.- Guardar ese arreglo en la bd
3.- Cuandi quiera modificar los datos, que lea el campo donde esta guardado el arraglo y complete los checkbox, dependiendo de los que fueron seleccionados al ingresarlo.
eso...
__________________
La vida da muchas vueltas...debe ser por eso que uno se marea.

Última edición por polaya; 26/04/2005 a las 08:54
  #5 (permalink)  
Antiguo 26/04/2005, 09:09
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cita:
Iniciado por polaya
hola, lo intente de las dos maneras que me enviaron y no resulto con ninguna de las dos...
y ya??... podrías mencionar el por qué "no resultó" para corregirte/orientarte...
Cita:
1.- llenar el arrehlo con los valores obtenidos de los chekbox
2.- Guardar ese arreglo en la bd
3.- Cuandi quiera modificar los datos, que lea el campo donde esta guardado el arraglo y complete los checkbox, dependiendo de los que fueron seleccionados al ingresarlo.
1) Es justo lo que mencioné con anterioridad... tu creas los names de tus checkn¡boxes de la forma name="algo[]" y con eso estás creando un arreglo... y solo se pasarán los valores seleccionados...
2) Gasto de recursos y te complicarias más... no creo que sea buena opción.
3) ... referente a 2 ¿no?.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 26/04/2005, 09:17
Avatar de SAGITARIO  
Fecha de Ingreso: febrero-2005
Ubicación: Huancayo
Mensajes: 108
Antigüedad: 12 años, 9 meses
Puntos: 0
Trabaja De Esta Manera

En el formulario al momento de crear tus checkbox

Código PHP:
<?
$i
=1
//  todo el encabezado de conexion a la BD  y todo ...
While($row=mysql_fetch_array($conad)) 

   echo 
"<input type='checkbox' name='valor[]' value='$row[nombre]'>&nbsp;$row[nombre]<br>"
     
$i++; 


?>
*** cuando envias o haces un submit

recibelo de esta manera:
Código PHP:
foreach($valor as $datos)
{
echo 
"$datos <BR>";


el truco esta en :
name='valor[]'

ok ?

bueno es simple pruebalo

salu2
  #7 (permalink)  
Antiguo 26/04/2005, 09:39
Avatar de polaya  
Fecha de Ingreso: diciembre-2004
Ubicación: Chile
Mensajes: 191
Antigüedad: 13 años
Puntos: 0
no lo lee

hice lo que me dijiste en el paso 1, pero cuando lo quiero leer antes de guardarlo, no me muestra nada...
__________________
La vida da muchas vueltas...debe ser por eso que uno se marea.
  #8 (permalink)  
Antiguo 26/04/2005, 09:48
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Prueba esto, espero quede más claro:
Código PHP:
<?php
if(isset($_POST['enviar']))
foreach(
$_POST['arreglo'] as $indice=>$valor)
echo 
"Indice: $indice -> Valor: $valor<br>";
?>
<form name="form1" method="post" action="<?=$_SERVER['PHP_SELF'?>">
  <p>
    <input name="arreglo[]" type="checkbox" id="arreglo[]" value="opcion1">
  Opci&oacute;n1  </p>
  <p>    <input name="arreglo[]" type="checkbox" id="arreglo[]" value="opcion2">
Opci&oacute;n2</p>
  <p>    <input name="arreglo[]" type="checkbox" id="arreglo[]" value="opcion3">
Opci&oacute;n3</p>
  <p>    
    <input name="arreglo[]" type="checkbox" id="arreglo[]" value="opcion4">
Opci&oacute;n4</p>
  <p>
    <input type="submit" name="enviar" value="Enviar">
  </p>
</form>
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #9 (permalink)  
Antiguo 26/04/2005, 09:48
Avatar de polaya  
Fecha de Ingreso: diciembre-2004
Ubicación: Chile
Mensajes: 191
Antigüedad: 13 años
Puntos: 0
De acuerdo ahora si

sagitario, probe con lo que ne dijiste y funciono, ahora para guardarlo en la BD lo hago con el primero o con el segundo valor, es decir con valor o con el otro???
__________________
La vida da muchas vueltas...debe ser por eso que uno se marea.
  #10 (permalink)  
Antiguo 26/04/2005, 09:56
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cita:
Iniciado por polaya
sagitario, probe con lo que ne dijiste y funciono...
???? Te burlas de mi?
Cita:
Iniciado por SAGITARIO
el truco esta en :
name='valor[]'
.. es diferente a lo que dije??
Cita:
Iniciado por jam1138
en ves de hacer un name="ad1" haz un name="ad[]" con ello pasas un arreglo
Cita:
Iniciado por jam1138
tu creas los names de tus checkn¡boxes de la forma name="algo[]"
Cita:
Iniciado por jam1138
solo un arreglo de la forma name="ad[]"
... mejor reir... ...

(sus)... estás pasando el "value".. ese es lo que guardarás...

Edito e incisto: Ejecuta el código que te dejé como tal... ve como funciona, ve lo que pasas.. ve lo que ocuparás...

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #11 (permalink)  
Antiguo 26/04/2005, 10:16
Avatar de polaya  
Fecha de Ingreso: diciembre-2004
Ubicación: Chile
Mensajes: 191
Antigüedad: 13 años
Puntos: 0
disculpa

estaba haciendo algo mal y cuando lei el mensaje de sagitario no habia ingresado el tuyo, despues actualice la pagina y resulto, la verdad es que como tu me dijiste deberia haber funcionado desde un principio lo que pasa es que yo tenia un error en el foreach...te agradezco la paciencia con esta principiante...
__________________
La vida da muchas vueltas...debe ser por eso que uno se marea.
  #12 (permalink)  
Antiguo 26/04/2005, 10:50
Avatar de polaya  
Fecha de Ingreso: diciembre-2004
Ubicación: Chile
Mensajes: 191
Antigüedad: 13 años
Puntos: 0
malditos arreglos

guardo el "valor" en la base de datos pero cuando lo quiero leer, solo me muestra la palabra "array", he tratado con varias funciones de arreglos pero no me pezca...parece que lo de trabajar con arreglos no es mi fuerte
__________________
La vida da muchas vueltas...debe ser por eso que uno se marea.
  #13 (permalink)  
Antiguo 26/04/2005, 10:56
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Si te muestra la palabra "array" es porque no estás "descomponiendo" dicho arreglo... ve el ejemplo que dejé, vé dónde se descompone... entonces tu insert dería dentro del foreach...
Código PHP:
foreach($_POST['arreglo'] as $indice=>$valor)
mysql_query("INSERT INTO tabla(campo) VALUES ('$valor')"); 
Tendrás que organizarte bien, ver cómo "fluyen" tus datos... no sé qué vayas a hacer...

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #14 (permalink)  
Antiguo 26/04/2005, 11:05
Avatar de polaya  
Fecha de Ingreso: diciembre-2004
Ubicación: Chile
Mensajes: 191
Antigüedad: 13 años
Puntos: 0
disculpa mi ignorancia

pero asi como lo muestras quiere decir que tendre que guardar un valor por campo????, es decir el valor 1 en campo1 de la bd, valor 2, en campo2 y asi????...lo que yo necesito es que guarde todos los valores en un solo campo para ahorrar espacio y ademas porque nunca se sabe cuantos valores tendra el arreglo...chuta que me salio complicada la cosa...
__________________
La vida da muchas vueltas...debe ser por eso que uno se marea.
  #15 (permalink)  
Antiguo 26/04/2005, 11:22
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
como dije: tendrás que oprganizarte bien... en unprincipio veo medio mal eso de guardar todos los valores en un campo... ¿cómo???.. te quedaría [dato1dato2dato3daton].. bueno, podrías darle "presentación".. pero en cuestiones de "practisidad" la veo complicada... pero bueno, sería algo así:
Código PHP:
foreach(...etc...)
$variable.=$valor." "
Así $valor varia, y los datos se irán acomulando en $variable... esa será la que guardarás...

Organizate,... ve como fluyen los datos.

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 27/04/2005 a las 05:23
  #16 (permalink)  
Antiguo 26/04/2005, 11:37
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
Otra forma es "serializar" ese array y guardarlo de esa forma..
Por ejemplo
Código PHP:
$var_para_guardar serialize($_POST['tu_array']);
$var_para_guardar mysql_real_escape_string($var_para_guardar
Luego, cuando realizas el SELECT, "desserializas" (se escribe asi?? siempre pregunto lo mismo y nadie responde...jejeje) lo que obtienes dde dicho campo.
http://ar2.php.net/manual/en/function.unserialize.php

Pero me sumo a lo que dice jam... eso de almacenar varios valores en un campo de la BD no es bueno. Sobre todo si mas tarde debes comparar esos valores.

Saludos
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 10:14.