В общем имеется таблица в MySQL в которую заносятся данные об аккаунте через форму. нужно, чтобы данные заносились только после проверки ключа. Ключи лежат в другой таблице. Гуглил, но не нашел гайдов на эту тему.
PHP: <? include "config.php"; // подключаем файл с конфигом if(isset($_GET['step'])) $step = $_GET['step']; if($step == 2) { // проверим соединение с mysql сервером if(Test_mysql_connect() == false) { echo "<font color='#ff0000'> Ошибка! Скорее всего игровой сервер неактивен, попробуйте зайти сюда позже.</font></a></font>"; End_page(); } $savedata = "true"; //Сохранять или нет пользовательские данные, пароль логин , email в незашифрованном виде. $fsname = $_SERVER['SCRIPT_NAME']; $msconn = mysql_connect($dbhost, $dbuser, $dbpass); if($msconn == FALSE) { echo "<font color='#ff0000'>Ошибка соединения. </a></font>"; End_page(); } if(!MYSQL_SELECT_DB($dbname)) { echo "<font color='#ff0000'>БД не найдена! Скорее всего эта ошибка вызвана сбоем на сервере</font>"; End_page(); } $login = trim($_POST[login]); $pass = $_POST[pass]; $pass2 = $_POST[repeat]; $email = trim($_POST[email]); if ($email == "") { echo ("<center><font color='#ff0000'>Вы не ввели e-mail</font><br>Обязательно укажите свой e-mail!</center>"); End_page(); } if ($login == "") { echo ("<center><font color='#ff0000'>Вы не ввели логин</font></center>"); } else { if ($pass == "") { echo ("<center><font color='#ff0000'>Пароль не может быть пустым</font></center>"); } else { if ($pass == $pass2) { $q = mysql_query("SELECT * FROM accounts WHERE login='{$login}'"); if(!mysql_numrows($q) > "0") { $gamepass = base64_encode(pack("H*", sha1(utf8_encode($pass)))); $result = mysql_query("INSERT INTO accounts(login, password, lastactive, access_level, lastIP, lastServer, IPBlock) VALUES('".$login."' , '".$gamepass."', '1', '0', '0.0.0.0', '1', '0')"); if($result == FALSE) { echo "Ошибка запроса. Свяжитесь с администрацией."; End_page(); } if ($savedata == "true") { // записываем во вторую таблицу данные юзера $result = mysql_query("INSERT INTO accounts_info(login, pass, email) VALUES('".$login."', '".$pass."', '".$email."')"); if($result == FALSE) { echo "Аккаунт зарегистрирован, но произошли ошибки. Вы не сможете восстановить ваш пароль в случае утери."; End_page(); } } echo ("<center>Аккаунт <font color='red'>".$login."</font> успешно зарегистрирован!</center>"); } else { echo ("<center>Имя <font color='red'>".$login."</font> уже зарегистрировано, попробуйте другое.</center>"); } } else { echo ("<center><font color='#ff0000'>Пароли не совпадают</font></center>"); } } } End_page(); } else { ?> <form name="form1" method="post" action="?step=2"> <div align="center"> <table width="250" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="right"><font size="2">Логин</font> </td> <td width="161"><label> <input name="login" type="text" id="login"> </label><br><br> </td> </tr> <tr> <td align="right"><font size="2">Пароль</font> </td> <td><label> <input name="pass" type="password" id="pass"> </label><br><br> </td> </tr> <tr> <td align="right"><font size="2">Ещё раз</font> </td> <td><label> <input name="repeat" type="password" id="repeat"> </label><br><br> </td> </tr> <tr> <td align="right"><font size="2">E-mail</font> </td> <td><label> <input name="email" id="repeat"> </label> </td> </tr> </table> </div> <br> <label> <input type="submit" name="Submit" value="Зарегистрироваться" > </label> </form><br> <? End_page(); } function End_page() { ?> Здесь футер вашей страницы - то, что идёт внизу страницы <? exit; } ?> Есть вот такой код который вносит данные в БД. Нужно, чтобы перед тем как внести данные в БД, она запрашивал из БД (например в таблице valid_keys) ключ введенный в форму "key" и вводил данные если ключ имеется и затем удалял ключ. Если ключа в базе нету, то внос данных происходить не должен. p.s.> как еще к этому делу капчу прикрутить?
А вы не запрашивайте, вы можете смело выполнять запрос PHP: $sql = "DELETE FROM `valid_keys` WHERE `key` = '{$key}'"; а после его выполнения проверять сколько строк было задействовано предыдущей mysql операцией как то так PHP: $key = ... mysql_query("DELETE FROM `valid_keys` WHERE `key` = '{$key}'"); if (mysql_affected_rows() != 0) { // ключ был найден и удалён } else { die('Обманщик! Уходи прочь!'); }
Немного переработал код, но он немного неправильно работает Точнее, из заявленных функций в нем работает только проверка пароля Думаю человек знающий сразу скажет в чем я неправ, посмотрите пожалуйста Код (Text): <form action="registration.php" method="GET"> Введи логин: <input name="login" value="" type="text" /> Введи пароль: <input name="password1" value="" type="password" /> Повтори пароль: <input name="password2" value="" type="password" /> Введи ключ: <input name="key" value="" type="text" /> <input value="Войти" type="submit" /> </form> <? $login = $_GET['login']; $password1 = $_GET['password1']; $password2 = $_GET['password2']; $key = $_GET['key']; $regdbuser = 'root'; //Пользователь Mysql $regdbpass = ''; //Пароль Mysql $regdb = 'l2test'; //База данных $regdbhost = 'localhost'; //Хост базы данных mysql_connect ($regdbhost, $regdbuser, $regdbpass) or die ("Не могу подключится к базе"); mysql_select_db( $regdb ) or die ('Не могу выбрать базу'); $db_con = mysql_query ("SELECT FROM 'accounts' WHERE 'login'='$login'"); if ($db_con) { die('Такой логин уже есть'); } //Начало выполнения программы, в случае, если логин не дублируется { //Проверяем пароли if ($password1 != $password2) { die('Пароль не совпадает с подтверждением'); } //Проверили, начало скрипта если пароли одинаковы { //Запрашиваем ключ из бд. mysql_query("DELETE FROM `valid_keys` WHERE `key` = '$key'"); if (mysql_affected_rows() != 0) //Начинаем выполнять скрипт дальше, если ключ был удален. { mysql_query("INSERT INTO 'accounts' ( login, password, key ) VALUES ($login, $password1, $key)"); echo "Аккаунт зарегистрирован"; } //Ключ не был найден в базе данных. else { die('Ключ неверный.'); } } } mysql_close(); ?>