Foros del Web » Programando para Internet » PHP »

formularios raros con php

Estas en el tema de formularios raros con php en el foro de PHP en Foros del Web. Como estan, queria pedirles un favorzote, hice un formulario en php para enviar prefernecias de productos para que los guarde en mysql, si el usuario ...
  #1 (permalink)  
Antiguo 01/07/2004, 20:26
 
Fecha de Ingreso: enero-2004
Mensajes: 230
Antigüedad: 13 años, 10 meses
Puntos: 0
Sonrisa formularios raros con php

Como estan, queria pedirles un favorzote, hice un formulario en php para enviar prefernecias de productos para que los guarde en mysql, si el usuario elige una de las opciones que tengo en la base de datos se almacena con 1 y se queda con 0 aquellas que no marco, el problema que tengo es que solo me acepta la primera entrada de mi checkbox siendo que tengo 6 el codigo es el siguiente:

form2.php

<?
if ((isset ($_GET['getcode'])) && ($_GET['getcode']==$PHP_SELF)) {
highlight_file(basename($PHP_SELF));
exit();
}

if(isset($_POST['enviar']))
{
echo "Has enviado el formulario !\n";

if ($_POST['inputarea1']!="") {

dentro del input.\n";

if($link = mysql_connect ("mysql05.powweb.com", "liliazmdb", "azmusr021")){
print("Conectada");
// $SQL="INSERT INTO usuario values (0,'".$_POST['inputarea1']."' ,0) ";
$SQL="select id from usuario where Direccion='".$_POST['inputarea1']."' "; //bd serv
['inputarea1']."' "; //bd local

if($tabla=mysql_db_query("wipala",$SQL))
{
if($row=mysql_fetch_row($tabla))
{
$id=$row[0];
$SQL="Update usuario set ";

if(isset($_POST['micheckbox'][0])) $SQL.=" Artesanias=1 ";
if(isset($_POST['micheckbox'][1])) $SQL.=" ,ceramica=1 ";
if(isset($_POST['micheckbox'][2])) $SQL.=" ,cuero=1 ";
if(isset($_POST['micheckbox'][3])) $SQL.=" ,instrumentos=1 ";
if(isset($_POST['micheckbox'][4])) $SQL.=" ,joyeria=1 ";
if(isset($_POST['micheckbox'][5])) $SQL.=" ,textiles=1 ";
$SQL.=" where id=".$id;
if(mysql_db_query("wipala",$SQL))
print ("guardada aqui");
}

}
else
{ print("nada");
}
mysql_close ($link);
}
else print("No hay conexion");
}

if (isset($_POST['micheckbox']))
{
echo "<BR><br>activaste el checkbox.\n";
echo "<ul>";
foreach($_POST['micheckbox'] as $value)
{ echo "<li>elegiste el checkbox nº " . $value . "</li>\n"; }

echo "</ul>";
}
else
{ echo "<BR>No activaste el checkbox.\n"; }


getcode=$PHP_SELF&layout=no\">aqui</a></i></p>";
}
else {
echo <<<EOT
<FORM name ="form2" method="POST" action="form2.php">
Escribe en este campo input: <INPUT type="text" name="inputarea1" size="20"><BR>
click 1: <INPUT type="checkbox" name="micheckbox[]" value="1"><BR>
click 2: <INPUT type="checkbox" name="micheckbox[]" value="2"><BR>
click 3: <INPUT type="checkbox" name="micheckbox[]" value="3"><BR>

<INPUT type="submit" name="enviar" value="Click para enviar!">
</FORM>
EOT;

}

Como ven devuelve el valor del checkbox que se marco ahora el codigo del formulario es el siguiente

form_envio.php


if ((isset ($_GET['getcode'])) && ($_GET['getcode']==$PHP_SELF)) {
highlight_file(basename($PHP_SELF));
exit();
}

if(isset($_POST['enviar'])) // aqui esta el switch para usar UN SOLO archivo
// si $_POST['enviar'] existe, el formulario se
// ha enviado y podemos procesarlo. Si no,
// mostramos el formulario de entrada

{
echo "Has enviado el formulario !\n";

if ($_POST['inputarea']!="") {

echo "<BR>Escribiste <b>" .strip_tags($_POST['inputarea']) . "</b> dentro del input.\n";
echo "<BR>Escribiste <b>" .strip_tags($_POST['inputarea1']) . "</b> dentro del input.\n";
}


if (isset($_POST['micheckbox'])) {

echo "<BR><br>activaste el checkbox.\n";
echo "<ul>";
foreach($_POST['micheckbox'] as $value) {

echo "<li>elegiste el n&ordm; " . $value . "</li>\n";
}

echo "</ul>";
}

else {

echo "<BR>No elegiste nada.\n";
}

echo "Sugerencias: ";
if (isset ($_POST['mitextarea'])) {
echo "<BR>En el area de texto escribiste:<I> " . strip_tags($_POST['mitextarea']) . "</I>\n";
}
else {
echo "<BR>No has utilizado el area de texto\n";
}

}
else {
echo <<<EOT
<FORM name ="form2" method="POST" action="form2.php">
Nombre: <INPUT type="text" name="inputarea" size="20"><BR>
e-mail: <INPUT type="text" name="inputarea1" size="20"><BR>

Deseo suscribirme en:<br>
<br>

Artesanias y adornos : <INPUT type="checkbox" name="micheckbox[]" value="1"><br>
Ceramica y porcelana : <INPUT type="checkbox" name="micheckbox[]" value="2"><br>
Confecciones de cuero: <INPUT type="checkbox" name="micheckbox[]" value="3"> <br>
Instrumentos musicales:<INPUT type="checkbox" name="micheckbox[]" value="4"><br>
Joyería y orfebreria :<INPUT type="checkbox" name="micheckbox[]" value="5"> <br>
Textiles y tejidos :<INPUT type="checkbox" name="micheckbox[]" value="6">



<BR>
<TEXTAREA name="mitextarea" rows="4" cols="30"></TEXTAREA><BR>
<INPUT type="submit" name="enviar" value="Click para enviar!">
</FORM>
EOT;

}
?>
aca se eligen los valores del checkbox, pero el problema que tengo es que solo funciona para el primer checkbox(artesanias), los demas funciona solo si activo el primero, me harian un enorma favor si me ayudan, se que el código es largo pero es super urgente ya que es parte de mi tesis.

