Пожалуйста, закройте, спасибо

Andy81

Пользователь
Регистрация
25.03.13
Сообщения
9
Реакции
4
Баллы
3
Привет,
Пожалуйста, закройте, спасибо
Я следовал этому руководству, потому что пытаюсь добавить пароль сброса на страницу входа в систему моего участника. https://daveismyname.com/reset-password-script-bp

Хотя, когда я следую руководству, я получаю сообщение об ошибке для этой строки


Код:
<?php
if (isset($_POST['submit']))
{
$email = $_POST['remail'];
$pattern = '/^[^@]+@[^srn'";,@%]+$/';
if (!preg_match($pattern, trim($email))) { $error[] = 'Please enter a valid email address';
}
$check = mysql_query("SELECT email FROM members WHERE email = '$email'")or die(mysql_error());
$check2 = mysql_num_rows($check);
if ($check2 == 0) {
$error[] = 'Sorry, we cannot find your account details please try another email address.';
}
if (!$error) {
$query = mysql_query("SELECT username FROM members WHERE email = '$email' ")or die (mysql_error());
$r = mysql_fetch_object($query);
$password = substr(md5(uniqid(rand(),1)),3,10);
$pass = md5($password); //encrypted version for database entry
$to = "$email";
$subject = "Account Details Recovery";
$body = "Hi $r->username, nn you or someone else have requested your account details. nn Here is your account information please keep this as you may need this at a later stage. nnYour username is $r->username nn your password is $password nn Your password has been reset please login and change your password to something more rememberable.nn Regards Site Admin";
$additionalheaders = "From: <[email protected]>rn";
$additionalheaders .= "Reply-To: [email protected]";
mail($to, $subject, $body, $additionalheaders);
$sql = mysql_query("UPDATE members SET password='$pass' WHERE email = '$email'")or die (mysql_error());
$rsent = true;
}// close errors
}// close if form sent
if (!empty($error))
{ $i = 0; while ($i < count($error)){ echo "<div class="msg-error">".$error[$i]."</div>"; $i ++;}
}// close if empty errors
if ($rsent == true){ echo "<p>You have been sent an email with your account details to $email</p>n"; } else { echo "<p>Please enter your e-mail address. You will receive a new password via e-mail.</p>n"; }
?>
<form action="" method="post">
<p>Email Address: <input type="text" name="remail" size="50" maxlength="255">
<input type="submit" name="submit" value="Get New Password"></p>
</form>

Код (разметка): Это на моей стороне в этой строке кода?

Полный код сценария также можно найти здесь.
$pattern = '/^[^@]+@[^srn'";,@%]+$/';
Код (разметка): Не бейте меня слишком сильно, я просто пытаюсь научиться программировать. Если есть другой или более простой способ добавить лучший пароль для сброса, дайте мне знать.
 

lenlekk

Пользователь
Регистрация
30.08.11
Сообщения
4
Реакции
0
Баллы
1
Не хочу сердиться, но этот сценарий действительно не имеет особой ценности в современном мире. Он использует устаревшие концепции и mysql_ для подключения к базе данных (ОЧЕНЬ устаревший обработчик), а это значит, что его вообще не следует использовать.

Я бы дал вам пример получше, но сейчас середина ночи, и то, что у меня есть, хоть и лучше, но во многом создано специально для страницы, на которой оно находится, и мне потребуется небольшая настройка, прежде чем я смогу опубликуйте это.

Однако на что стоит обратить внимание:

Используйте либо mysqli_, либо PDO, а также объектно-ориентированный метод, а не процедурный.
Используйте подготовленные операторы для выполнения вызовов БД — таким образом вы избежите многих проблем с SQL-инъекцией и повысите безопасность своих скриптов. Кроме того, это значительно упрощает обслуживание повторяющихся задач БД.
Рассмотрите возможность правильного использования соли и хеширования пароля (md5 избегали в течение многих лет)
Никогда не следует предоставлять пароль в виде обычного текста — даже тот, который предназначен для изменения — вместо отправки нового пароля создайте уникальный идентификатор, сохраните его в базе данных и отправьте ссылку, по которой пользователь может щелкнуть, с идентификатором в виде токен - сделайте идентификатор невозможным для угадывания - минимум 32 символа, рандомизированный шаблон чисел/символов, с тире, подчеркиваниями и т. д. Также сделайте его уникальным, поэтому, если случится так, что генератор выдаст идентичные строки, он выйдет из строя, и сделай это снова.
Когда пользователь использует ссылку с идентификатором, вы проверяете это по базе данных, и если адрес электронной почты и идентификатор совпадают, вы разрешаете пользователю создать новый пароль. Таким образом, даже если пользователь вспомнит пароль после нажатия на ссылку «забыли пароль», он все равно будет работать, поскольку он еще не был изменен.

Вероятно, у вас есть другие проблемы со сценарием, но это не пришло мне в голову.
 
Сверху Снизу