Foros del Web » Programando para Internet » PHP »

validar lista de formulario al enviarlo

Estas en el tema de validar lista de formulario al enviarlo en el foro de PHP en Foros del Web. Hola a todos. Estuve viendo el tema de validar listas menu de este foro. Probé con todo y algunos me funcionaron (tal cual los exponían). ...
  #1 (permalink)  
Antiguo 11/11/2006, 07:57
MBT
 
Fecha de Ingreso: octubre-2006
Mensajes: 15
Antigüedad: 17 años, 6 meses
Puntos: 0
validar lista de formulario al enviarlo

Hola a todos.
Estuve viendo el tema de validar listas menu de este foro. Probé con todo y algunos me funcionaron (tal cual los exponían).
En mi caso, la lista (de paises) está dentro de un formulario con otros campos de texto y areas de texto, a los cuales validé con el botón "enviar", en comportamientos, "validar formulario", + un archivo php de acción del formulario.
Pero a la lista no me la deja validar a través de los comportamientos del botón "enviar" y aunque en el archivo php está incluída ($listaPais=$_POST['listaPais'];),si envío el formulario sin ningún país seleccionado, lo envía igual.
Alguien me puede orientar en que me falta o donde está el error?
Gracias por todo.
Mariela
  #2 (permalink)  
Antiguo 11/11/2006, 08:30
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
¿Puedes poner el código?
  #3 (permalink)  
Antiguo 11/11/2006, 11:02
MBT
 
Fecha de Ingreso: octubre-2006
Mensajes: 15
Antigüedad: 17 años, 6 meses
Puntos: 0
Ahí va el código del formulario. Ahora (para variar) el botón "enviar" no me chequea nada, manda todo en blanco y chau, pero eso lo tengo que reveer, de todas maneras, validar la lista JAMÁS LO LOGRÉ!
Gracias David!
PD. saqué algunos paises pues no podía mandar un mensaje con tantos caracteres en el foro, no es nada personal.




