Foros del Web » Programando para Internet » PHP »

HTML Form, Menu Desplegable, Switch, Rand, Shuffle

Estas en el tema de HTML Form, Menu Desplegable, Switch, Rand, Shuffle en el foro de PHP en Foros del Web. Hola, soy nuevo en esto de PHP, estuve buscando en las FAQs para newbies pero no encontre nada que me ayude a resolver mi problema. ...
  #1 (permalink)  
Antiguo 01/02/2006, 15:34
 
Fecha de Ingreso: febrero-2006
Ubicación: Buenos Aires
Mensajes: 54
Antigüedad: 11 años, 10 meses
Puntos: 0
HTML Form, Menu Desplegable, Switch, Rand, Shuffle

Hola, soy nuevo en esto de PHP, estuve buscando en las FAQs para newbies pero no encontre nada que me ayude a resolver mi problema.

Este es el formulario HTML:
Código HTML:
<form action="arrayrandom.php" method="post" enctype="text/plain">

<select name="forma" id="forma">
<option SELECTED>Elegí una opción</option>
<option value="curvas">Curvas</option>
<option value="rectas">Rectas</option>
<option value="lineas">Objetos lineales</option>
<option value="cuerpos">Objetos corporeos</option>
</select>

<select name="material" id="material">
<option SELECTED>Elegí una opción</option>
<option value="madera">Madera</option>
<option value="plastico">Plástico</option>
<option value="tela">Textiles</option>
<option value="metal">Metales</option>
</select>

<button name="enviar" type="submit">Generar!</button>
</form> 
este es el archivo arrayrandom.php:
Código PHP:
<?php

$forma 
= switch ($_POST["forma"]) {
  case 
"curvas" $curvas_rnd;
            break;
  case 
"rectas" $rectas_rnd;
            break;
  case 
"lineas" $lineas_rnd;
            break;
    case 
"cuerpos" $cuerpos_rnd;
            break;
  default : 
"";
} ;

$material = switch ($_POST["materiales"]) {
  case 
"madera" $madera_rnd;
            break;
  case 
"plastico" $plastico_rnd;
            break;
  case 
"tela" $textil_rnd;
            break;
  case 
"metal" $metal_rnd;
            break;
  default : 
"";
} ;


// tablas randomizadas
$madera_rnd = array(frio,blando,hostil,oscuro,artificial,flexible,hueco,humedo,translucido);
srand (time());
shuffle ($madera_rnd);

$curvas_rnd = array(a,b,c,d,e,f);
srand (time());
shuffle ($curvas_rnd);

// resultado a mostrar 
echo $forma
echo $material
?>
NOTA:
  • El array randomizado funciona correctamente, ya fue aislado y probado, el problema tiene que estar en los switchs

¿por qué no funciona?

Última edición por epoj; 02/02/2006 a las 00:30
  #2 (permalink)  
Antiguo 01/02/2006, 17:19
 
Fecha de Ingreso: diciembre-2005
Mensajes: 122
Antigüedad: 12 años
Puntos: 0
Código:
$forma = switch ($_POST["forma"]) { 
  case "curvas" : $curvas_rnd; 
            break; 
  case "rectas" : $rectas_rnd; 
            break; 
  case "lineas" : $lineas_rnd; 
            break; 
    case "cuerpos" : $cuerpos_rnd; 
            break; 
  default : ""; 
} ;
de donde saca la gente la idea de que switch es una función?! switch es una estructura de control!! tu ya tienes el valor que quieres en $_POST['forma'], asignarlo a $forma es suficiente.
  #3 (permalink)  
Antiguo 01/02/2006, 20:38
Avatar de dopon  
Fecha de Ingreso: julio-2005
Ubicación: Cucuta / Colombia
Mensajes: 493
Antigüedad: 12 años, 5 meses
Puntos: 1
exacto no le veo sentido a los switch y mucho menos igualar a iun swith una variable que no posee valor, es decir no estas haciendo absolutamente nada, no se pero tanto codigo ahi extraño me impide imaginarme que hace ese script
  #4 (permalink)  
Antiguo 02/02/2006, 00:25
 
Fecha de Ingreso: febrero-2006
Ubicación: Buenos Aires
Mensajes: 54
Antigüedad: 11 años, 10 meses
Puntos: 0
Bueno.. es que en realidad yo creo que necesito el switch.. por el siguiente motivo: a cada opcion del menu desplegable, le corresponde un Array randomizado diferente.. es decir, que si en el formulario HTML elijo "curvas" en el menu desplegable, el archivo PHP debe seleccionar el array randomizado llamado $curvas_rnd y si en el formulario HTML elijo "rectas" el archivo PHP debe sacar el valor random del array $rectas_rnd ...
Para esto no es necesario el switch?
  #5 (permalink)  
