Comunidad de diseño web y desarrollo en internet online

cómo Validar campos de form php ???

Citar            
MensajeEscrito el 01 Jun 2009 02:39 pm
Hola gente, soy novato y éste es el primer formulario con php que utilizo, claro, sin entender nada, pero no quiero que me gane, jeje !!

El formulario funciona bien, pero quisiera poder validarlo para obligar al usuario a completar los campos.
Desde Dreamweaver no puedo hacerlos, me dice que: "Solo puede validarse campos *con nombre* y me pide que mediante el inspector de propiedades les ponga un nombre"

Agradecería si me dan una mano, ya que he leído información pero no la entiendo, alguien me podría explicar desde el llano, como para que lo entienda un diseñador novato, gracias.

Formulario

Código :

<form action="formulario.php" method="post" >
<!--  RECIENTE LLAMADO A PHP -->
<table width="250" class="Formulario_contacto">
  <tr>
    <td width="150">Nombre y Apellido</td>
    <td width="387"><label>
      <input name="Nombre y Apellido" type="text" id="Nombre y Apellido" size="50" maxlength="50" />
    </label></td>
  </tr>
  <tr>
    <td width="150">Email</td>
    <td><label>
      <input name="Email" type="text" id="Email" size="50" maxlength="50" />
    </label></td>
  </tr>
  <tr>
    <td width="150">Teléfono</td>
    <td><label>
      <input name="Telefono" type="text" id="Telefono" size="50" maxlength="50" />
    </label></td>
  </tr>
  <tr>
    <td width="150">Consulta</td>
    <td><label>
    <textarea name="Consulta" cols="38" rows="4" id="Consulta"></textarea>
    </label></td>
  </tr>
  <tr>
    <td width="150"></td>
    <td><table width="150">
      <tr>
        <td><label>
      <input name="Envio" type="submit" id="Envio" value="Enviar" />
    </label></td>
        <td><label>
          <input name="Restablece" type="reset" id="Restablece" value="Borrar" />
        </label></td>
      </tr>
    </table></td>
  </tr>
</table>
</form>



Éste es el php

Código :

< ?php

$nombre = $_POST['nombre'];
$mail = $_POST['mail'];
$telefono = $_POST['telefono'];

$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . ", numero de telefono " . $telefono . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[email protected]';
$asunto = 'Contacto desde Pagina Web';

mail($para, $asunto, utf8_decode($mensaje), $header);

echo '&estatus=ok&';
?> 

Por El Ruso Loco

85 de clabLevel



Genero:Masculino  

Avellaneda. Bs As.

chrome
Citar            
MensajeEscrito el 01 Jun 2009 02:53 pm
En tu archivo PHP, luego de que recuperas los datos $_POST de tu formulario y los asignas en una variable, haces la comprobacion:

Código :

$nombre = $_POST['nombre'];
$mail = $_POST['mail'];
$telefono = $_POST['telefono'];

if (!$nombre || !$mail || !$telefono) { echo 'Complete los campos requeridos'; }
else {
  echo 'Continuar...';
}


:)

Por Necrophasto

Claber

148 de clabLevel



Genero:Masculino  

Diseñador gráfico y web

firefox
Citar            
MensajeEscrito el 01 Jun 2009 02:59 pm
Consulta, la comprobación sería: ???????

if (!$nombre || !$mail || !$telefono) { echo 'Complete los campos requeridos'; }
else {
echo 'Continuar...';
}

Por El Ruso Loco

85 de clabLevel



Genero:Masculino  

Avellaneda. Bs As.

chrome
Citar            
MensajeEscrito el 01 Jun 2009 03:01 pm
Si... si te fijas bien... el IF dice que "si $nombre o $mail o $telefono son cadenas vacias" devolvera un echo... sino... continuara con la ejecucion de tus datos...

Por Necrophasto

Claber

148 de clabLevel



Genero:Masculino  

Diseñador gráfico y web

