Foros del Web » Programando para Internet » PHP »

acceder al contenido de un checkbox

Estas en el tema de acceder al contenido de un checkbox en el foro de PHP en Foros del Web. Hola, tengo un formulario en el que creo unos checkbox dependiendo de la información que tenga la BBDD de la siguiente forma: Cita: while ($row ...
  #1 (permalink)  
Antiguo 17/07/2006, 11:06
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 11 años, 5 meses
Puntos: 0
acceder al contenido de un checkbox

Hola, tengo un formulario en el que creo unos checkbox dependiendo de la información que tenga la BBDD de la siguiente forma:
Cita:
while ($row = mysql_fetch_array($resultado)){


echo "<input type=\"checkbox\" name=\"seleccion[]\" value=\"".$row['xfid']."\">".$row['filename']."<br>";
Entonces mando esa información a otro script y lo recibo con:

Cita:
if(isset($_POST['Submit']))
{
if(isset($_POST['seleccion']))
Entonces...lo que quiero hacer con esta información es crear un enlace usando una dirección con el $row['xfid'] al final, y ponerle de nombre $row['filename'] y guardarlos todos en una variable, de manera que el contenido de la variable quedará una cosa asi:

Cita:
$variable= <br><a href="http://direccion/id1" >nombre1</a><br>
<br><a href="http://direccion/id2" >nombre2</a><br>
<br><a href="http://direccion/id3" >nombre3</a><br>
Uso esta manera porque luego querria meter el contenido de la variable en un textarea.

Lo que no se bien como hacer es meter esa información en la variable.Acceder exactamente al id, y al nombre de cada uno de los elementos del array seleccion.
Si alguien puede resolverme la duda, se lo agradeceria mucho. Saludos
  #2 (permalink)  
Antiguo 17/07/2006, 11:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En el value del "checbox" propagas el "xfid" .. pero necesitas otra variable en tu formulario para propagar otras varaibles como es tu caso .. en ese sentido serían bajo campos "hidden"

Código PHP:
echo "<input type=\"hidden\" name=\"filenames[]\" value=\"".$row['filename']."\">; 
De esa forma en tu script de proceso tendrás dos arrays .. uno con tus "ID's" y otro "paralelo" (en cuanto a indices) con los "filenames" .. Las recorres con un bucle for() usando el mismo indice en ambos arrays y listo.
Código PHP:
for ($x=0$x<=count($_POST['seleccion']); $x++){
   echo 
$_POST['seleccion'][$x]." --> ".$_POST['filenames'][$x]."<br>";

Si te fijas . .uso coun() para contar el n° de elementos de uno de los dos arrays . .en concreto el que es único (tus "xfids") y sobre todo por qué dependen de un "checkbox" donde sabemos que sólo los que seleccionas son los que pasan a tu script de proceso y no el resto (o todos con algún tipo de "flag" indicativo).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 17/07/2006, 11:39
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 11 años, 5 meses
Puntos: 0
He usado lo que me has dicho, pero no me funciona bien. REcibo los dos arrays, pero a la hora de acceder solo me hace bien los ids(guardados en el array seleccion). Los filenames me los muestra todos, los haya seleccionado o no.
ESte es código que tengo puesto:
Cita:
if(isset($_POST['Submit']))
{
if(isset($_POST['seleccion']))
{
for ($x=0; $x<=count($_POST['seleccion']); $x++){
echo $_POST['seleccion'][$x]." --> ".$_POST['filenames'][$x]."<br>";
}

}
}
Por ejemplo: si en la base de datos tengo 2 archivos cuyos ids y nombres son:
2->127.mp3
3->archivo de muestra.wmv

Al ejecutar el script, y elegir el archivo con id nº 3, el resultado del codigo anterior seria este:

3 --> 127.mp3
--> archivo_de_muestra_de_windows_movie_maker.wmv

Mezclandome un id con los nombres, y poniendome otro nombre a pesar de no tener id correspondiente. ¿que puedo hacer para solucionarlo?
  #4 (permalink)  
Antiguo 17/07/2006, 11:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Debería funcionar tal cual te lo presento. Revisa tus datos generados (en el HTML de la página generada) y recuerda que las "parejas" se arman en función de los checkbox que selecionas y se generan con mismo INDICE.

No sé donde pusistes el campo hidden que te hice mención .. pero debe quedar dentro de tu bucle while() y este a su vez entre su <form ...> </form>

(Indica el código completo que uses por si hay algún detalle).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 17/07/2006, 11:59
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 11 años, 5 meses
Puntos: 0
Este es el formulario:

Cita:
$resultado=mysql_query("SELECT * FROM 3sict_debaser_files",$link);
// Se inicial el formulario
echo "<form action='index.php?op=newarticle' method=\"post\"> \n";
?>
<TABLE BORDER=5 WIDTH=100>
<TR>
<TH align=center COLSPAN=2><h3>Elige los archivos disponibles para poder reproducirlos</h3> </TH>
</TR>

<?while ($row = mysql_fetch_array($resultado)){ ?>


<TR>
<TD><?echo "<input type=\"checkbox\" name=\"seleccion[]\" value=\"".$row['xfid']."\">".$row['filename']."<br>";?> </TD>
<TD><? echo "<input type=\"hidden\" name=\"filenames[]\" value=\"".$row['filename']."\">";?> </TD>


</TR>
<? } ?>
</TABLE>
<?
echo "<input type=\"submit\" name=\"Submit\" value=\"Enviar\">";
echo "</form>";
?>
y aqui donde lo recibo:
Cita:
if(isset($_POST['Submit']))
{
if(isset($_POST['seleccion']))
{
for ($x=0; $x<=count($_POST['seleccion']); $x++){
echo $_POST['seleccion'][$x]." --> ".$_POST['filenames'][$x]."<br>";
}

}
}
  #6 (permalink)  
Antiguo 17/07/2006, 12:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Revisa que tienen ambos arrays usando:

Código PHP:
echo "<pre>";
print_r($_POST);
echo 
"</pre>"
Deberias tener ambos arrays iguales (en indices) con los datos correspondientes ...

No sé si me abré equivocado en el "for()" .. pero los indices empiezan (cuando los usa como "[]") por 0 y cuento el total de los que tengo seleccionados y me llegaron (el resto no corresponde).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 17/07/2006, 12:15
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 11 años, 5 meses
Puntos: 0
Código PHP:
Array
(
    [
seleccion] => Array
        (
            [
0] => 2
        
)

    [
filenames] => Array
        (
            [
0] => 127.mp3
            
[1] => archivo_de_muestra_de_windows_movie_maker.wmv
        
)

    [
Submit] => Enviar

Ahi esta el problema. Que en filenames se guarda todo, porque claro, lo que selecciono es el checkbox donde esta el array seleccion(que ese si lo hace bien). ¿que hago para que solo se guarde en filenames ell nombre del archivo q selecciono?
  #8 (permalink)  
Antiguo 17/07/2006, 13:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Se "supone" que si tu seleccionas ese "checkbox" .. sólo necesitas tu "filename" asociado, el resto aunque estuviese .. lo descartas.

Cualquier otro "juego" con checbox y el campo hidden deberías controlarlo por javascript (pero es necesario? .. ahora observas un problema por el bucle for() que algo falla ..pero si te huviera ido bien a la primera ni sabrías lo más probable que el array tipo "hidden" contiene todos los elementos ... Que no es "optimo" .. no lo es al 100% .. pero lo dicho .. tendrías que manejar ese tema con javascript integramente.)

Por eso insisto que en mi ejemplo anterior "cuento" los elementos del array "seleccion" .. para no hacer más iteracciones al bucle for() en cuestión que los elementos que tenga el array "seleccion".

Restale una unidad al "count()" si es necesario .. prueba el ejemplo seleccionando más checbox ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 17/07/2006, 17:42
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 11 años, 5 meses
Puntos: 0
Disculpa pero no he entendido nada de lo que me has dicho...Ya habia visto lo de restarle uno al count para que saliera bien, pero lo de solucionarlo con javascript no se a que te refieres. Y tampoco se como puedo relacionar el nº de id con el nombre, a no ser que acceda a la BBDD para comprobarlo. Ya te digo que soy bastante novato en esto, y habra un millon de cosas que se me escapan. Si pudieras explicarme un poco mejor esto ultimo, te lo agradezco.

Mil gracias por tu tiempo y paciencia.
  #10 (permalink)  
Antiguo 18/07/2006, 07:05
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 11 años, 5 meses
Puntos: 0
Bueno, al final lo que he hecho es crear dos arrays y meter los datos que necesito de los arrays de seleccion y filename en los dos nuevos: nuevoids y nombres.

Ya tengo la información, pero necesito meterla en la variable. Habia pensado una cosa asi:
Código PHP:
for ($x=0$x<=count($_POST['seleccion'])-1$x++){ 
    
$bodytext=$bodytext."<br><a href="http://localhost/xoops2/modules/debaser/player.php?id=".nuevoids[$x]." target="_blank" >".nombres[$x]." </a><br>":
    
    

pero no funciona. ¿como puedo hacer para ir metiendo en la variable esos enlaces usando la información de los 2 arrays?
  #11 (permalink)  
Antiguo 18/07/2006, 08:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. ahora tuve oportunidad de probar el código y hacer pruebas .. llegué a esta conclusión:

Código PHP:
<?
echo "<pre>";
print_r($_POST);
echo 
"</pre>";

echo 
"Total: ".count($_POST['filenames'])."<br><br>";

for (
$x=0$x<count($_POST['filenames']); $x++){ 
  if (!empty(
$_POST['seleccion'][$x])){
     echo 
$x." ==> ".$_POST['seleccion'][$x]." --> ".$_POST['filenames'][$x]."<br>"
  }


?>
Tomo el total de elementos posibles o combinaciones que podrían resultar (no como antes que me basaba en los checkbox seleccionados). No "resto-1" sino que aplico sólo < (menor que) en el for() ...

Por otro lado .. al recorrer el array de los campos "hidden" y sabiendo que el mismo indice en el array de los "checkbox" si no está seleccionado no existe .. uso un "if()" bajo un empty() para detectar esta situación; si se produce .. no gestiono su valor (sería una "línea o checkbox que no seleccioné").

Lo he probado y aparentemente funciona como se espera.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 18/07/2006, 19:24
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 11 años, 5 meses
Puntos: 0
Si, eso ya lo habia solucionado, pero quiero hacer lo de la pregunta anterior. ¿sabes como podria hacerlo? gracias por todo
  #13 (permalink)  
Antiguo 19/07/2006, 07:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No entendí tu última pregunta ..

Si te refieres a ir generando ese HTML acomulado en una variable .. se trata de hacer lo que haces:

Código PHP:
 $bodytext=$bodytext."nuevo texto".$con_nuevas_variables
o también la forma "corta" de concatenación acomulada:

Código PHP:
$bodytext .= ."nuevo texto".$con_nuevas_variables
No sé por qué dices que no te funciona (siempre que digas eso .. es recomendable indicar que es lo que "obtienes" (para que nos hagamos una idea sobre el error) y lo que esperas ...).

La propuesta que te hice última genera y obtiene los valores de ambos array correctamente. ¿Cual es tu problema exacto?: no obtienes los valores de ambos arrays como corresponde? .. no se genera o acomula el HTML indicado? o tienes problemas con uso de comillas (dobles entre "" dobles) como así parece? (o que no llamas a las variables como corresponde con su $):

Código PHP:
$bodytext .= "<br><a href=\"http://localhost/xoops2/modules/debaser/player.php?id=".$nuevoids[$x]."\" target=\"_blank\" >".$nombres[$x]."</a><br>"
Un saludo;
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 19/07/2006, 09:46
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 11 años, 5 meses
Puntos: 0
Con esta última solución ya funciona. Se ve que no pondria bien las comillas o algo asi. Muchas gracias por todo! 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:04.