Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: romanjr55 en 16 Marzo 2019, 01:13 am



Título: arrays con select multiple
Publicado por: romanjr55 en 16 Marzo 2019, 01:13 am
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.


Título: Re: arrays con select multiple
Publicado por: mchojrin en 24 Abril 2019, 16:47 pm
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

Código:
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:

Código:
<?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:

Código:
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:

Código:
<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:

Código:
<?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);
}