firefox
Citar            
MensajeEscrito el 01 Jun 2009 03:10 pm
GRACIAS CHÉ, LO VOY A PROBAR !!
MUY AMABLE

Por El Ruso Loco

85 de clabLevel



Genero:Masculino  

Avellaneda. Bs As.

chrome
Citar            
MensajeEscrito el 01 Jun 2009 06:51 pm
Disculpas si es muy básica la pregunta, cómo fijo las propiedades ???
Por ejemplo

if (!$nombre || !$mail || !$telefono) { echo 'Complete los campos requeridos'; }


nombre = solo letras
email = dirección de correo
telefono = solo numeros
y consulta = solo letras


???????????
Alguien me puede ayudar y me dice cómo y dónde debo escribir ???
Gracias

Por El Ruso Loco

85 de clabLevel



Genero:Masculino  

Avellaneda. Bs As.

chrome
Citar            
MensajeEscrito el 01 Jun 2009 07:15 pm
Aahahaha ok... ahora entendi...

Se puede utilizar ese tipo de validaciones con PHP, pero tendrias que trabajar con expresiones regulares.

Te recomiendo que busques jQuery + jquery validate... que valida el formulario al vuelo.

Muy bueno, liviano y reciclable.

Lo unico que haces es descargarte la ultima version de jQuery y lo especificas en el header

Luego descargas jQuery validate y tambien lo especificas en el header

Chequealo y me decis si necesitas ayuda con este script! Potente! Un caño!

Por Necrophasto

Claber

148 de clabLevel



Genero:Masculino  

Diseñador gráfico y web

firefox
Citar            
MensajeEscrito el 01 Jun 2009 07:38 pm
Mirá armé ésto pero completo un solo campo, el del nombre, y envía igual al mail
Ya me quemé leyendo y no entiendo

Código :

<?php

$nombre = $_POST['nombre'];
$mail = $_POST['mail'];
$telefono = $_POST['telefono'];

$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . ", numero de telefono " . $telefono . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[email protected]';
$asunto = 'Contacto desde Pagina Web';

mail($para, $asunto, utf8_decode($mensaje), $header);

if ($nombre == "" or $mail == "" or $telefono == "" or $mensaje == "") {
echo("Ha habido un error durante el envío, por favor, verifique que ha rellenado todos los campos.");
}else{
   echo 'Su mensaje ha sido enviado';
}

?> 



Qué se yo, la verdad que como diseñador te quedás afuera de muchas cosas de programación, muy feo ché !!!
Algún salvavidas ????? :shock:

Por El Ruso Loco

85 de clabLevel



Genero:Masculino  

Avellaneda. Bs As.

chrome
Citar            
MensajeEscrito el 01 Jun 2009 07:47 pm
Igual a esta altura del día, me vendría bién aunque sea uno general en el que obligue a llenar todos los campos, aunque no discrimine letras de numeros, ni del @ en el campo del mail

Por El Ruso Loco

85 de clabLevel



Genero:Masculino  

Avellaneda. Bs As.

chrome
Citar            
MensajeEscrito el 01 Jun 2009 07:50 pm
Jajaja dale... mira... seria asi

Código :

<?php

$nombre = $_POST['nombre'];
$mail = $_POST['mail'];
$telefono = $_POST['telefono'];

if ($nombre == "" or $mail == "" or $telefono == "" or $mensaje == "") {
$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . ", numero de telefono " . $telefono . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[email protected]';
$asunto = 'Contacto desde Pagina Web';

mail($para, $asunto, utf8_decode($mensaje), $header);
}else{
   echo 'Su mensaje ha sido enviado';
}

?> 


O sea... primero recuperas la info de los datos, dsp corroboras los datos y por ultimo haces el envio...

Por Necrophasto

Claber

148 de clabLevel



Genero:Masculino  

Diseñador gráfico y web

firefox
Citar            
MensajeEscrito el 01 Jun 2009 08:02 pm
Por que soy medio bol*do! jajajaaj

