Foros del Web » Programando para Internet » PHP »

Array por POST (foreach)

Estas en el tema de Array por POST (foreach) en el foro de PHP en Foros del Web. Hola a todos/todas: En mi proyecto tengo una entrada de formualrio con un desplegable Opion de múltiple selección. Código PHP: .../... <div id="BOXForm3"><label for="visibilidad"></label><select multiple name="visibilidad" size="4"><option value=" <?php              //Creamos la sentencia SQL y la ejecutamos ...
  #1 (permalink)  
Antiguo 19/04/2011, 23:43
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Array por POST (foreach)

Hola a todos/todas:

En mi proyecto tengo una entrada de formualrio con un desplegable Opion de múltiple selección.

Código PHP:
.../...
<div id="BOXForm3"><label for="visibilidad"></label><select multiple name="visibilidad" size="4"><option value="<?php
            
//Creamos la sentencia SQL y la ejecutamos
                
$visibilidad="SELECT Visibilidad FROM visibilidad";
                
$Visible=mysql_query($visibilidad);
                        
                echo 
'<select name="Visibilidad">';

                
//Mostramos los registros en forma de menú desplegable
                
while ($row=mysql_fetch_array($Visible))
                {echo 
'<option value="".$row["Visibilidad"]>'.$row["Visibilidad"];}
                
mysql_free_result($Visible)
                
?>"></option>
                </select>
            <p>(Manten presionada la tecla CTRL para seleccionar más de una opción)</p>
             </div>
.../...
Que funciona en el formulario y realiza la selección múltiple
El probelma viene al recoger la selección por POST con foreach donde tengo el código:

Código PHP:
    foreach($_POST['visibilidad'] as $Visible => $Visible){$Visible $Visible; } 
Que me devuelve el error:

Cita:
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\login\checkReferenciasCON.php on line 40
En donde la línea 40 es la correspondiente al Foreach. Por otra parte, el POST no me recoge nada. Debido a mi ignorancia ancestral no soy capaz de dar con el fallo.

¿Alguien puede indicármelo?

Muchas gracias
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #2 (permalink)  
Antiguo 19/04/2011, 23:55
Avatar de C2am  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 2.005
Antigüedad: 15 años, 3 meses
Puntos: 306
Respuesta: Array por POST (foreach)

Me parece que:
name="Visibilidad" es distinto de $_POST['visibilidad']
Saludos
__________________
El mundo nada puede contra un hombre que canta en la miseria.
-- Ernesto Sábato--
  #3 (permalink)  
Antiguo 20/04/2011, 06:52
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Array por POST (foreach)

Gracias por la sugerencia, pero ya lo había probado y mantiene el error.

Muchas gracias de todos modos ,
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #4 (permalink)  
Antiguo 20/04/2011, 07:00
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 15 años, 11 meses
Puntos: 12
Respuesta: Array por POST (foreach)

el select name="Visibilidad[]"

entonces hay puedes hacer esto

Código PHP:
Ver original
  1. foreach($_POST['Visibilidad'] as $key => $value){
  2. echo $value;
  3. }

ve si eso te funciona.
__________________
Hosting en Chile en Silverhost - La solución en Hosting en Chile.
  #5 (permalink)  
Antiguo 22/04/2011, 10:22
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Array por POST (foreach)

Hola de nuevo:

He estado probando las amables sugerencias indicadas pero ninguna resuelve el problema. Después de quemarme las pestañas con el asunto he llegado a la siguiente deducción lógica, el array que utilizo para la selección múltiple no es válido para enviarlo por POST, por otra parte lo que quiero enviar no es el array completo sino los valores seleccionados de este array lo que me lleva a un problema subsiguiente ¿Cómo averiguo cuales son los valores que el usuario ha seleccionado? Y un poco más allá ¿Cómo los paso por POST?

¿Alguien sabe cómo hacerlo? Please, please, heeelp meeee (beatles)

Gracias por la paciencia
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #6 (permalink)  
Antiguo 22/04/2011, 10:35
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Array por POST (foreach)

y cual es problema??
ECHO '<pre>';
var_dump($_REQUEST);
ECHO '</pre>';
elegi algunas opciones y mostranos que te devuelve esto
  #7 (permalink)  
Antiguo 23/04/2011, 10:57
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Array por POST (foreach)

Hola Patriarka:

Siguiendo tus instrucciones he puesto el código en la página del formulario y sale esto:
Código PHP:
array(1) {
  [
"PHPSESSID"]=>
  
string(26"jkdifdib4hv2a64ic4crfkn712"

y poniéndolo en la pagina de destino del form sale esto:

Código PHP:
array(9) {
  [
"Cliente"]=>
  
string(4"Acme"
  
["capa"]=>
  
string(8"Software"
  
["Area"]=>
  
string(12"Fabricación"
  
["Coste"]=>
  
string(4"3453"
  
["Funcion"]=>
  
string(9"Consultor"
  
["Descripcion"]=>
  
string(5" dfgs"
  
["resultado"]=>
  
string(4"dfgd"
  
["visibilidad"]=>
  array(
2) {
    [
0]=>
    
string(0""
    
[1]=>
    
string(0""
  
}
  [
"PHPSESSID"]=>
  
string(26"jkdifdib4hv2a64ic4crfkn712"

En donde como vemos los valores correspondientes a visiblididad no vienen sin embargo aparecen las cadenas en blanco que supongo que corresponden a las posiciones de la selección realizada.
¿Te da alguna pista?
Gracias por tu caritativa ayuda, como habrás podido deducir de mi respuesta, mi necesidad es grandre
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #8 (permalink)  
Antiguo 23/04/2011, 11:32
Avatar de C2am  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 2.005
Antigüedad: 15 años, 3 meses
Puntos: 306
Respuesta: Array por POST (foreach)

Código PHP:
Ver original
  1. <div id="BOXForm3">
  2.  
  3. <label for="visibilidad"></label>   //¿que función cumple esto?  
  4.  
  5. <select multiple name="visibilidad" size="4">  ACA ABRES EL SELECT
  6. <option value="     ABRES EL OPTION VALUE PERO LUEGO ABRES OTRA VEZ EL SELECT
  7.  
  8.  
  9. <?php
  10.            
  11.  //Creamos la sentencia SQL y la ejecutamos
  12.                 $visibilidad="SELECT Visibilidad FROM visibilidad";
  13.                 $Visible=mysql_query($visibilidad);
  14.                          
  15.                 echo '<select name="Visibilidad">';   AC&#193; VUELVES A ABRIR EL SELECT
  16.  
  17.                 //Mostramos los registros en forma de menú desplegable
  18.                 while ($row=mysql_fetch_array($Visible))
  19.                 {echo '<option value="".$row["Visibilidad"]>'.$row["Visibilidad"];}
  20.                 mysql_free_result($Visible)
  21.                 ?>"></option>
  22.                 </select>
  23.             <p>(Manten presionada la tecla CTRL para seleccionar más de una opción)</p>
  24.              </div>

Te ordeno un poco el código, porque el que tienes al inicio está algo confuso:

Código PHP:
Ver original
  1. <div id="BOXForm3">
  2.  
  3.      <select multiple name="visibilidad[]" size="4">
  4.      
  5.              <?php
  6.                
  7.                         //Creamos la sentencia SQL y la ejecutamos
  8.                          $visibilidad="SELECT Visibilidad FROM visibilidad";
  9.                          $Visible=mysql_query($visibilidad);
  10.                          
  11.                        //Mostramos los registros en forma de menú desplegable
  12.                          while ($row=mysql_fetch_array($Visible))
  13.                           {
  14.                                   echo '<option value="'.$row["Visibilidad"].'">';
  15.                                   echo $row["Visibilidad"];
  16.                                   echo '</option>';
  17.                            }
  18.                          mysql_free_result($Visible)
  19.              ?>
  20.  
  21.       </select>
  22.    
  23.      <p>(Manten presionada la tecla CTRL para seleccionar más de una opción)</p>
  24.  
  25. </div>

No analice si esto soluciona el problema, me parece que lo primero es ordenar para tratar de entenderlo mejor

PD: http://www.desarrolloweb.com/articulos/1576.php seguro que algo puedes sacar de ahí.
__________________
El mundo nada puede contra un hombre que canta en la miseria.
-- Ernesto Sábato--

Última edición por C2am; 23/04/2011 a las 11:53 Razón: enlace
  #9 (permalink)  
Antiguo 23/04/2011, 13:39
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Array por POST (foreach)

HOla C2am:

Muchas gracias por tu aclaración. Ahora recoge los calores en el código de prueba indicado por Patriarka (gracias a tí tambien). Sin embargo sigue dando el Warning.
Cita:
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\login\checkReferenciasCON.php on line 46
¿Algún consejo adicional?

Agradecidísimo de nuevo
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #10 (permalink)  
Antiguo 23/04/2011, 14:08
Avatar de C2am  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 2.005
Antigüedad: 15 años, 3 meses
Puntos: 306
Respuesta: Array por POST (foreach)

¿Que campos tienes en la tabla visibilidad?
¿Como tienes estructurada tu base de datos?
__________________
El mundo nada puede contra un hombre que canta en la miseria.
-- Ernesto Sábato--
  #11 (permalink)  
Antiguo 23/04/2011, 16:42
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Array por POST (foreach)

Hola C2am:

Muchas gracias again. Te explico lo que me preguntas
Para los efectos que nos interesan funcionan tres tablas:
Visibilidad, Referencias y Visible.
Los campos de Visibilidad son:
idPrimaryVIS: int (20) PK
idREF:int (20) index
idPER: int (20) index
idEMP: int(20) index
Visbilidad: text (40)
Referencias tiene :
idPrimaryREF: int (20) PK
idPER:int (20) index
idEMP: int (20) index
idREF: int(20) index
Visibilidad: Text (40)
Visible tiene:
idPrimaryVBLEint (20) PK
idREF: int(20) index
Visible: Text (40)
La tabla Visibilidad no tiene relación con ninguna otra y solamente contiene los registros de los valores de Visibilidad que se ofrecen en el desplegable multiopcional del Formulario de entrada de referencias
La tabla de referencias está relacionada de uno a varios con la tabla Visible por el campo idPrimaryREF de la tabla Referencias con el campo idREF de la tabla Visible y el objetivo del formulario es recoger la selección de opciones de visibilidad de una referencia y fijarlas en la tabla relacionada visible.
Espero que se entienda
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #12 (permalink)  
Antiguo 23/04/2011, 23:18
Avatar de C2am  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 2.005
Antigüedad: 15 años, 3 meses
Puntos: 306
Respuesta: Array por POST (foreach)

Vuelvo a remarcarte esto:
Código PHP:
Ver original
  1. //Creamos la sentencia SQL y la ejecutamos
  2.                          $visibilidad="SELECT Visibilidad FROM visibilidad";
Solo a los efectos de saber que es este verdaderamente el código que usas, tal como lo tienes. Lo digo porque pones que la tabla se llama "Visibilidad" pero en el select tenemos "visibilidad", ten en cuenta que no es lo mismo mayúscula que minúscula.
Una vez estemos seguro de esto vemos como seguimos.
__________________
El mundo nada puede contra un hombre que canta en la miseria.
-- Ernesto Sábato--
  #13 (permalink)  
Antiguo 24/04/2011, 03:07
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Array por POST (foreach)

Hola de nuevo:

Muchas gracias de nuevo.
Como veo que induce a confusión he cambiado el nombre de la tabla "visbilidad" por "privacidad" y ahora el query queda así:
Código PHP:
$visibilidad="SELECT Visibilidad FROM privacidad"
Espero que te sirva para ayudarme
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #14 (permalink)  
Antiguo 24/04/2011, 03:22
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Array por POST (foreach)

Hola otra vez:

Después de alguna prueba adicional he conseguido recoger el valor array que aparentemente contiene los valores seleccionados sin que salga el Warning maldito.
Doy el hilo por terminado, ahora debo averiguar como grabar los valores en la BBDD. Dejo el código final por si le sirve a alguien:

Form (Gracias C2am):

Código PHP:
<div id="BOXForm3">
                <select multiple name="visibilidad[]" size="4">
                    <?php
                    
                        
//Creamos la sentencia SQL y la ejecutamos
                        
$visibilidad="SELECT Visibilidad FROM privacidad";
                        
$Visible=mysql_query($visibilidad);
                        
                        
//Mostramos los registros en forma de menú desplegable
                        
while ($row=mysql_fetch_array($Visible))
                        {
                            echo 
'<option value="'.$row["Visibilidad"].'">';
                            echo 
$row["Visibilidad"];
                            echo 
'</option>';
                        }
                        
mysql_free_result($Visible)
                    
?>
                </select>
                
            <p>(Manten presionada la tecla CTRL para seleccionar más de una opción)</p>
            </div>
La recogida de datos (Gracias Patriarka):

Código PHP:
$Visible=$_POST['visibilidad[]'];
        foreach(
$_POST['visibilidad'] as $key => $value){echo $value; } 
Muchas gracias a todos, como decia terminator "golveré" o si lo preferís en Inglés "I'rr be bach"
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)

Etiquetas: foreach, post
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 19:24.