Foros del Web » Programando para Internet » PHP »

Escribo un dato y dice que faltan todos

Estas en el tema de Escribo un dato y dice que faltan todos en el foro de PHP en Foros del Web. Hola a tod@s. He estado programando una pequeña web en php desde hace algunos días y me funcionaba todo perfectamente, así que decidí probarla en ...
  #1 (permalink)  
Antiguo 04/12/2006, 18:08
 
Fecha de Ingreso: abril-2006
Ubicación: De vuelta en Asturias
Mensajes: 209
Antigüedad: 18 años
Puntos: 1
Escribo un dato y dice que faltan todos

Hola a tod@s.
He estado programando una pequeña web en php desde hace algunos días y me funcionaba todo perfectamente, así que decidí probarla en la red.
El caso es que ahi me ha pasado algo que no entiendo por más vueltas que le he dado y esperaba si alguién podía indicarme donde está el error, pues la verdad no se mucho de php y lo más probable es que sea un fallo tonto.

El caso es que tengo un formulario con una serie de datos obligatorios. Si el usuario deja de insertar alguno, debe aparecer un mensaje diciendo cuales faltan.
El caso es que, ingreso datos sin nada escrito y funciona, ingreso el nombre y me detalla el resto de campos, inserto el apellido e igual peeeeero... en cuanto ingreso un correo electrónico me dice que faltan todos los campos sin importar que haya algo escrito o no
En local me funciona perfectamente pero en la red no

Dejo el código del formulario:

Código HTML:
<FORM METHOD="post" NAME="new_cliente" ACTION="new_client2.php">
		<TABLE ALIGN="center" WIDTH=800  CLASS="fondo">
			<TR>
				<TD COLSPAN=2 CLASS="titulo" ALIGN="right"><P>REGISTRO NUEVO CLIENTE</P></TD>
			</TR>
			<TR><TD COLSPAN=2><IMG SRC="img/1px.gif" HEIGHT=15 BORDER=0></TD></TR>
			<TR>
				<TD COLSPAN=2><P ALIGN="center"><A HREF="new_client.php" TARGET="conte" CLASS="enl">Nuevo Usuario</A> | <A HREF="recordar.php" TARGET="conte" CLASS="enl">Recordar Contraseña</A> | <A HREF="cambio.php" TARGET="conte" CLASS="enl">Cambiar Datos</A> | <A HREF="presup.php" TARGET="conte" CLASS="enl">Solicitar Presupuesto</A> | <A HREF="pedido.php" TARGET="conte" CLASS="enl">Hacer Pedido</A></P></TD>
			</TR>
			<TR><TD COLSPAN=2><IMG SRC="img/1px.gif" HEIGHT=15 BORDER=0></TD></TR>
			<TR>
				<TD ALIGN="right">Nombre<SUP>*</SUP>:</TD><TD ALIGN="left"><INPUT TYPE="text" NAME="nombre" SIZE=50 VALUE=""></TD>
			</TR>
			<TR>
				<TD ALIGN="right">Primer Apellido<SUP>*</SUP>:</TD><TD ALIGN="left"><INPUT TYPE="text" NAME="ape1" SIZE=50 VALUE=""></TD>
			</TR>
			<TR>
				<TD ALIGN="right" VALIGN="top">Segundo Apellido<SUP>*</SUP>:</TD><TD ALIGN="left"><INPUT TYPE="text" NAME="ape2" SIZE=50 VALUE=""><BR><BR></TD>
			</TR>
			<TR>
				<TD ALIGN="right">E-mail<SUP>*</SUP>:</TD><TD ALIGN="left"><INPUT TYPE="text" NAME="mail" SIZE=25 VALUE=""></TD>
			</TR>
			<TR>
				<TD ALIGN="right">Contraseña<SUP>*</SUP>:</TD><TD ALIGN="left"><INPUT TYPE="password" NAME="contra" SIZE=25 VALUE=""></TD>
			</TR>
			<TR>
				<TD ALIGN="right" VALIGN="top">Repetir contraseña<SUP>*</SUP>:</TD><TD ALIGN="left"><INPUT TYPE="password" NAME="rcontra" SIZE=25 VALUE=""><BR><BR></TD>
			</TR>
			<TR>
				<TD ALIGN="right">Dirección:</TD><TD ALIGN="left"><INPUT TYPE="text" NAME="direc" SIZE=50 VALUE=""></TD>
			</TR>
			<TR>
				<TD ALIGN="right">Ciudad:</TD><TD ALIGN="left"><INPUT TYPE="text" NAME="ciudad" SIZE=50 VALUE=""></TD>
			</TR>
			<TR>
				<TD ALIGN="right">Código Postal:</TD><TD ALIGN="left"><INPUT TYPE="text" NAME="cp" SIZE=10 VALUE=""></TD>
			</TR>
			<TR>
				<TD ALIGN="right">Provincia:</TD><TD ALIGN="left"><INPUT TYPE="text" NAME="provin" SIZE=50 VALUE=""></TD>
			</TR>
			<TR>
				<TD ALIGN="right" VALIGN="top">País<SUP>*</SUP>:</TD><TD ALIGN="left"><INPUT TYPE="text" NAME="pais" SIZE=50 VALUE=""><BR><BR></TD>
			</TR>
			<TR>
				<TD ALIGN="center" VALIGN="top" COLSPAN=2><INPUT TYPE="checkbox" NAME="normas" VALUE="si"><LABEL>He leido y acepto las <A HREF="normas.htm" TARGET="blanck">condiciones de uso</A></LABEL><BR><BR></TD>
			</TR>

			<TR>
				<TD ALIGN="right"></TD><TD ALIGN="left"><INPUT TYPE="submit" VALUE="Ingresar datos">&nbsp;<INPUT TYPE="reset" VALUE="Borrar todo"></TD>
			</TR>
			<TR>
				<TD COLSPAN=2><P>Los campos marcados con asterisco (*) son obligatorios.</P>
				<P>Si desea recibir copias impresas de sus fotografías, cd's o dvd's, la devolución de fotografías que nos haya enviado y/o justificante de pago físico, debe rellenar todos los datos correspondiente a la dirección postal o dichos envíos no podrán llevarse a cabo. Si no desea añadirlos ahora, podrá hacerlo más tarde desde la opción <I>"Cambiar datos"</I></P></TD>
			</TR>
		</TABLE>
	</FORM> 
