Comunidad de diseño web y desarrollo en internet online

Problema para recuperar variables opcionales

Citar            
MensajeEscrito el 10 Ago 2008 03:59 am
Qué tal:

Estoy recogiendo de un formulario algunas variables, lo hago por medio de un ciclo FOREACH. Dentro del formulario hay algunas variables que se llenan de manera opcional. A la hora de recoger las variables y validar cuales están llenas y cuales no, tengo problemas en validar las que están vacías.

Aquí el ejemplo del formulario:

Código :

<form action="ingresa_reg.php" method="post" enctype="application/x-www-form-urlencoded" name="formulario">
<input name="nombre_union" type="text" value="nombre_union" />
<input name="nombre_participante" type="text" value="nombre_participante" />
<input name="nombre_participante1" type="text" value="" />
<input name="nombre_participante2" type="text" value="" />
<input name="nombre_participante3" type="text" value="" />
<input name="nombre_participante4" type="text" value="" />
<input name="puesto" type="text" value="puesto" />
<input name="puesto1" type="text" value="puesto1" />
<input name="puesto2" type="text" value="puesto2" />
<input name="puesto3" type="text" value="puesto3" />
<input name="puesto4" type="text" value="puesto4" />
<input name="nombre_acompanante" type="text" value="nombre_acompanante" />
<input name="nombre_acompanante1" type="text" value="nombre_acompanante1" />
<input name="nombre_acompanante2" type="text" value="nombre_acompanante2" />
<input name="nombre_acompanante3" type="text" value="nombre_acompanante3" />
<input name="nombre_acompanante4" type="text" value="nombre_acompanante4" />
<input name="importe_deposito" type="text" value="importe_deposito" />
<input name="fecha_ficha_deposito" type="text" value="fecha_ficha_deposito" />
<input name="hora_ficha_deposito" type="text" value="hora_ficha_deposito" />
<input name="importe_transferencia" type="text" value="importe_transferencia" />
<input name="fecha_transferencia" type="text" value="fecha_transferencia" />
<input name="cuenta_origen" type="text" value="cuenta_origen" />
<input name="referencia_numerica" type="text" value="referencia_numerica" />
<input name="folio_interbancario" type="text" value="folio_interbancario" />
<input name="folio_internet" type="text" value="folio_internet" />
<input name="calle" type="text" value="calle" />
<input name="numero_interior" type="text" value="numero_interior" />
<input name="colonia" type="text" value="colonia" />
<input name="ciudad" type="text" value="ciudad" />
<input name="estado" type="text" value="estado" />
<input name="codigo_postal" type="text" value="codigo_postal" />
<input name="telefono" type="text" value="telefono" />
<input name="fax" type="text" value="fax" />
<input name="email" type="text" value="email" />
<input name="email_union" type="text" value="email_union" />
<input name="rfc_union" type="text" value="rfc_union" />
<input name="enviar" type="submit" value="enviar" />
</form>


Aquí el script que uso:

Código :

foreach($_POST as $nombre_campo => $valor){
    if ($valor != "") {
        $asignacion = "\$" . $nombre_campo . "='" . $valor . "';";
    } else {
        $asignacion = "\$" . $nombre_campo . "='';";
    }
    eval($asignacion);
} 
$querys = "INSERT INTO registros 
        (nombre_union, nombre_participante, puesto, nombre_acompanante, importe_deposito, fecha_ficha_deposito, hora_ficha_deposito, importe_transferencia, fecha_transferencia, cuenta_origen, referencia_numerica, folio_interbancario, folio_internet, calle, numero_interior, colonia, ciudad, estado, codigo_postal, telefono, fax, email, email_union, rfc_union)
        VALUES ('$nombre_union', '$nombre_participante', '$puesto', '$nombre_acompanante', '$importe_deposito', '$fecha_ficha_deposito', '$hora_ficha_deposito', '$importe_transferencia', '$fecha_transferencia', '$cuenta_origen', '$referencia_numerica', '$folio_interbancario', '$folio_internet', '$calle', '$numero_interior', '$colonia', '$ciudad', '$estado', '$codigo_postal', '$telefono', '$fax', '$email', '$email_union', '$rfc_union')";

for($i=1; $i<5; $i++){
    echo "<br>$i.-\n";
    echo $nombre_participante.$i."\n";
    if(!empty($nombre_participante[$i])) {
        $querys .= ", ('$nombre_union', '$nombre_participante{$i}', '$puesto{$i}', '$nombre_acompanante{$i}', '$importe_deposito', '$fecha_ficha_deposito', '$hora_ficha_deposito', '$importe_transferencia', '$fecha_transferencia', '$cuenta_origen', '$referencia_numerica', '$folio_interbancario', '$folio_internet', '$calle', '$numero_interior', '$colonia', '$ciudad', '$estado', '$codigo_postal', '$telefono', '$fax', '$email', '$email_union', '$rfc_union')";
    } else {
        $querys .= "";
    }
} 

Como notaras, los campos que son opcionales son los de nombre_participante1, 2, 3, 4. Entonces, si se recibe el formulario con el campo nombre_participante lleno, sólo me creará una fila en mysql, pero si meten datos en los campos opcionales, debería de validar cuántos de esos campos se llenaron y entonces insertar las filas correspondientes.

El problema con este código me parece que es en el ciclo FOR y la validación, para ver si los campos opcionales están llenos. Ya que al ejecutarlo veo que aunque no ingrese datos, aun así me crea las filas.

