Hola.
He puesto el echo "<noscript>" por que ésta función sólo se ejecutaría si el navegador del usuario no tuviera Javascript activado, en el caso de tenerlo activado se valida con Javascript y lo hace bien, el problema es cuando lo debe validar con PHP, he cambiado cosas del código, aunque sigue dando el mismo problema e incluso probé con quitarle la función y que éso sólo se ejecutara entre las etiquetas "<noscript>", también he probado poniendo esas etiquetas en html y tampoco, aquí mi nuevo código:
Código PHP:
Ver original<?php
/*Se recogen los datos del formulario y se comprueba que no tengan espacios en blanco ni fallos de seguridad en mysql y xss*/
if(isset($_POST['envio'])){ //var_dump($validacion);
//var_dump($telefono);
//Declaramos un array que recoja los errores
$recoger_errores=array(); $validacion=true;
/*Normalmente comprobamos mediante Javascript que se han introducido los datos correctos, pero si el usuario no tiene activado Javascript, lo comprobaremos mediante PHP*/
echo "<noscript>";
//Ejecutamos la función validar con sus parámetros
validar($usuario, $contrasena, $email, $nombre, $apellidos, $direccion, $poblacion, $cp, $telefono);
echo "</noscript>";
function validar($usuario, $contrasena, $email, $nombre, $apellidos, $direccion, $poblacion, $cp, $telefono){
/*Si algún usuario está en blanco, se añade el error al array*/
if($usuario=="" || $contrasena=="" || $email=="" || $nombre=="" || $apellidos="" || $direccion=="" || $poblacion="" || $cp="" || $telefono=""){
/*echo "Debes completar todos los campos";
return false;*/
//$recoger_errores[]="Debes completar todos los campos";
array_push($recoger_errores, "Debes completar todos los campos"); $validacion=false;
}
/*Esto mide la longitud de los números*/
//$recoger_errores[]="El código postal deben ser 5 caracteres";
array_push($recoger_errores, "El código postal deben ser 5 caracteres"); $validacion=false;
}
//$recoger_errores[]="El teléfono deben ser 9 caracteres";
array_push($recoger_errores, "El teléfono deben ser 9 caracteres"); $validacion=false;
}
/*Esto se encarga de ver si se trata de un número entero*/
//$recoger_errores[]="El codigo postal debe ser un número";
array_push($recoger_errores, "El codigo postal debe ser un número"); $validacion=false;
}
if(filter_var($telefono, FILTER_VALIDATE_INT
)===false){ //$recoger_errores[]="El teléfono debe ser un número";
array_push($recoger_errores, "El teléfono debe ser un número"); $validacion=false;
}
foreach ($recoger_errores as $key => $value) {
echo $value;
}
}
//Nos conectamos a la base de datos*/
/*Comprobamos que el usuario y el email no existen ya*/
$usuario_c=mysql_query("SELECT `cliente` FROM `clientes` WHERE `cliente`='$usuario'"); if($num_usuario!=0){
/*Si el usuario ya existe, se lo decimos, resaltando el texto en rojo con la ayuda de Javascrip*/
echo "<script type='text/javascript'>
usuario();
</script>";
}
/*Con el email, lo mismo*/
$email_c=mysql_query("SELECT `email` FROM `clientes` WHERE `email`='$email'"); if($num_email!=0){
echo "<script type='text/javascript'>
email();
</script>";
}
/*Sólo si el usuario o el email no existen ya en la BBDD y los campos introducidos no son está vacíos se produce la dirección y el registro del usuario*/
if($num_usuario==0 && $num_email==0 && $usuario!=null && $contrasena!=null && $email!=null && $validacion==true){
mysql_query("INSERT INTO `clientes`(`cliente`, `contrasena`, `email`, `nombre`, `apellidos`, `direccion completa`, `provincia`, `poblacion`, `cp`, `telefono contacto`) VALUES ('$usuario','$contrasena','$email','$nombre','$apellidos','$direccion','$provincia','$poblacion','$cp','$telefono')"); /*Se introducen los datos de la sesión*/
$_SESSION['usuario']=$usuario;
$_SESSION['contrasena']=$contrasena;
/*Se pone la redirección en HTML porque con PHP, al haber ya salido por el echo en otro lugar de la página no funciona y da error*/
echo "<meta http-equiv='Refresh' content='0;url=registro2.php'>";
}
}
$validacion=true;
?>
Eso es todo es PHP, excepto el session_start() del principio, si necesitas más código de otros lenguajes me avisas.
Un saludo.