Foros del Web » Programando para Internet » PHP »

Inconveniente con Foreach

Estas en el tema de Inconveniente con Foreach en el foro de PHP en Foros del Web. Buenas, Tengo un problema con el tema del foreach, pues necesito pasar y subir a la base de datos más de un array. Me explico. ...
  #1 (permalink)  
Antiguo 13/04/2009, 09:53
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Inconveniente con Foreach

Buenas,

Tengo un problema con el tema del foreach, pues necesito pasar y subir a la base de datos más de un array.

Me explico.
Actualmente, muestro una lista de servidores que se seleccionan con checkbox. Entonces, al seleleccionar uno o varios, estos, se suben a una tabla de la BD especificamente diseñada para eso.

Todo bien, el uso del foreach lo utilizo antes de el INSERT y me funciona perfectamente.

El problema es que ahora he hecho que al seleccionar un checkbox, se muestre un input, si seleccionamos dos checkbox, dos inputs y asi sucesivamente.

Entonces quiero que si seleccionamos dos checkbox, o sea, elegimos dos servidores, aparezcan dos input text pàra escribir unos enlaces.

Todo sale perfecto con el código actual que tengo. El problema surje a la hora de subirlo a la tabla y es que me sube los servidores seleccionados, pero no me sube los enlaces o lo que escriba en los input.

Y todo eso, es porque seguro hago mal el foreach.

Este es el codigo actual:
Código Listamos:
Ver original
  1. <style>
  2. .hideable { position: relative; visibility: visible; }
  3. </style>
  4.     <script type="text/javascript">
  5. <!--
  6. function showMe (it, box) {
  7. var vis = (box.checked) ? "block" : "none";
  8. document.getElementById(it).style.display = vis;
  9. }
  10. //-->
  11. </script>
  12. <tr>
  13. <td>Servidor:</td>
  14.  <td>
  15.  
  16.        <?php
  17.  
  18.                         $sql = "SELECT * FROM servidores ORDER BY id";
  19.                         $res = do_sql ($sql);
  20.  
  21.                         $i=0;
  22.                         while ($row = mysql_fetch_array($res)) {
  23.                         $i++;
  24.                         $ide = $row['nom_serv'];
  25.             $imagenserv = $row['imagen_serv'];
  26.                 ?>
  27.  
  28. <input type="checkbox" name="id_servidor[]" onclick="showMe('div1<?php echo $i ?>', this)" value="<?php echo $row['id_servidor']?>"><?php echo $ide; ?><br />
  29.  
  30. <div id="div1<?php echo $i ?>" style="display:none">
  31. <SPAN ID="contenido" CLASS="hideable">
  32. Enlace:<INPUT TYPE='text' NAME='enlace[]' SIZE=15 MAXLENGTH=100>
  33. </FORM>
  34. </SPAN>
  35. </div>
  36.                 <?php
  37.                         }
  38.                 ?>
  39.    
  40.  </td>
  41. </tr>

Como hemos observado, listamos los servidores que tengo, la funcion esa del enlace...

Y aqui tenemos el código para insertar:
Código Segundo paso:
Ver original
  1. $id_servidor=$_POST['id_servidor'];
  2. $enlace=$_POST['enlace'];
  3. foreach ($id_servidor as $ide) {
  4. foreach ($enlace as $ide) {
  5.  
  6. $connection=mysql_connect("localhost","root","pass")
  7. or die("Error conectando a la base de datos");
  8. $db=mysql_select_db("deffer",$connection)
  9. or die ("Error seleccionando la base de datos");
  10. $query="INSERT INTO servidores1 (id_servidor,nombre_servidor,img_servidor,enlace,id_p) values ('$ide','$nombre_s','$imagen','$enlace','$id_p')";
  11. $result=mysql_query($query) or die (mysql_error());
  12. }
  13. }

La id del servidor, nombre del servidor... todo eso me lo inserta correctamente, pero en el tema del input enlace no :S

Seguro que el problema esta en el foreach, que no se hace de esa manera si quiero caputrar dos arrays, ¿verdad?

¿Como lo puedo hacer?

Muchas gracias,
  #2 (permalink)  
Antiguo 13/04/2009, 11:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Inconveniente con Foreach

primero, evita hacer un ciclo dentro del primer ciclo... no es necesario !

segundo, ya tienes un índice con foreach() el cual puedes usar para los enlaces

