Возникли проблемы с моим сценарием регистрации PHP - PullRequest
0 голосов
/ 14 января 2012

Этот скрипт, похоже, зависает, когда сталкивается с рядом операторов 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 />";
    }
}
}

?>

Ответы [ 4 ]

5 голосов
/ 14 января 2012

Ваша проблема в том, что вы md5 вводите пароль перед проверкой длины.Это устанавливает пароль в 32 символа, что превышает ваш лимит и выдает ошибку.

5 голосов
/ 14 января 2012

Вы проверяете strlen($password) > 25, и ваш пароль - md5 hashsum, который длиннее 25 символов.Вы, вероятно, хотели проверить исходное значение пароля

3 голосов
/ 14 января 2012

я не знаю, что не так с вашим кодом, но для вашей электронной почты вы могли бы подумать о том, чтобы использовать что-то вроде этого:

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

многие электронные письма длиннее 25 символов.

2 голосов
/ 14 января 2012

Символ foreach с массивом ошибок можно легко заменить следующим кодом
echo implode('<br />', $errors);

Правильную проверку электронной почты можно выполнить с помощью функции filter_var

Функция strip_tags может иметь нежелательные последствия для пароля, возможно, его части будут удалены.Придумайте следующий пароль: « super! Password»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...