<form id="form1" name="form1" method="post" action="procesador.php">
<table width="100%" height="349" border="0" align="left" cellpadding="0" cellspacing="2">
<tr>
<td width="16%" align="left" valign="middle">Apellido</td>
<td width="84%" align="left" valign="middle"><label>
<input name="Apellido" type="text" id="Apellido" />
</label></td>
</tr>
<tr>
<td align="left" valign="middle">Nombre</td>
<td align="left" valign="middle"><label>
<input name="Nombre" type="text" id="Nombre" />
</label></td>
</tr>
<tr>
<td align="left" valign="middle">Empresa</td>
<td align="left" valign="middle"><label>
<input name="Empresa" type="text" id="Empresa" />
</label></td>
</tr>
<tr>
<td align="left" valign="middle">Cargo</td>
<td align="left" valign="middle"><label>
<input name="Cargo" type="text" id="Cargo" />
</label></td>
</tr>
<tr>
<td align="left" valign="middle">Direcci&oacute;n</td>
<td align="left" valign="middle"><label>
<input name="direccion" type="text" id="direccion" />
</label></td>
</tr>
<tr>
<td align="left" valign="middle">Localidad</td>
<td align="left" valign="middle"><label>
<input name="Localidad" type="text" id="Localidad" />
</label></td>
</tr>
<tr>
<td align="left" valign="middle">Provincia</td>
<td align="left" valign="middle"><label>
<input name="Provincia" type="text" id="Provincia" />
</label></td>
</tr>
<tr>
<td align="left" valign="middle">Pais</td>
<td align="left" valign="middle"><label>
<select name="listaPais" size="1" id="listaPais">
<option value="Sel" selected="selected">Seleccione uno...</option>
<option value="Otro">Otro...</option>
<option value="--">--</option>
<option value="Afganist&aacute;n">Afganist&aacute;n</option>
<option value="Albania">Albania</option>
<option value="Alemania">Alemania</option>
<option value="Algeria">Algeria</option>
<option value="Andorra">Andorra</option>
<option value="Angola">Angola</option>
<option value="Anguilla">Anguilla</option>
<option value="Arabia Saudi">Arabia Saudi</option>
<option value="Argentina">Argentina</option>
<option value="Armenia">Armenia</option>
<option value="Australia">Australia</option>
<option value="Austria">Austria</option>
<option value="Azerbaijan">Azerbaijan</option>
<option value="Bahamas">Bahamas</option>
<option value="Bangladesh">Bangladesh</option>
<option value="Barbados">Barbados</option>
<option value="B&eacute;lgica">B&eacute;lgica</option>
<option value="Bermuda">Bermuda</option>
<option value="Bielorusia">Bielorusia</option>
<option value="Bolivia">Bolivia</option>
<option value="Bosnia-Herzegovina">Bosnia-Herzegovina</option>
<option value="Botswana">Botswana</option>
<option value="Brasil">Brasil</option>
<option value="Brunei">Brunei</option>
<option value="Bulgaria">Bulgaria</option>
<option value="Bulgaria">Bulgaria</option>
<option value="Camer&uacute;n">Camer&uacute;n</option>
<option value="Canad&aacute;">Canad&aacute;</option>
<option value="Chile">Chile</option>
<option value="China">China</option>
<option value="Chipre">Chipre</option>
<option value="Colombia">Colombia</option>
<option value="Congo">Congo</option>
<option value="Costa Rica">Costa Rica</option>
<option value="Croacia">Croacia</option>
<option value="Cuba">Cuba</option>
<option value="Dinamarca">Dinamarca</option>
<option value="Dominica">Dominica</option>
<option value="Ecuador">Ecuador</option>
<option value="Egipto">Egipto</option>
<option value="El Salvador">El Salvador</option>
<option value="Eslovaquia">Eslovaquia</option>
<option value="Eslovenia">Eslovenia</option>
<option value="Espa&ntilde;a">Espa&ntilde;a</option>
<option value="Estados Unidos">Estados Unidos</option>
<option value="Estonia">Estonia</option>
<option value="Etiop&iacute;a">Etiop&iacute;a</option>
<option value="Fiji">Fiji</option>
<option value="Filipinas">Filipinas</option>
<option value="Finlandia">Finlandia</option>
<option value="Francia">Francia</option>
<option value="Granada">Granada</option>
<option value="Grecia">Grecia</option>
<option value="Groenlandia">Groenlandia</option>
<option value="Guam">Guam</option>
<option value="Guatemala">Guatemala</option>
<option value="Guinea">Guinea</option>
<option value="Guinea Ecuatorial">Guinea Ecuatorial</option>
<option value="Guinea-Bissau">Guinea-Bissau</option>
<option value="Guyana">Guyana</option>
<option value="Haiti">Haiti</option>
<option value="Holanda">Holanda</option>
<option value="Honduras">Honduras</option>
<option value="Hong Kong">Hong Kong</option>
<option value="Hungr&iacute;a">Hungr&iacute;a</option>
<option value="India">India</option>
<option value="Indonesia">Indonesia</option>
<option value="Ir&aacute;n">Ir&aacute;n</option>
<option value="Iraq">Iraq</option>
<option value="Irlanda">Irlanda</option>
<option value="Islandia">Islandia</option>
<option value="Israel">Israel</option>
<option value="Italia">Italia</option>
<option value="Jamaica">Jamaica</option>
<option value="Jap&oacute;n">Jap&oacute;n</option>
<option value="Jordania">Jordania</option>
<option value="Kazakhstan">Kazakhstan</option>
<option value="Kenya">Kenya</option>
<option value="Korea, Rep.">Korea, Rep.</option>
<option value="Korea, Rep. Dem.">Korea, Rep. Dem.</option>
<option value="Kuwait">Kuwait</option>
<option value="Lesotho">Lesotho</option>
<option value="L&iacute;bano">L&iacute;bano</option>
<option value="Liechtenstein">Liechtenstein</option>
<option value="Lituania">Lituania</option>
<option value="Luxemburgo">Luxemburgo</option>
<option value="Madagascar">Madagascar</option>
<option value="Malasia">Malasia</option>
<option value="Malta">Malta</option>
<option value="Marruecos">Marruecos</option>
<option value="Mauritania">Mauritania</option>
<option value="Mauritius">Mauritius</option>
<option value="Mexico">Mexico</option>
<option value="Monaco">Monaco</option>
<option value="Mongolia">Mongolia</option>
<option value="Mozambique">Mozambique</option>
<option value="Nepal">Nepal</option>
<option value="Nicaragua">Nicaragua</option>
<option value="Niger">Niger</option>
</select>
</label></td>
</tr>
<tr>
<td align="left" valign="middle"><span class="textoformulario">N&ordm; Telef&oacute;nico</span></td>
<td align="left" valign="middle"><label>
<input name="Telefono" type="text" id="Telefono" />
</label></td>
</tr>
<tr>
<td align="left" valign="middle"><span class="textoformulario">Email</span></td>
<td align="left" valign="middle"><label>
<input name="Email" type="text" id="Email" />
</label></td>
</tr>
<tr>
<td align="left" valign="middle">Comentario</td>
<td align="left" valign="middle"><label>
<textarea name="Comentario" wrap="virtual" id="Comentario"></textarea>
</label></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="left" valign="middle">&nbsp;
<label>
<input name="Enviar" type="submit" value="Enviar" onclick=MM_validateForm('Apellido','','R','Nombre' ,'','R','Empresa','','R','Cargo','','R','Localidad ','','R','Provincia','','R','Telefono','','RisNum' ,'Email','','RisEmail','Comentario','','R') document.MM_returnValue"/>
</label></td>
</tr>
</table>
</form>
  #4 (permalink)  
