Gracias Serverdns. Miraré cómo reemplazarlo. Lo intenté cambiando el comando sin más pero no funcionaba. Tendré que estudiar su sintaxis mejor. Tomo nota para actualizarlo, gracias!
Vamos a aplicar un método sencillo al formulario para mejorar su seguridad. Con él, nos aseguraremos de que los datos enviados a la tabla provienen tan solo del formulario y no de cualquier otro lugar.
Como sabréis, en el formulario podemos colocar campos ocultos a los que nosotros mismos le damos el valor que queramos. Ese campo y valor no lo ven los usuarios, pero es enviado junto con el resto de campos que sí rellena.
La idea es añadir un campo oculto llamado por ejemplo, testigo, al que daremos el valor valido mediante esta línea:
<input type="hidden" name="testigo" value="valido" />El archivo formulario quedará entonces así:
Nombre del archivo: formulario.php
<?php
//incluimos configuracion.php con los datos de conexión
include_once('configuracion.php');
//Creamos el formulario de registro
echo '
<form action="registro.php" method="POST">
Nick: <input type="text" name="nick" size="25" /><br />
Contraseña: <input type="password" name="password" size="40" /><br />
Repite la contraseña: <input type="password" name="password2" size="40" /><br />
E-mail: <input type="text" name="email" size="60" /><br />
<input type="hidden" name="testigo" value="valido" />
<input type="submit" name="submit" value="Registrar" />
</form>
';
// Damos la opción de volver a la página de login si no desea registrarse
echo '<br /><a href="login.php">Login</a>';
?> Seguido de esto, añadimos una condición en el archivo registro.php con la que abortaremos el proceso si el valor de testigo no es igual a valido. Por ejemplo, colocando la línea if ( ($_POST['testigo]) != "valido") {$error = true;} al principio del archivo. Con ella, si testigo no tiene el valor valido, damos a la variable $error el valor true, que provoca que se aborte el proceso en el siguiente if que hay pocas líneas más abajo.
Nombre del archivo: registro.php
<?php
//incluimos configuracion.php con los datos de conexión
include_once('configuracion.php');
if ( ($_POST['testigo]) != "valido") {$error = true;}
function limpia($cadena)
{
return (ereg_replace('[^A-Za-z0-9_-ñÑ]', '', $cadena));
}
// definimos las variables
$nick = limpia($_POST['nick']) ;
$email = $_POST['email'] ;
$password = limpia($_POST['password']) ;
$password2= limpia($_POST['password2']);
// marcamos el error
if ( empty($nick) OR empty($email) OR empty($password) OR empty($password2) ) {$error = true;}
// si eliminando caráteres raros queda algún campo vacio, generamos un error y devolvemos al formulario
if ( !empty($error) )
{
header("Refresh: 2; URL=formulario.php");
echo "<p>ERROR. Los datos introducidos no tienen un formato correcto.</p>";
die;
}
function verificar_email($email)
{
// Verificamos que no hay más de una arroba y que las longitudes son normales
if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email))
{
return false;
}
$email_array = explode("@", $email);
$local_array = explode(".", $email_array[0]);
for ($i = 0; $i < sizeof($local_array); $i++)
{
if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i]))
{
return false;
}
}
// se revisa si el dominio es una IP. Si no, debe ser un nombre de dominio válido
if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1]))
{
$domain_array = explode(".", $email_array[1]);
if (sizeof($domain_array) < 2)
{
return false; // No son suficientes partes para ser un dominio
}
for ($i = 0; $i < sizeof($domain_array); $i++)
{
if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i]))
{
return false;
}
}
}
return true;
}
if ( verificar_email($email)==false )
{
header("Refresh: 5; URL=formulario.php");
echo "<p>ERROR. El Email $email no parece ser real.</p>";
die;
}
//Comprobamos que la password y password2 son iguales, sino, volvemos a registro.php
if($password != $password2)
{
echo 'ERROR. Las passwords no coinciden';
}
else
{
//cuantos usuarios hay ya con ese nick?
$cuantosnicks=mysql_query("SELECT nick FROM ".$tabla." WHERE nick='".$nick."' ");
//cuantos usuarios hay ya con ese email?
$cuantosemails=mysql_query("SELECT email FROM ".$tabla." WHERE email='".$email."' ");
$nickrepetido = mysql_num_rows($cuantosnicks);
$emailrepetido = mysql_num_rows($cuantosemails);
if($nickrepetido >= 1)
{
echo 'El nick propuesto ya estaba registrado. Escoge otro.';
// damos la opcion de registrarse de nuevo
echo '<br /><a href="formulario.php">Quieres intentarlo con otro nick?</a>';
}
else if($emailrepetido >= 1)
{
echo 'El email propuesto ya estaba registrado. Escoge otro.';
// damos la opcion de registrarse de nuevo
echo '<br /><a href="formulario.php">Quieres intentarlo con otro email?</a>';
}
else
{
//introducimos el nuevo registro en la tabla users
mysql_query("INSERT INTO $tabla (nick,password,email) values ('$nick','$password','$email') ");
echo "<br /><p>Usuario registrado con éxito con Nick=$nick, Contraseña=$password y email=$email</p>";
// damos la opcion de logerase
echo '<br /><a href="login.php">Quieres logearte?</a>';
}
mysql_free_result($cuantosnicks); //liberamos memoria
mysql_free_result($cuantosemails); //liberamos memoria
}
?> Qué os parece?