Y del archivo que recoje los datos
Código PHP:
<?

    
// Llamamos la librería que contiene las funciones de correo electrónico
    
require('includes/libre_mail.php');

    
//recogemos todos los datos enviados por el formulario en variables
    
$contra=$_POST["contra"];
    
$rcontra=$_POST["rcontra"];
    
$nombre=$_POST["nombre"];
    
$ape1=$_POST["ape1"];
    
$ape2=$_POST["ape2"];
    
$mail=$_POST["mail"];
    
$email=strtolower($mail);
    
$direc=$_POST["direc"];
    
$ciudad=$_POST["ciudad"];
    
$cp=$_POST["cp"];
    
$provin=$_POST["provin"];
    
$pais=$_POST["pais"];
    
$normas=$_POST["normas"];
    
$fecha=date('j/n/Y');

    
$mensaje=false;
    
$mensaje2=false;
    
$contras=false;
    
$texto;

    
//hacemos un control de lo que el cliente ha ingresado. Si no ha ingresado alguno de los campos obligatorios lo indicamos con la variable $mensaje y añadimos el nombre del campo a una variable de texto
    
if ($nombre==null){ $mensaje=true$texto=$texto."Nombre<BR>";}
    if (
$ape1==null){ $mensaje=true$texto=$texto."Primer apellido<BR>";}
    if (
$ape2==null){ $mensaje=true$texto=$texto."Segundo apellido<BR>";}
//Aquí es donde supongo que debe estar el fallo pero no lo veo
    
if ($email==null){ $mensaje=true$texto=$texto."Dirección de correo electrónico<BR>";}
    if (
$contra==null){ $mensaje=true$texto=$texto."Contraseña<BR>";}
    if (
$rcontra==null){ $mensaje=true$texto=$texto."Repetición de contraseña<BR>";}
    if (
$pais==null){ $mensaje=true$texto=$texto."País<BR>";}
    if (
$normas===null){ $mensaje=true$texto=$texto."Aceptar las condiciones de uso<BR>";}

    if (
$direc==null || $ciudad==null || $cp==null || $provin==null){$mensaje2=true;} //Si falta alguno de los datos no obligatorios lo indicamos con la variable mensaje2 para recordarle más adelante que pueden serle necesarios.

    
if ($contra<>$rcontra){$contras=true;} // si la contraseña y su repetición no coinciden lo indicamos con la contraseña contras.

    
if ($mensaje){ //si la variable que indica que algun campo obligatorio no se ha introducido está en verdadero, mostramos un mensaje de error para que vuelva y los introduzca
        
echo '<P CLASS="mensaje">Para llevar a cabo el registro correctamente debe introducir los siguientes datos:<BR><BR>'.$texto.'<BR>Por favor, retroceda para solucionarlo.</P>';
    }
Este código continúa, pero siempre sale este mensaje aunque haya rellenado todo por culpa de los del correo que comento.
Seguro que hay mil fallos en cuanto a cosas que se podrían hacer mejor de otra forma, pero por ser novata no me masacren mucho :P