No sé si estoy concatenando mal la variable autoincrementable $i a la varible del campo. Aquí: for($i=1; $i<5; $i++){ if(!empty($nombre_participante[$i])) {

Ya probé poner $varibale+$i / $variable{$i} / $variable[$i] pero nada.

Gracias de antemano.
Saludos.

Por yconoclasta

12 de clabLevel



Genero:Masculino  

diseñador aventurero soñador

firefox
Citar            
MensajeEscrito el 10 Ago 2008 08:27 pm
me da pereza leer tanto código.
Prueva a RESUMIRLO.

Se me ocurre...
¿probaste la función "isset", para ver si una variable ha sido definida?

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 10 Ago 2008 09:17 pm
opino lo mismo de riz si necesitas algo resume ese cod y dinos bien donde esta tu problema a dinos cuales son los campos opcionales

Por talcual

686 de clabLevel



 

Colombia

msie7
Citar            
MensajeEscrito el 11 Ago 2008 01:43 am
Si tienen razón, cantinfle.

Replanteo la pregunta.
¿Cómo puedo validar si un campo de nombre "campo1", "campo2", "campo3"... está lleno, y ejecutar unas sentencias que correspondan para ese campo?

Ejemplo, si "campo1" está lleno, inserta una linea en DB para ese campo, si "campo2" está lleno, escribe otra linea, y así sucesivamente.

El problema que tengo es que aunque los campos vengan vacíos, aun así me inserta las lineas.

ISSET no sirve en este caso, porque el campo como variable se declara, pero viene vacío.

Saludos.
Aquí el código resumido:

Código :

$querys = "INSERT INTO registros 
        (nombre_participante)
        VALUES ('$nombre_participante')";

for($i=1; $i<5; $i++){
    if(!empty($nombre_participante[$i])) {
        $querys .= ", ('$nombre_participante{$i}',)";
    } else {
        $querys .= "";
    }
} 

Por yconoclasta

12 de clabLevel



Genero:Masculino  

diseñador aventurero soñador

firefox
Citar            
MensajeEscrito el 11 Ago 2008 02:50 am
prueba con esta funcion

switch(id de la opcion ){

// de la web

case 'opcion1':
Codigo de la opcion 1
break;

//por default

default:
contenido por default
break;

}

es un poco mas facil con esto

Por talcual

686 de clabLevel



 

Colombia

msie7
Citar            
MensajeEscrito el 11 Ago 2008 03:30 pm

Código :

    if( !empty( trim($nombre_participante[$i]) ) ) {
 


Aunque no se como declaras. Lo ideal y elegante para declarar un elemento vacio es usar null.

$nombre_participante[0] = null;

Despues, si quieres revisar si sigue vacio, o ya tiene valor haces esto:

Código :

if( $nombre_participante[0] != null )
{
echo "si tiene datos";
}
else
{
echo "sigue vacio";
}

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 20 Ago 2008 05:18 pm
Gracias por todas sus respuestas.

Al final lo solucioné así:

Código :

      if(!empty($nombre_participante1)) {
         $querys .= ", ('$nombre_union', '$nombre_participante1', '$puesto1', '$nombre_acompanante1', '$importe_deposito', '$fecha_ficha_deposito', '$hora_ficha_deposito', '$importe_transferencia', '$fecha_transferencia', '$cuenta_origen', '$referencia_numerica', '$folio_interbancario', '$folio_internet', '$calle', '$numero_interior', '$colonia', '$ciudad', '$estado', '$codigo_postal', '$telefono', '$fax', '$email', '$email_union', '$rfc_union')";
      } if(!empty($nombre_participante2)) {
         $querys .= ", ('$nombre_union', '$nombre_participante2', '$puesto2', '$nombre_acompanante2', '$importe_deposito', '$fecha_ficha_deposito', '$hora_ficha_deposito', '$importe_transferencia', '$fecha_transferencia', '$cuenta_origen', '$referencia_numerica', '$folio_interbancario', '$folio_internet', '$calle', '$numero_interior', '$colonia', '$ciudad', '$estado', '$codigo_postal', '$telefono', '$fax', '$email', '$email_union', '$rfc_union')";
      } if(!empty($nombre_participante3)) {
         $querys .= ", ('$nombre_union', '$nombre_participante3', '$puesto3', '$nombre_acompanante3', '$importe_deposito', '$fecha_ficha_deposito', '$hora_ficha_deposito', '$importe_transferencia', '$fecha_transferencia', '$cuenta_origen', '$referencia_numerica', '$folio_interbancario', '$folio_internet', '$calle', '$numero_interior', '$colonia', '$ciudad', '$estado', '$codigo_postal', '$telefono', '$fax', '$email', '$email_union', '$rfc_union')";
      } if(!empty($nombre_participante4)) {
         $querys .= ", ('$nombre_union', '$nombre_participante4', '$puesto4', '$nombre_acompanante4', '$importe_deposito', '$fecha_ficha_deposito', '$hora_ficha_deposito', '$importe_transferencia', '$fecha_transferencia', '$cuenta_origen', '$referencia_numerica', '$folio_interbancario', '$folio_internet', '$calle', '$numero_interior', '$colonia', '$ciudad', '$estado', '$codigo_postal', '$telefono', '$fax', '$email', '$email_union', '$rfc_union')";
      }   


Sé que esa no es la forma más elegante de hacerlo, pero nunca pude-supe poner la validación dentro de un ciclo FOR, para ahorrarme la cantidad exagerada de código repetitivo.

Si alguien sabe cómo hacerlo, le agradecería mucho un ejemplo, me ayudará a hacer código más limpio y sencillo en el futuro.

Saludos.

Por yconoclasta

12 de clabLevel



Genero:Masculino  

diseñador aventurero soñador

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.