Código PHP:
foreach ($_POST['checkboxes'] as $key => $val)
{
  echo 
"{$_POST['checkboxes'][$key]} : {$_POST['inputs'][$key]}<br />";


suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 13/04/2009, 11:49
Avatar de duskrow  
Fecha de Ingreso: abril-2008
Mensajes: 267
Antigüedad: 16 años
Puntos: 8
Respuesta: Inconveniente con Foreach

exactamente asi es :) auink tambien si kiers ver todo los datos para usa print_r() ese solo imprimira
  #4 (permalink)  
Antiguo 16/04/2009, 08:26
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: Inconveniente con Foreach

Buenas de nuevo, gracias por contestar.

He hecho lo que se me ha dicho pero no logro hacer que funcione del todo.
Viendo que no me funciona, he evitado hacer el insert a la BD, para asi ahorrare el tyrabajo de estar borrando cada dos por tres...

Bueno, comento. Resulta que ahora si selecciono el primer checkbox (servidor) se me abre un input, lo relleno, luego selecciono el segundo servidor, se me abre otro input, lo vuelvo a rellenar y le doy a enviar y luego en la pagina que se muestran los datos, me aparecen correctamente.
Ejemplo, una imagen:



El problema esta en que si hago todo eso, como he dicho arriba, pero en vez de seleccionar el segundo, seleciono el tercero. O sea, selecciono el primero y el tercero, a la hora de mostrar los datos, los datos del tercero no me los muesta.

Me muestra los del pimero, la id del servidor y el enlace que he escrito en el input y del tercero solo me muestra la id del servidor, pero el enlace, lo que he escrito en el input no se me muestra
Ejemplo, otra imagen:


Que pasa, porque cuando selcciono el pimero y segundo se me muestra todo correctamente, en cambio si selcciono el primero y tercero o el tercero nada más, este ultimo a la hora de mostrar no se me muestra.

Mirar, aqui esta el codigo:

Formulario:
Código 1:
Ver original
  1. <STYLE>
  2. .hideable { position: relative; visibility: visible; }
  3. </STYLE>
  4. <script type="text/javascript">
  5. <!--
  6. function showMe (it, box) {
  7. var vis = (box.checked) ? "block" : "none";
  8. document.getElementById(it).style.display = vis;
  9. }
  10. //-->
  11. </script>
  12. </head>
  13. <body>
  14. <TABLE>
  15. <TR>
  16. <TD VALIGN="top">
  17. <form name='formulario' method='post' action='2.php'>
  18. <?php
  19.        
  20.  
  21.                         $sql = "SELECT * FROM servidores ORDER BY id";
  22.                         $res = do_sql ($sql);
  23.                         $i=0;
  24.                
  25.                         while ($row = mysql_fetch_array($res)) {
  26.                         $i++;
  27.                         $ide = $row['nom_serv'];
  28.             $imagenserv = $row['imagen_serv'];
  29.                 ?>
  30.  
  31. <input type="checkbox" name="id_servidor[]"  onclick="showMe('div1<?php echo $i ?>', this)" value="<?php echo $row['id_servidor']?>"><?php echo $ide; ?><br />
  32.  
  33.  
  34.              
  35. </td><td>
  36. <div id="div1<?php echo $i ?>" style="display:none">
  37. <SPAN ID="contenido" CLASS="hideable">
  38. Enlace:<INPUT TYPE="text" NAME="enlace[]" SIZE="15" MAXLENGTH="100">
  39. </td>
  40. </SPAN>
  41. </div>
  42. </TD>
  43. </TR>
  44. </TABLE>
  45.   <?php
  46.                         }
  47.                 ?>
  48. <input type='submit' name='Submit' value='Enviar'>
  49. </FORM>

Caprutamos los datos:
Código 2:
Ver original
  1. <p>DATOS INTRODUCIDOS</p>
  2. <?php
  3.  
  4.  
  5.  
  6. $id_servidor=$_POST['id_servidor'];
  7. $enlaces=$_POST['enlace'];                                      
  8. foreach ($id_servidor as $indice => $valor) {
  9. echo "{$id_servidor[$indice]} : {$enlaces[$indice]}<br />";
  10.  
  11. }
  12. ?>


Saludos y muchas gracias de nuevo,
  #5 (permalink)  
Antiguo 16/04/2009, 09:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Inconveniente con Foreach

el problema... viene de que no asignas un ID que relacione uno-con-el-otro

al dejar los corchetes abiertos, se relacionan mal.... a veces, cuando no se selecciona regularmente algo....

simplemente asigna el ID real a cada checkbox/input

Código PHP:
<input name="nombre[<?php echo $row->id?>]"> ... <input name="enlace[<?php echo $row->id?>]"/>
así, ya los tienes asociados a ambos.... suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 18/04/2009, 08:08
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: Inconveniente con Foreach

Ya esta, funcionado!

Gracias,

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 18:01.