arrays con select multiple

Iniciado por romanjr55, 16 Marzo 2019, 01:13 AM

0 Miembros y 1 Visitante están viendo este tema.

romanjr55

Hola especialistas, hoy traigo un tema que no he podido resolver y espero me puedan ayudar porque no encuentro en que me estoy equivocando.

Tengo una serie de n selects determinados por la variable $regcue, el formulario muestra los 7 selects y permite la seleccion de sus opciones, de esta forma:

$respb=array('Siempre','Casi siempre','Casi nunca','Nunca','');

$regcue=7; //este varia segun un select de una bd

@$p2ap1=array();
for($x1 = 0; $x1 < $regcue; $x1++)
{   
   echo '<td><select name="p2ap[$x1]" value="$p2ap[$x1]" class="form-control" >';      
   for($x1a = 0; $x1a < count($respb); $x1a++)
  {
     if($respb[$x1a] == $_POST['p2ap[$x1a]']){$selected = ' selected';}
     else{$selected = '';}           
     echo '<option value="'.$respb[$x1a].'"'.$selected.'>'.$respb[$x1a].'</option>';
  }
  echo '</select>';
  @$p2v=$p2ap[$x1];
  array_push($p2ap1,$p2v);
}

echo " <td><input type='submit' name='botonenv' value='Continuar a la parte 3'";   
if (@$_POST['botonenv']=='Continuar a la parte 3')
{
     print_r($p2ap1);
}

Al presionar el submit el problema es que no me esta tomando ningun valor y obtengo como resultado:

Array (
  • => [1] => [2] => [3] => [4] => [5] => [6] => )       

    podrian ayudarme a saber en donde me estoy equivocando?????

    por su gran ayuda como siempre, Gracias.

mchojrin

Es un poco difícil leer el código así... te recomiendo para empezar usar nombres de variables algo más descriptivos.

Copié tu código tal cual está y me da un error en la línea

if($respb[$x1a] == $_POST['p2ap[$x1a]']){$selected = ' selected';}

Nada grave, podrías ocultarlo usando @ (Aunque no te lo recomiendo).

Para hacerlo funcionar tuve que hacerle algunas modificaciones, la versión ejecutable es:

<?php

$respb
=array('Siempre','Casi siempre','Casi nunca','Nunca','');

$regcue=7//este varia segun un select de una bd

@$p2ap1=array();
?>

<form method="post">
<?php
for($x1 0$x1 $regcue$x1++)
{
   echo 
'<td><select name="p2ap[$x1]" value="$p2ap[$x1]" class="form-control" >';
   for(
$x1a 0$x1a count($respb); $x1a++)
  {
     echo 
'<option value="'.$respb[$x1a].'"'.( array_key_exists'p2ap[$x1a]'$_POST ) && $respb[$x1a] == $_POST['p2ap[$x1a]'] ? 'selected' '').'>'.$respb[$x1a].'</option>';
  }
  echo 
'</select>';
  @
$p2v=$p2ap[$x1];
  
array_push($p2ap1,$p2v);
}

echo 
" <td><input type='submit' name='botonenv' value='Continuar a la parte 3'/>";
?>

</form>
<?php
if (@$_POST['botonenv']=='Continuar a la parte 3')
{
     
print_r($p2ap1);
}


  Y ahí sí me da la salida que dices:

Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => )

El problema es que todos los select tienen el mismo nombre... si ves el código HTML generado verás esto:

<select name="p2ap[$x1]" value="$p2ap[$x1]" class="form-control" ><option value="Siempre">Siempre</option><option value="Casi siempre">Casi siempre</option><option value="Casi nunca">Casi nunca</option><option value="Nunca">Nunca</option><option value=""></option></select><td><select name="p2ap[$x1]" value="$p2ap[$x1]" class="form-control" ><option value="Siempre">Siempre</option><option value="Casi siempre">Casi siempre</option><option value="Casi nunca">Casi nunca</option><option value="Nunca">Nunca</option><option value=""></option></select><td><select name="p2ap[$x1]" value="$p2ap[$x1]" class="form-control" ><option value="Siempre">Siempre</option><option value="Casi siempre">Casi siempre</option><option value="Casi nunca">Casi nunca</option><option value="Nunca">Nunca</option><option value=""></option></select><td><select name="p2ap[$x1]" value="$p2ap[$x1]" class="form-control" ><option value="Siempre">Siempre</option><option value="Casi siempre">Casi siempre</option><option value="Casi nunca">Casi nunca</option><option value="Nunca">Nunca</option><option value=""></option></select><td><select name="p2ap[$x1]" value="$p2ap[$x1]" class="form-control" ><option value="Siempre">Siempre</option><option value="Casi siempre">Casi siempre</option><option value="Casi nunca">Casi nunca</option><option value="Nunca">Nunca</option><option value=""></option></select><td><select name="p2ap[$x1]" value="$p2ap[$x1]" class="form-control" ><option value="Siempre">Siempre</option><option value="Casi siempre">Casi siempre</option><option value="Casi nunca">Casi nunca</option><option value="Nunca">Nunca</option><option value=""></option></select><td><select name="p2ap[$x1]" value="$p2ap[$x1]" class="form-control" ><option value="Siempre">Siempre</option><option value="Casi siempre">Casi siempre</option><option value="Casi nunca">Casi nunca</option><option value="Nunca">Nunca</option><option value=""></option></select>

  Esto sucede por las comillas (simples) que usas para generar el nombre (y el value) del select.

  Me falta algo de info para darte una versión completamente funcional, pero creo que con esto tendrás una base para avanzar:

<?php

$respb
=array('Siempre','Casi siempre','Casi nunca','Nunca','');

$regcue=7//este varia segun un select de una bd

@$p2ap1=array();
?>

<form method="post">
<?php
for($x1 0$x1 $regcue$x1++)
{
   echo 
'<td><select name="p2ap['.$x1.']" value="'.$p2ap[$x1].'" class="form-control" >';
   for(
$x1a 0$x1a count($respb); $x1a++)
  {
     echo 
'<option value="'.$respb[$x1a].'"'.( array_key_exists'p2ap['.$x1.']'$_POST ) && $respb[$x1a] == $_POST['p2ap['.$x1.']'] ? 'selected' '').'>'.$respb[$x1a].'</option>';
  }
  echo 
'</select>';
  @
$p2v=$p2ap[$x1];
  
array_push($p2ap1,$p2v);
}

echo 
" <td><input type='submit' name='botonenv' value='Continuar a la parte 3'/>";
?>

</form>
<?php
if (@$_POST['botonenv']=='Continuar a la parte 3')
{
     
print_r($p2ap1);
}
Ayudo a desarrolladores PHP a acceder a puestos mejor remunerados