Muchas gracias por adelantado
  #2 (permalink)  
Antiguo 04/12/2006, 18:44
 
Fecha de Ingreso: abril-2006
Ubicación: De vuelta en Asturias
Mensajes: 209
Antigüedad: 18 años
Puntos: 1
Weno creo que he hecho avances pero no sé hacia donde :S
He cambiado
Código PHP:
if ($email==null){ $mensaje=true$texto=$texto."Dirección de correo electrónico<BR 
por

Código PHP:
if ($email===null){ $mensaje=true$texto=$texto."Dirección de correo electrónico<BR 
E inicializado la variable del mensaje: $texto="" Y el resultado es que ya detecta que se ha insertado el Correo electrónico, pero el resto de datos sigue diciendome que faltan aunque los haya ingresado, cosa que no ocurre cuando dejo el correo en blanco.
Otra cosa rara rara...
acabo de darme cuenta que esto ocurre dependiendo del correo electrónico que escriba
Si pongo una de mis direcciones pasa esto y si pongo otras no... soy a la unica que le pasan estas cosas raras??? :SSS

Última edición por atribis; 04/12/2006 a las 18:50 Razón: añadir información
  #3 (permalink)  
Antiguo 04/12/2006, 20:56
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Aprendiendo PHP

Por qué no pruebas con el siguiente código. Si bien se puede mejorar, es algo básico que hice para que veas como puedes estructurar el script.


Código PHP:
    // Llamamos la librería que contiene las funciones de correo electrónico 
    
require('includes/libre_mail.php'); 

    
//recogemos todos los datos enviados por el formulario en variables 
    
$contra=$_POST["contra"]; 
    
$rcontra=$_POST["rcontra"]; 
    
$nombre=$_POST["nombre"]; 
    
$ape1=$_POST["ape1"]; 
    
$ape2=$_POST["ape2"]; 
    
$mail=$_POST["mail"]; 
    
$email=strtolower($mail); 
    
$direc=$_POST["direc"]; 
    
$ciudad=$_POST["ciudad"]; 
    
$cp=$_POST["cp"]; 
    
$provin=$_POST["provin"]; 
    
$pais=$_POST["pais"]; 
    
$normas=$_POST["normas"]; 
    
$fecha=date('j/n/Y'); 

    
//hacemos un control de lo que el cliente ha ingresado. Si no ha ingresado alguno de los campos obligatorios lo indicamos con la variable $mensaje y añadimos el nombre del campo a una variable de texto 
    
if (!$nombre)     $mensaje[] = "Nombre";
    if (!
$ape1)     $mensaje[] = "Primer apellido";
    if (!
$ape2)     $mensaje[] = "Segundo apellido";
    if (!
$email)     $mensaje[] = "Dirección de correo electrónico";
    if (!
$contra)     $mensaje[] = "Contraseña";
    if (!
$rcontra)     $mensaje[] = "Repetición de contraseña";
    if (!
$pais)     $mensaje[] = "País";
    if (!
$normas)     $mensaje[] = "Aceptar las condiciones de uso";
    if (!
$direc || !$ciudad || !$cp || !$provin)     $mensaje[] = "Faltan datos sobre la dirección postal";
    if (
$contra != $rcontra)     $mensaje[] = "La contraseña y su verificación no coinciden";
    
    if (
$mensaje) {
    
    print 
"Para llevar a cabo el registro correctamente debe introducir los siguientes datos:<br><br>";
    
    foreach (
$mensaje as $valor)
    print 
"- $valor<br />";
    
    }
    else {
    
    
// Aquí ejecuta la sentencia SQL ya que si no hay ningún mensaje de error significa que todos los datos están completos y correctos.
    
    
    

Espero haber sido útil.
Saludos
  #4 (permalink)  
Antiguo 04/12/2006, 21:03
 
Fecha de Ingreso: diciembre-2006
Mensajes: 20
Antigüedad: 17 años, 4 meses
Puntos: 0
Hola
Intenta poner en vez de $email==null , pon $email=="" en tu if, porque me parece que al hace $email=strtolower($mail) estás creando la variable $email, o sea nunca será null.

Saludos
  #5 (permalink)  
Antiguo 05/12/2006, 10:22
 
Fecha de Ingreso: abril-2006
Ubicación: De vuelta en Asturias
Mensajes: 209
Antigüedad: 18 años
Puntos: 1
Muchísimas gracias a ambos por sus respuestas.

He probado el código que propone usermax, porque preguntando con comillas ya había probado al principio y tampoco iba.
Ahora va perfecto. Muchiiiiiisimas gracias, es que no sé ni como agradecerlo, de verdad

Eso sí... seguro que volvere a medida que siga probando
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 14:07.