Antiguo 11/11/2006, 11:11
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Cuando hablas de validar... ¿te refieres a esto?

Código:
onclick=MM_validateForm('Apellido','','R','Nombre' ,'','R','Empresa','','R','Cargo','','R','Localidad ','','R','Provincia','','R','Telefono','','RisNum' ,'Email','','RisEmail','Comentario','','R') document.MM_returnValue"
Porque esa validación pertenece a JavaScript, no a PHP
  #5 (permalink)  
Antiguo 11/11/2006, 11:51
MBT
 
Fecha de Ingreso: octubre-2006
Mensajes: 15
Antigüedad: 17 años, 6 meses
Puntos: 0
si, me refiero a eso. Pero además, en php también tengo un archivo aplicado al formulario. Realmente no se si es necesario ambas cosas (validar con java+php), supongo que si, pues en el curso inicial que tomé, así me lo explicaron.
Te anexo el codigo php.

<?php
$apellido=$_POST['apellido'];
$nombre=$_POST['nombre'];
$empresa=$_POST['empresa'];
$cargo=$_POST['cargo'];
$direccion=$_POST['direccion'];
$localidad=$_POST['localidad'];
$provincia=$_POST['provincia'];
$listaPais=$_POST['listaPais'];
$telefono=$_POST['telefono'];
$email=$_POST['email'];
$comentario=$_POST['comentario'];
mail("[email protected]",
"consulta",
"Nombre:$nombre
\nApellido:$apellido
\nEmpresa:$empresa
\nCargo:$cargo
\nDireccion:$direccion
\nLocalidad:$localidad
\nProvincia:$provincia
\nListaPais:$listaPais
\nTelefono:$telefono
\nE-mail:$email
\nMensaje:$mensaje",
"From: $email");
header("Location: gracias.html");
?>
  #6 (permalink)  