Puse que si no completas ningun campo, que envie el email! xD al reves... estoy a mil..

bueno... seria asi... pero al reves...

Código :

<?php

$nombre = $_POST['nombre'];
$mail = $_POST['mail'];
$telefono = $_POST['telefono'];

if ($nombre == "" or $mail == "" or $telefono == "" or $mensaje == "") {
  echo 'Complete el formulario';
}
else{
   $header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . ", numero de telefono " . $telefono . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[email protected]';
$asunto = 'Contacto desde Pagina Web';

mail($para, $asunto, utf8_decode($mensaje), $header);
}

?> 

Por Necrophasto

Claber

148 de clabLevel



Genero:Masculino  

Diseñador gráfico y web

firefox
Citar            
MensajeEscrito el 01 Jun 2009 08:03 pm
No funca, sin completar los datos envía el mail
esto en rojo, está bién?????


<?php

$nombre = $_POST['nombre'];
$mail = $_POST['mail'];
$telefono = $_POST['telefono'];

if ($nombre == "" or $mail == "" or $telefono == "" or $mensaje == "") {
$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . ", numero de telefono " . $telefono . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[email protected]';
$asunto = 'Contacto desde Pagina Web';

mail($para, $asunto, utf8_decode($mensaje), $header);
}else{
echo 'Su mensaje ha sido enviado';
}

?>

Por El Ruso Loco

85 de clabLevel



Genero:Masculino  

Avellaneda. Bs As.

chrome
Citar            
MensajeEscrito el 01 Jun 2009 08:04 pm
jajaja !!!!
Que paciencia tenés loco, grosso !!!

Por El Ruso Loco

85 de clabLevel



Genero:Masculino  

Avellaneda. Bs As.

chrome
Citar            
MensajeEscrito el 01 Jun 2009 08:10 pm
Bueno, probé lo último que me pasaste y nada, gracias igual !!!
no aparece el mensaje de completar el formulario, y con solo campo completo la envía igual
BAJONNNNNNNN!!!!!!!!!!!!!!!!!!!!!!!!!

Por El Ruso Loco

85 de clabLevel



Genero:Masculino  

Avellaneda. Bs As.

chrome
Citar            
MensajeEscrito el 02 Jun 2009 12:59 pm
Disculpa loco! Es que andaba a mil ayer asi que no me daba cuenta de giladas...

Código :

