Привет всем. У меня возникла одна проблема, сейчас опишу её суть. Я сделал систему регистрации и всё такое, конечно же делаю с подтверждением Email. 1.Генерируется 5 символов. 2.Отправляется всё это дело на почту. 3.Вводишь код подтверждения в форму и всё чики пуки. У меня всё работает, НО, когда я нажимаю кнопочку подтвердить, этот генератор делает новую строку, и она получается не равна той, которую я отправил по Email. Код прилагаю ниже. P.s Часть кода взял со статьи на Хабре, но это не важно. P.s.s Прошу не обсирать код, т.к. я его писал так специально, чтобы как можно быстрее выяснить проблему и всё такое. Код (PHP): <?php if(isset($_COOKIE['mail'])) { include 'data/dbconfig.php'; function generateCode($length=5) { $chars = "ABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789"; $code = ""; $clen = strlen($chars) - 1; while (strlen($code) < $length) { $code .= $chars[mt_rand(0,$clen)]; } return $code; } $key = generateCode(5); $mail = $_COOKIE['mail']; $query = mysql_query("SELECT * FROM users WHERE user_email='".$mail."'"); $data = mysql_fetch_assoc($query); $to = $mail; $subject = "Регистрация на сайте"; $message = ' <p>Текст письма</p> </br> <b>Уважаемый '.$data['user_login'].', </b> </br>Вы зарегистрировались на нашем сайте. </br> Вот Ваш код: '.$key.''; $headers = "Content-type: text/html; charset=windows-1251 \r\n"; $headers .= "From: От кого письмо <from@example.com>\r\n"; $headers .= "Reply-To: reply-to@example.com\r\n"; //mail($to, $subject, $message, $headers); if(isset($_POST['confirm'])) { if($_POST['code'] == $key) { mysql_query("UPDATE users SET user_status='1' WHERE user_id='".$data['user_id']."'"); print "Регистрация завершена"; setcookie("mail", $mail, time()-60*60*24*30); } else { print "Неверный код - ".$_POST['code']." не соответствует ".$key." "; } } } else { header("Location: index.php"); } ?> <form method="POST"> Администрация сайта требует правильности вводимых Email,<br> К Вам на почту, было выслано письмо с кодом,<br> Введите его здесь:<?php print $key ?><br><br> <input name="code" type="text" maxlength="5"><a> </a><input name="confirm" type="submit" value="Подтвердить"> </form> </html> Спасибо.
Оберни $key = generateCode(5); в проверку, нужно ли генерировать код заново. Либо не удивляйся, что генератор случайной строки генерирует случайные строки.
Генерируете 5 символов, высылаете на почту юзверю, тут же эти 5 символов заносите в бд к логину этого юзверя. когда юзверь вводит эти 5 символов - сверять их со строкой из бд
Это проще простого, я уже и сам думал если честно, но всё таки не хотелось засорять бд, тем более если можно обойтись без неё
Спасибо попробую. Но если же есть возможность запилить без использования бд, напишите пожалуйста, мало ли
Ну я бы, например, сделал так: одна таблица юзера, основная, где: лог, пасс, вся нужная шляпа, активация. Где активация может иметь значения 1 или 0, т.е. активирован аккаунт или нет. Вторая таблица, временная. Где есть только логин и 5-символьный код активации. По умолчанию в первой таблице активация стоит в 0. Как юзер вводит свой код активации, он сверяется с кодом во второй таблице. Если коды совпадают - строка во второй таблице удаляется, а в первой таблице активация апдейтится в 1