我的PHP注册脚本有困难


Having difficulties with my PHP registration script

当这个脚本遇到一系列检查电子邮件和密码长度的"if"语句时,它似乎会挂断。如果我删除这些语句,它就会正确地将数据插入数据库。

<?php 
ob_start();
session_start();
if (!empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['confirmpassword'])) {
$email = strip_tags($_POST['email']);
$password = md5(strip_tags($_POST['password']));
$confirmpassword = md5(strip_tags($_POST['confirmpassword']));
$errors = array();
if (strlen($email) < 6) {
    $errors[] = "Email too short.";
}
if (strlen($email) > 25) {
    $errors[] = "Email too long.";
}
if (strlen($password) < 2) {
    $errors[] = "Password too short.";
}
if (strlen($password) > 25) {
    $errors[] = "Password too short.";
}
if ($password !== $confirmpassword) {
    $errors[] = "Passwords do not match.";
}
if (count($errors) == 0) {
    // Include database config file then connect to database
    require('db_config.php');
    $connection = mysql_connect(DB_HOST,DB_USERNAME,DB_PASSWORD) or die("Database Connection Error");
    $database = mysql_select_db(DB_NAME) or die("No Database");
    // Create query
    $query = "INSERT INTO bah_register VALUES ('','$email','$password')";
    // Query database and 
    mysql_query($query);
    // Success message
    echo "Thanks for signing up!";
} else {
    foreach ($errors as $error) {
        echo $error . "<br />";
    }
}
}
?>

您的问题是,在检查长度之前,您正在md5中输入密码。这会将密码设置为32个字符,这超出了您的限制并产生错误。

您正在检查strlen($password) > 25,您的密码是大于25个符号的md5散列和。您可能想检查密码的原始值

我不知道你的代码出了什么问题,但对于你的电子邮件,你可能会考虑使用这样的东西:

if(!preg_match('/^[^@]+@[a-zA-Z0-9._-]+'.[a-zA-Z]+$/', $email)){
    $errors[] = "Email is not valid.";
}

许多电子邮件的长度超过25个字符。

带有错误数组的foreach可以替换为以下代码
echo implode('<br />', $errors);

可以使用filter_var功能进行正确的电子邮件验证

strip_tags函数可能会对密码产生不希望的影响,可能会删除其中的部分内容。想想以下密码:«<我的>超级的密码»