Gracias
  #2 (permalink)  
Antiguo 01/07/2004, 20:48
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
creo que podría estar por acá:
Código PHP:
if(isset($_POST['micheckbox'][0])) $SQL.=" Artesanias=1 ";
if(isset(
$_POST['micheckbox'][1])) $SQL.=" ,ceramica=1 "
if(isset(
$_POST['micheckbox'][2])) $SQL.=" ,cuero=1 "
if(isset(
$_POST['micheckbox'][3])) $SQL.=" ,instrumentos=1 ";
if(isset(
$_POST['micheckbox'][4])) $SQL.=" ,joyeria=1 ";
if(isset(
$_POST['micheckbox'][5])) $SQL.=" ,textiles=1 "
Creo que podría hacer algo como:
Código PHP:
if(isset($_POST['micheckbox'])){
   foreach(
$_POST['micheckbox'] as $valor_check){
      switch(
$valor_check){
         case 
1$SQL.=" ,ceramica=1 "; break;
         case 
2$SQL.=" ,cuero=1 "; break;
         case 
3$SQL.=" ,instrumentos=1 "; break;
         
//Y así para todos         
      
}
   }

Saludos
  #3 (permalink)  
Antiguo 02/07/2004, 12:52
 
Fecha de Ingreso: enero-2004
Mensajes: 230
Antigüedad: 13 años, 10 meses
Puntos: 0
no funciona

Hice la prueba de la correcion del codigo pero no logro almacenar nada en la base de datos. una ayudatipa mas porfa. Gracias
  #4 (permalink)  
Antiguo 02/07/2004, 14:02
Avatar de orchabel  
Fecha de Ingreso: marzo-2002
Ubicación: Hundido en un rincón...
Mensajes: 401
Antigüedad: 15 años, 9 meses
Puntos: 1
Hola...

Yo te recomendaria nombrar los checks con diferente nombre... asi ...
checkbox1
checkbox2
......
checkboxN

para que los puedas llamar así

if(isset($_POST['micheckbox0'])) $SQL.=" Artesanias=1 ";
if(isset($_POST['micheckbox1'])) $SQL.=" ,ceramica=1 ";
if(isset($_POST['micheckbox2'])) $SQL.=" ,cuero=1 ";
if(isset($_POST['micheckbox3'])) $SQL.=" ,instrumentos=1 ";
if(isset($_POST['micheckbox4'])) $SQL.=" ,joyeria=1 ";
if(isset($_POST['micheckbox5'])) $SQL.=" ,textiles=1 ";

saluditos
__________________
BugHunter II
"si quieres un mañana mejor, piensa en ser mejor para un mañana"
  #5 (permalink)  
Antiguo 02/07/2004, 15:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. que sentencia $SQL queda de aplicar tus condicionales (if(isset ....) de los checkbox?

orchabel ... da igual poner nombre a tus checkbox que tratarlos como arrays (nombre[]) .. Pero al tratarlo como arrays en teoría es más simple recoger su valor (con bucles foreach() por ejemplo y no empezar a liarse con "variables variables"). Tal vez para este caso si esos elementos (checkbox) son fijos (como parece ser ..) puedes usar nombre simple para tu checkbox y no calentarse más ..

Un saludo,
  #6 (permalink)  
Antiguo 04/07/2004, 13:35
 
Fecha de Ingreso: enero-2004
Mensajes: 230
Antigüedad: 13 años, 10 meses
Puntos: 0
ya lo resolvi

gracias jpinedo, me sirvio muchisimo el metodo del case, funciona todo sùper bien.

saludos
  #7 (permalink)  
Antiguo 04/07/2004, 21:03
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Ok.. de nada... pero debes tener en cuenta la recomendación de Cluster... normalmente uno pone los nombres de los checkBox como array cuando estos se generan dinámicamente (como dice el ejemplo de las FAQ's... tipo hotmail)... porque no sabes a priori qué representan.
Pero en tu caso, si es un formulario estático podrías utilizar nombres más representativos para cada checkbox.

Saludos
  #8 (permalink)  
Antiguo 05/07/2004, 08:51
 
Fecha de Ingreso: enero-2004
Mensajes: 230
Antigüedad: 13 años, 10 meses
Puntos: 0
gracias por la sugerencia, la tomare muy en cuenta
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 07:55.