Antiguo 11/11/2006, 12:01
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
No. No es necesario, pero sí puede ser de utilidad para que el cliente no tenga que esperar a enviarse el formulario para saber si lo ha rellenado correctamente.

Pero JavaScript no es para NADA seguro, y es la única comprobación que haces por ahora.

Deberías añadir estas líneas:

Código PHP:
foreach ($_POST as $valor) {
     if (empty(
$valor)) {
          exit (
"Has dejado campos por rellenar");
     }

Código PHP:
<?php
$apellido
=$_POST['apellido'];
$nombre=$_POST['nombre'];
$empresa=$_POST['empresa'];
$cargo=$_POST['cargo'];
$direccion=$_POST['direccion'];
$localidad=$_POST['localidad'];
$provincia=$_POST['provincia'];
$listaPais=$_POST['listaPais'];
$telefono=$_POST['telefono'];
$email=$_POST['email'];
$comentario=$_POST['comentario'];

foreach (
$_POST as $valor) {
     if (empty(
$valor)) {
          exit (
"Has dejado campos por rellenar");
     }
}


mail("[email protected]",
"consulta",
"Nombre:$nombre
\nApellido:$apellido
\nEmpresa:$empresa
\nCargo:$cargo
\nDireccion:$direccion
\nLocalidad:$localidad
\nProvincia:$provincia
\nListaPais:$listaPais
\nTelefono:$telefono
\nE-mail:$email
\nMensaje:$mensaje"
,
"From: $email");
header("Location: gracias.html");
?>
  #7 (permalink)  
Antiguo 11/11/2006, 12:09
MBT
 
Fecha de Ingreso: octubre-2006
Mensajes: 15
Antigüedad: 17 años, 6 meses
Puntos: 0
El tema del php anduvo bien para los campos de texto, pero la lista la dejé tal cual, sin seleccionar nada y lo envió igual.
Buaaaaaaa! tengo ganas de llorar!!!!!!!!
  #8 (permalink)  
Antiguo 11/11/2006, 12:21
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Eso quiere decir que "ListaPais" tiene un valor al enviarse. ¿Qué valor es?
  #9 (permalink)  
Antiguo 11/11/2006, 12:26
MBT
 
Fecha de Ingreso: octubre-2006
Mensajes: 15
Antigüedad: 17 años, 6 meses
Puntos: 0
me envía "sel" (de "seleccione uno") que es x default. Supongo que tengo que dejarlo sin ningún valor preestablecido, lo dejo en blanco y que el cliente coloque entonces el país que corresponde. Es decir. Cuando se abre el formulario, en la lista no debe haber nada seleccionado por default, es así?
  #10 (permalink)  
Antiguo 11/11/2006, 12:28
Avatar de Mulato  
Fecha de Ingreso: diciembre-2001
Ubicación: Caracas
Mensajes: 158
Antigüedad: 22 años, 4 meses
Puntos: 0
Al realizar el $_POST de la ListaPais, el primer value deberia ser 0 por defecto donde 0 = Seleccione, Ahora tendria que realizar algo como

if ($_POST['listaPais'] !== 0) {
realizas la rutina
}

En particular yo ejecuto todo en un include y el include lo llamo desde el mismo formulario (Recarga), así se me hace mas facil controlar los errores..

Suerte...
__________________
Necesito aprender para compartir mi saber...
  #11 (permalink)  
Antiguo 11/11/2006, 12:44
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Cita:
Iniciado por MBT Ver Mensaje
me envía "sel" (de "seleccione uno") que es x default. Supongo que tengo que dejarlo sin ningún valor preestablecido, lo dejo en blanco y que el cliente coloque entonces el país que corresponde. Es decir. Cuando se abre el formulario, en la lista no debe haber nada seleccionado por default, es así?
Exactamente lo que esperaba.

Aquí tienes el código:

Código PHP:
<?php
//Cogemos los datos del formulario
$apellido=$_POST['apellido'];
$nombre=$_POST['nombre'];
$empresa=$_POST['empresa'];
$cargo=$_POST['cargo'];
$direccion=$_POST['direccion'];
$localidad=$_POST['localidad'];
$provincia=$_POST['provincia'];
$listaPais=$_POST['listaPais'];
$telefono=$_POST['telefono'];
$email=$_POST['email'];
$comentario=$_POST['comentario'];

//Comprobamos que todos y cada uno de los datos NO esten vacios
foreach ($_POST as $valor) {
     if (empty(
$valor)) {
          exit (
"Has dejado campos por rellenar");
     }
}

//Comprobamos que ListaPais sea un pais de la lista.
if ($listaPais=="sel" || $listaPais=="--") {
   exit (
"Debes seleccionar un país de la lista");
}

//Enviamos el e-mail
mail("[email protected]",
"consulta",
"Nombre:$nombre
\nApellido:$apellido
\nEmpresa:$empresa
\nCargo:$cargo
\nDireccion:$direccion
\nLocalidad:$localidad
\nProvincia:$provincia
\nListaPais:$listaPais
\nTelefono:$telefono
\nE-mail:$email
\nMensaje:$mensaje"
,
"From: $email");

//Redireccionamos
header("Location: gracias.html");
?>
También he evitado que puedan poner esa especie de separador "--" que tienes en la lista.
  #12 (permalink)  
Antiguo 11/11/2006, 12:49
MBT
 
Fecha de Ingreso: octubre-2006
Mensajes: 15
Antigüedad: 17 años, 6 meses
Puntos: 0
Bueno, bueno, les cuento que me funcionó el tema del post para la lista! hasta que no seleccioné un país no me dejó enviar el formulario! hurra! ahora debo ver como hacer para que el teléfono y el mail sean números y dirección de mail, correspondientemente, y no cualquier cosa. Allí voy a investigar. Les agradezco enormemente a todos.
Mulato, te cuento que lo de include y recarga... es como si me hablaras en otro idioma... perdón, mi nivel es más que elemental, mi curso fue de armado de paginas y no vimos nada de php, será en un futuro, pero mientras tanto voy "estudiando" con este foro, les agradezco en el alma a todos. Cualquier cosa los sigo consultando.
Gracias mil.
  #13 (permalink)  
Antiguo 11/11/2006, 12:55
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Bueno, si te he ayudado a acabar tu código, puedo seguir ayudándote.

Código PHP:
<?php
//Cogemos los datos del formulario
$apellido=$_POST['apellido'];
$nombre=$_POST['nombre'];
$empresa=$_POST['empresa'];
$cargo=$_POST['cargo'];
$direccion=$_POST['direccion'];
$localidad=$_POST['localidad'];
$provincia=$_POST['provincia'];
$listaPais=$_POST['listaPais'];
$telefono=$_POST['telefono'];
$email=$_POST['email'];
$comentario=$_POST['comentario'];

//Comprobamos que todos y cada uno de los datos NO esten vacios
foreach ($_POST as $valor) {
     if (empty(
$valor)) {
          exit (
"Has dejado campos por rellenar");
     }
}

//Comprobamos que ListaPais sea un pais de la lista.
if ($listaPais=="sel" || $listaPais=="--") {
   exit (
"Debes seleccionar un país de la lista");
}

//Comprobamos que el telefono sea un numero
if (!is_numeric($telefono)) {
   exit (
"El teléfono debe ser un número");
}

//Comprobamos que la direccion email sea valida
if (!ereg("^([a-zA-Z0-9\._]+)\@([a-zA-Z0-9\.-]+)\.([a-zA-Z]{2,4})",$email)){
exit (
"El e-mail no es valido");
}

//Enviamos el e-mail
mail("[email protected]",
"consulta",
"Nombre:$nombre
\nApellido:$apellido
\nEmpresa:$empresa
\nCargo:$cargo
\nDireccion:$direccion
\nLocalidad:$localidad
\nProvincia:$provincia
\nListaPais:$listaPais
\nTelefono:$telefono
\nE-mail:$email
\nMensaje:$mensaje"
,
"From: $email");

//Redireccionamos
header("Location: gracias.html");
?>
  #14 (permalink)  
Antiguo 11/11/2006, 13:18
MBT
 
Fecha de Ingreso: octubre-2006
Mensajes: 15
Antigüedad: 17 años, 6 meses
Puntos: 0
buenísimo! sos un maestro! te agradezco tanto!
Prometo analizarlas y entenderlas para seguir aprendiendo!
  #15 (permalink)  
Antiguo 11/11/2006, 13:31
MBT
 
Fecha de Ingreso: octubre-2006
Mensajes: 15
Antigüedad: 17 años, 6 meses
Puntos: 0
David, sabes que? en teléfono, le pongo uno, dos, diez o los números que sean pero no me lo permite, me sigue diciendo que "el teléfono debe ser un número"...
  #16 (permalink)  
Antiguo 11/11/2006, 13:49
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Cita:
Iniciado por MBT Ver Mensaje
David, sabes que? en teléfono, le pongo uno, dos, diez o los números que sean pero no me lo permite, me sigue diciendo que "el teléfono debe ser un número"...
Pues no lo entiendo...

is_numeric() comprueba que un string sea numérico (que sea un número)

! delante hace que que sea lo contrario.

if (!is_numeric($variable)) sería traducido como "Si no es numérico..."

Por lo tanto si escribes letras o caracteres de algun tipo debería darte ese error, no siendo así si escribes un número. Quizá hayas puesto algún paréntesis o guión.
  #17 (permalink)  
Antiguo 11/11/2006, 16:44
MBT
 
Fecha de Ingreso: octubre-2006
Mensajes: 15
Antigüedad: 17 años, 6 meses
Puntos: 0
lamentablemente, copié el código tal cual, lo repasé, lo miré y no le veo nada raro, luego quité la parte del código del teléfono y me hacía el mismo error con el mail, me pedía constantemente una casilla de mail. De manera que también lo quité y ambas acciones las validé con javascript, a través del botón enviar, comportamientos, validar formulario. Ahora funcionan y si no coloco un país de mi lista, me lo pide, gracias al php. Todo ok.
El problema que tengo ahora es que se envía el formulario pero a la casilla solo llegan los datos de la lista (o sea el país) y la dirección, los demás campos llegan en blanco.??????
Pregunto, me dedico a otra cosa? No puedo creer que para que un formulario me funcione esté un día entero (y gracias a Uds, sino, sería 1 mes!!!!!!?
  #18 (permalink)  
Antiguo 11/11/2006, 16:50
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Si los demás campos llegan vacíos es porque el "name" en el formulario HTML no es el mismo que luego usas para $_POST['name'] ....

Por ejemplo en el formulario pones Empresa y al recoger el dato pones $_POST['empresa']. Las variables son sensibles a las mayúsculas. Rectifica eso.

En cuanto a lo último, tranquilo. Cuando se sabe, se sabe, y cuando no... se aprende
  #19 (permalink)  
Antiguo 12/11/2006, 10:18
MBT
 
Fecha de Ingreso: octubre-2006
Mensajes: 15
Antigüedad: 17 años, 6 meses
Puntos: 0
Como agradecerte David?!?!??!
Funciona todo a la perfección, además, nuevamente intenté validar teléfono e email con php y funcionó, me temo que anteriormente no funcionaba, por el mismo tema de las mayúsculas en las variables.
Te agradezco muchísimo. Sigo adelante con la página (por ahora en construcción) y te linkeo cuando esté lista para que la veas.
Muchas gracias y ahora estoy mas tranquila gracias a tus apoyo.
Hasta la próxima.
Mariela
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 11:17.