if ($nombre == "" or $mail == "" or $telefono == "" or $mensaje == "") {


Ese if con los OR esta diciendo que: Si (el nombre es vacio O SI el email es vacio O SI el telefono es vacio O SI el mensaje es vacio...

Lo que nosotros necesitamos es que diga: Si (el nombre es vacio Y SI el email es vacio Y SI el telefono es vacio Y SI el mensaje es vacio...

Esto en codigo seria:

Código :

if ($nombre == "" AND $mail == "" AND $telefono == "" AND $mensaje == "") {


El codigo final seria:

Código :

<?php
# Guardo en la variable los campos del form
$nombre = $_POST['nombre'];
$mail = $_POST['mail'];
$telefono = $_POST['telefono'];
# Verifico que los campos se hallan completado
if ($nombre == "" AND $mail == "" AND $telefono == "" AND $mensaje == "") {
  # Muestro mensaje de error
  echo 'Complete el formulario';
}
# Caso contrario, procedo a enviar el email
else{
  $header = 'From: ' . $mail . " \r\n";
  $header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
  $header .= "Mime-Version: 1.0 \r\n";
  $header .= "Content-Type: text/plain";

  $mensaje = "Este mensaje fue enviado por " . $nombre . ", numero de telefono " . $telefono . " \r\n";
  $mensaje .= "Su e-mail es: " . $mail . " \r\n";
  $mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n";
  $mensaje .= "Enviado el " . date('d/m/Y', time());

  $para = '[email protected]';
  $asunto = 'Contacto desde Pagina Web';

  if (mail($para, $asunto, utf8_decode($mensaje), $header)) {
    echo 'El mensaje fue enviado!';
  }
  else {
    echo 'Error inesperado. El mensaje no se envio.';
  }
}
?> 

Por Necrophasto

Claber

148 de clabLevel



Genero:Masculino  

Diseñador gráfico y web

firefox
Citar            
MensajeEscrito el 27 Nov 2009 04:43 pm
El formulario me funciona la perfeccion, pero en mi caso yo mando un insert de una fecha obtenida por la funcion DATE.
Por default le pongo al usuario le fecha de hoy... pero ellos pueden registrar fechas pasadas. Mi pregunta es:

¿Como valido que la fecha que pongan sea valida?... es decir que no metan un mes 13 , o un dia 35 ETC....


Código PHP :


<p><span class="Estilo24">FECHA INICIO </span><span class="Estilo4">aaaa/mm/dd</span><span class="Estilo5"> 
    ........
    </span>
    <INPUT NAME=fecha TYPE=text class="Estilo7" value="<?php $fi = date("Y/m/d");  echo $fi?>">
  </p>





De ante mano gracias por la ayuda

Por dbspace

18 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 27 Nov 2009 05:42 pm
En ese caso,dbspace, sería mejor que utilices campos de seleccion (<select>) en tu formulario...

Código HTML :

Año:
<select value="fecha_ano">
<?php foreach (range((date('Y')-5), (date('Y')+5)) as $year) { ?>
<option value="<?php echo $year; ?>"><?php echo $year; ?></option>
<?php } ?>
</select>

Mes:
<select name="fecha_mes">
<?php foreach (1, 12 as $month) { ?>
<option value="<?php echo $month; ?>"><?php echo $month; ?></option>
<?php } ?>


Día:
<select nam="fecha_dia">
<?php foreach (1, 31 as $day) { ?>
<option value="<?php echo $day?>"><?php echo $day; ?></option>
<?php } ?>
</select>


Entonces luego desde PHP, recuperas sus valores y creas el formato para MySql:

Código PHP :

<?php

$fecha_ano = $_POST['fecha_ano'];
$fecha_mes = $_POST['fecha_mes'];
$fecha_dia = $_POST['fecha_dia'];
$fecha = "{$fecha_ano}-{$fecha_mes}-{$fecha_dia}";

?>

Por Necrophasto

Claber

148 de clabLevel



Genero:Masculino  

Diseñador gráfico y web

firefox
Citar            
MensajeEscrito el 27 Nov 2009 09:27 pm
Muchas Gracias Necrophasto....

Me enseñaste el camino. :lol:

Por dbspace

18 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 28 Nov 2009 01:18 am
Ahora puedes ir con dios, hijo mío (?) xD

Exitos con tu web/aplicación!!

Por Necrophasto

Claber

148 de clabLevel



Genero:Masculino  

Diseñador gráfico y web

msie8
Citar            
MensajeEscrito el 27 Nov 2012 04:33 am
Hola, yo tengo un problema similar, adapte mi codigo a este ejemplo, aunque ya me pasaba lo mismo con mi codigo. el tema es que aunque ponga solo un campo me envia el formulario.
Les dejo el cogido del php para ver que ocurre. Por favor ayuda!!!

Código PHP :

<?php

$nombre = $_POST['nombre'];
$apellido =$_POST['apellido'];
$direccion = $_POST['direccion'];
$ciudad = $_POST['ciudad'];
$pais = $_POST['pais'];
$telefono = $_POST['telefono'];
$email = $_POST['email'];
$roomtype = $_POST['roomtype'];
$checkin = $_POST['checkin'];
$checkout = $_POST['checkout'];
$adultos = $_POST['adultos'];
$ninos = $_POST['ninos'];
$note = $_POST['note'];

if ($nombre == "" AND $apellido == "" AND $email == "" AND $roomtype == "" AND $checkin == "" AND $checkout == ""){
   header("Location: reservationerror.html");
   echo 'Por favor complete el formulario';
}

else{
  $header = 'From: ' . $mail . " \r\n";
  $header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
  $header .= "Mime-Version: 1.0 \r\n";
  $header .= "Content-Type: text/plain";

  $mensaje .= "Este mensaje fue enviado por: " . $nombre . " \r\n";
  $mensaje .= "Apellido: " . $apellido . " \r\n";
  $mensaje .= "e-mail: " . $mail . " \r\n";
  $mensaje .= "Dirección: " . $_POST['direccion'] . " \r\n";
  $mensaje .= "Ciudad: " . $_POST['ciudad'] . " \r\n";
  $mensaje .= "Pais: " . $_POST['pais'] . " \r\n";
  $mensaje .= "Teléfono: " . $_POST['telefono'] . " \r\n";
  $mensaje .= "Tipo de Habitación: " . $_POST['roomtype'] . " \r\n";
  $mensaje .= "Entrada: " . $_POST['checkin'] . " \r\n";
  $mensaje .= "Salida: " . $_POST['checkout'] . " \r\n";
  $mensaje .= "Adultos: " . $_POST['adultos'] . " \r\n";
  $mensaje .= "Niños: " . $_POST['ninos'] . " \r\n";
  $mensaje .= "Observaciones: " . $_POST['note'] . " \r\n";
  $mensaje .= "Enviado el " . date('d/m/Y', time());

  $para = '[email protected]';
  $asunto = 'Reserva desde Pagina Web';

if (mail($para, $asunto ,utf8_decode($mensaje) ,$header )) {

header("Location: reservationsuccess.html");
echo 'Gracias, su mensaje se envio correctamente.';
}else{
header("Location: reservationerror.html");
echo 'Error: Su información no pudo ser enviada, intentelo más tarde';
}
}
?> 


Le agregue las header("Location: reservationsuccess.html"); Esta me la muestra cuando envía.
la otra se supone que la muestra si hay un problema en el servidor y si no se han llenado los campos requeridos. Pero de eso nada, con un solo campo, ya me envia el correo electronico.

Alguna idea?

Muchas gracias

Por pxtx

14 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Nov 2012 12:25 pm
Problema de lógica elemental.

En el if en cuestión estás preguntando si TODAS esas variables están vacías. Pero tú lo que quieres es controlar que AL MENOS UNA esté vacía para redireccionar al visitante.

Cambia los AND por OR.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 Nov 2012 12:28 pm

DriverOp escribió:

Problema de lógica elemental.

En el if en cuestión estás preguntando si TODAS esas variables están vacías. Pero tú lo que quieres es controlar que AL MENOS UNA esté vacía para redireccionar al visitante.

Cambia los AND por OR.


En realidad lo que quiero es que ninguna de esas esté vacia, por eso le puse AND, tambien he probado con & y con && pero me las envia como si tuviesen or o ||

Por pxtx

14 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Nov 2012 12:45 pm
Parece que no entiendes el funcionamiento de las condiciones Y o O (AND o OR).

La tabla de verdad de AND es:
V y V = V
V y F = F
F y V = F
F y F = F
Donde V es verdadero y F es falso. Como verás, de la única forma que AND sea verdadero es que ambas condiciones lo sean.
En el if del código tienes 6 condiciones AND, todas deben ser verdaderas para que ocurra la redirección, esto significa que basta que al menos una de las variables no esté vacía para que el if no se cumpla.
La tabla de verdad de OR es:
V o V = V
V o F = V
F o V = V
F o F = F
Es decir basta que una condición sea verdadera para que el OR lo sea. Que es exactamente lo que estás buscando. Estás buscando que al menos una de las variables esté vacía para que el formulario no se envíe.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 Nov 2012 01:00 pm
Lo he probado como dices, y funciona! entre tanto leer me habre quedado con AND en vez de OR, muchas gracias, me has sacado de un apuro. :lol:

Por pxtx

14 de clabLevel



Genero:Masculino  

firefox

 

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