Antiguo 02/02/2006, 04:52
Avatar de JorgitoAlfajor  
Fecha de Ingreso: enero-2006
Mensajes: 152
Antigüedad: 11 años, 11 meses
Puntos: 1
Como dijo plus_ultra, el switch no es una función, no devuelve un valor. Pero lo que vos querés hacer si se puede utilizando un switch, mas o menos de esta manera:
Código PHP:
$madera_rnd = array(frio,blando,hostil,oscuro,artificial,flexible,hueco,humedo,translucido); 
srand (time()); 
shuffle ($madera_rnd); 

$curvas_rnd = array(a,b,c,d,e,f); 
srand (time()); 
shuffle ($curvas_rnd);

//También tendrías que definir los demás arreglos: $rectas_rnd, $lineas_rnd, etc. 

switch ($_POST["forma"]) { 
  case 
"curvas" :$forma $curvas_rnd
            break; 
  case 
"rectas"  :$forma $rectas_rnd
            break; 
  case 
"lineas" $forma $lineas_rnd
            break; 
    case 
"cuerpos" :$forma $cuerpos_rnd
            break; 
}  

switch (
$_POST["materiales"]) { 
  case 
"madera" $material $madera_rnd
            break; 
  case 
"plastico" $material $plastico_rnd
            break; 
  case 
"tela" $material $textil_rnd
            break; 
  case 
"metal" $material $metal_rnd
            break;
}

print_r($forma);
print_r($material); 
Fijate que tenés que definir las tablas randomizadas antes del switch y también te indique que tenés que definir los demás arreglos, porque sólo definís $madera_rnd y $curvas_rnd. También, si quieres ver el contenido de los arreglos en pantalla, utilizar echo no te serviria, debes utilizar print_r. Espero que te sirva. Saludos.
__________________
¿Se me entiende la letra?
  #6 (permalink)  
Antiguo 02/02/2006, 09:24
 
Fecha de Ingreso: febrero-2006
Ubicación: Buenos Aires
Mensajes: 54
Antigüedad: 11 años, 10 meses
Puntos: 0
bueno, muchas gracias, ahora me doy cuenta por donde venían los errores.. cuando lo haga funcionar posteo el resultado.
  #7 (permalink)  
Antiguo 02/02/2006, 11:59
 
Fecha de Ingreso: febrero-2006
Ubicación: Buenos Aires
Mensajes: 54
Antigüedad: 11 años, 10 meses
Puntos: 0
No se vincula el Switch con el Formulario HTML

He estado probando un buen rato, y el resultado es este: el PHP funciona unicamente cuando a Switch le doy los valores "default"
Al llamarlo desde el formulario HTML, por más que elija otras opciones, me trae siempre el resultado Default, me imagino que esto es porque no esta vinculando bien la información que el formulario postea

Los Arrays fueron probados y funcionan perfectamente, también fueron agregados todos los arrays que faltaban!

Mi preguntas son:
  1. de que forma pasa los datos el menu desplegable?
  2. es correcto manejar esto con un Switch?
  3. es relevante el tipo de comillas utilizadas?
  4. la forma correcta de postear en el Switch es esta?:
    Código PHP:
    <?php
    switch ($_POST["nombredelmenudesplegable"])
     case 
    "valor1menudesplegable" $variable_para_este_caso;  
                break;  
      case 
    "valor2menudesplegable" $variable_para_este_caso;  
                break;  
      default :
    $variable_default;
    ?>

supongo que si las cosas funcionan por separado, el error debe estar en la vinculación de los dos archivos...
  #8 (permalink)  
Antiguo 02/02/2006, 12:21
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
El select pasa el valor del atributo value del tag <option> si es que este está indicado, como es tu caso, ejemplo: <option value="curvas">Curvas</option>, la variable $_POST["forma"] contiene entonces el valor "curvas", sin las comillas. Si no indicas nada en value, asi: <option>Curvas</option> , la variable $_POST["forma"] contiene entonces el valor "Curvas", sin las comillas.
Como ves ambos valores son distintos, por tanto al evaluar la condición con switch() deberías escribir en el case lo que colocas en value, y si no usas value lo que se ve en el select (menu desplegable).
  #9 (permalink)  
Antiguo 02/02/2006, 23:51
 
Fecha de Ingreso: febrero-2006
Ubicación: Buenos Aires
Mensajes: 54
Antigüedad: 11 años, 10 meses
Puntos: 0
bueno, amigos, voy a cerrar este post porque resolvi el problema, antes los actualizo de que era lo que estaba haciendo mal. eran dos cosas:
  1. Estaba utilizando un Array para el Switch, segun lo que leí en php.net, esto no es válido, sin embargo después de cambiar esto, el resultado seguía igual: solo tiraba los valores por default del switch..
  2. Al seguir explorando por la web y ver manejos de formularios y pasos de variables, me di cuenta que, como el mejor zoquete, estaba utilizando: $_POST["valor_del_formulario_HTML"], en vez del correcto: $HTTP_POST_VARS['valor_del_formulario_HTML'].
Con eso mi archivito empezo a funcionar a la perfección y esta listo para salir a la cancha
Gracias a Todos los que se preocuparon en mi problema y me fueron guiando, ya que estaba super perdido al principio.. no sabía para donde disparar...
y bueh.. espero que le sirva a alguien
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 15:07.