За последние 24 часа нас посетили 55053 программиста и 1749 роботов. Сейчас ищут 795 программистов ...

Внос данных в таблицу по ключу

Тема в разделе "PHP и базы данных", создана пользователем Nabai, 12 июл 2011.

  1. Nabai

    Nabai Активный пользователь

    С нами с:
    3 май 2011
    Сообщения:
    51
    Симпатии:
    0
    В общем имеется таблица в MySQL в которую заносятся данные об аккаунте через форму.
    нужно, чтобы данные заносились только после проверки ключа. Ключи лежат в другой таблице.
    Гуглил, но не нашел гайдов на эту тему.
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    задача слишком неопределена, очень много неизвестного
     
  3. Nabai

    Nabai Активный пользователь

    С нами с:
    3 май 2011
    Сообщения:
    51
    Симпатии:
    0
    PHP:
    1. <?
    2. include "config.php"; // подключаем файл с конфигом
    3. if(isset($_GET['step'])) $step = $_GET['step'];
    4. if($step == 2)
    5. {
    6.       // проверим соединение с mysql сервером
    7.       if(Test_mysql_connect() == false)
    8.       {
    9.             echo "<font color='#ff0000'> Ошибка!
    10.            Скорее всего игровой сервер неактивен, попробуйте зайти сюда позже.</font></a></font>";
    11.             End_page();
    12.       }
    13.       $savedata = "true"; //Сохранять или нет пользовательские данные, пароль логин , email в незашифрованном виде.
    14.       $fsname = $_SERVER['SCRIPT_NAME'];
    15.       $msconn = mysql_connect($dbhost, $dbuser, $dbpass);
    16.       if($msconn == FALSE)
    17.       {
    18.                 echo "<font color='#ff0000'>Ошибка соединения.
    19.                 </a></font>";
    20.                 End_page();
    21.       }
    22.       if(!MYSQL_SELECT_DB($dbname))
    23.       {
    24.                 echo "<font color='#ff0000'>БД не найдена! Скорее всего эта ошибка вызвана сбоем на сервере</font>"; End_page();
    25.       }
    26.  
    27.       $login = trim($_POST[login]);
    28.       $pass = $_POST[pass];
    29.       $pass2 = $_POST[repeat];
    30.       $email = trim($_POST[email]);
    31.       if ($email == "")
    32.       {
    33.              echo ("<center><font color='#ff0000'>Вы не ввели e-mail</font><br>Обязательно укажите свой e-mail!</center>");
    34.                 End_page();
    35.       }
    36.       if ($login == "")
    37.       {
    38.              echo ("<center><font color='#ff0000'>Вы не ввели логин</font></center>");
    39.       }
    40.       else
    41.       {
    42.                 if ($pass == "")
    43.                 {
    44.                    echo ("<center><font color='#ff0000'>Пароль не может быть пустым</font></center>");
    45.              }
    46.                 else
    47.                 {
    48.                      if ($pass == $pass2)
    49.                      {
    50.                      $q = mysql_query("SELECT * FROM accounts WHERE login='{$login}'");
    51.                    if(!mysql_numrows($q) > "0")
    52.                      {
    53.                    $gamepass = base64_encode(pack("H*", sha1(utf8_encode($pass))));
    54.                          $result = mysql_query("INSERT INTO accounts(login, password, lastactive, access_level, lastIP, lastServer, IPBlock)
    55.                        VALUES('".$login."' , '".$gamepass."', '1', '0', '0.0.0.0', '1', '0')");
    56.                         if($result == FALSE)
    57.                         {
    58.                         echo "Ошибка запроса. Свяжитесь с администрацией.";
    59.                         End_page();
    60.                         }
    61.                         if ($savedata == "true")
    62.                         {
    63.                         // записываем во вторую таблицу данные юзера
    64.                         $result = mysql_query("INSERT INTO accounts_info(login, pass, email) VALUES('".$login."', '".$pass."', '".$email."')");
    65.                         if($result == FALSE)
    66.                         {
    67.                         echo "Аккаунт зарегистрирован, но произошли ошибки. Вы не сможете восстановить ваш пароль в случае утери.";
    68.                         End_page();
    69.                         }
    70.                   }
    71.                   echo ("<center>Аккаунт <font color='red'>".$login."</font> успешно зарегистрирован!</center>");
    72.             }
    73.             else
    74.                   {
    75.                   echo ("<center>Имя <font color='red'>".$login."</font> уже зарегистрировано, попробуйте другое.</center>");
    76.                     }
    77.             }
    78.             else
    79.             {
    80.                   echo ("<center><font color='#ff0000'>Пароли не совпадают</font></center>");
    81.              }
    82.             }
    83.       }
    84.       End_page();
    85. }
    86. else
    87. {
    88. ?>
    89. <form name="form1" method="post" action="?step=2">
    90. <div align="center">
    91. <table width="250" border="0" cellspacing="0" cellpadding="0">
    92. <tr>
    93. <td align="right"><font size="2">Логин</font>  </td>
    94. <td width="161"><label>
    95. <input name="login" type="text" id="login">
    96. </label><br><br>
    97. </td>
    98. </tr>
    99. <tr>
    100. <td align="right"><font size="2">Пароль</font>  </td>
    101. <td><label>
    102. <input name="pass" type="password" id="pass">
    103. </label><br><br>
    104. </td>
    105. </tr>
    106. <tr>
    107. <td align="right"><font size="2">Ещё раз</font>  </td>
    108. <td><label>
    109. <input name="repeat" type="password" id="repeat">
    110. </label><br><br>
    111. </td>
    112. </tr>
    113. <tr>
    114. <td align="right"><font size="2">E-mail</font>  </td>
    115. <td><label>
    116. <input name="email" id="repeat">
    117. </label>
    118. </td>
    119. </tr>
    120. </table>
    121. </div>
    122. <br>
    123. <label>
    124. <input type="submit" name="Submit" value="Зарегистрироваться" >
    125. </label>
    126. </form><br>
    127.  
    128. <?
    129.       End_page();
    130. }
    131.  
    132. function End_page()
    133. {
    134. ?>
    135.        Здесь футер вашей страницы - то, что идёт внизу страницы
    136.  
    137. <?
    138.       exit;
    139. }
    140. ?>
    Есть вот такой код который вносит данные в БД.
    Нужно, чтобы перед тем как внести данные в БД, она запрашивал из БД (например в таблице valid_keys) ключ введенный в форму "key" и вводил данные если ключ имеется и затем удалял ключ. Если ключа в базе нету, то внос данных происходить не должен.

    p.s.> как еще к этому делу капчу прикрутить?
     
  4. Easy

    Easy Активный пользователь

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    А вы не запрашивайте, вы можете смело выполнять запрос
    PHP:
    1. $sql = "DELETE FROM `valid_keys` WHERE `key` = '{$key}'";
    а после его выполнения проверять сколько строк было задействовано предыдущей mysql операцией
    как то так
    PHP:
    1. $key = ...
    2. mysql_query("DELETE FROM `valid_keys` WHERE `key` = '{$key}'");
    3. if (mysql_affected_rows() != 0) {
    4.     // ключ был найден и удалён
    5. } else {
    6.     die('Обманщик! Уходи прочь!');
    7. }
     
  5. Nabai

    Nabai Активный пользователь

    С нами с:
    3 май 2011
    Сообщения:
    51
    Симпатии:
    0
    Немного переработал код, но он немного неправильно работает :)
    Точнее, из заявленных функций в нем работает только проверка пароля :)
    Думаю человек знающий сразу скажет в чем я неправ, посмотрите пожалуйста :)

    Код (Text):
    1. <form action="registration.php" method="GET">
    2. Введи логин:
    3. <input name="login" value="" type="text" />
    4. Введи пароль:
    5. <input name="password1" value="" type="password" />
    6. Повтори пароль:
    7. <input name="password2" value="" type="password" />
    8. Введи ключ:
    9. <input name="key" value="" type="text" />
    10. <input value="Войти" type="submit" />
    11. </form>
    12. <?
    13. $login = $_GET['login'];
    14. $password1 = $_GET['password1'];
    15. $password2 = $_GET['password2'];
    16. $key = $_GET['key'];
    17.  
    18. $regdbuser = 'root'; //Пользователь Mysql
    19. $regdbpass = '';  //Пароль Mysql
    20. $regdb = 'l2test';  //База данных
    21. $regdbhost = 'localhost'; //Хост базы данных
    22. mysql_connect ($regdbhost, $regdbuser, $regdbpass) or die ("Не могу подключится к базе");
    23. mysql_select_db( $regdb ) or die ('Не могу выбрать базу');
    24. $db_con = mysql_query ("SELECT FROM 'accounts' WHERE 'login'='$login'");
    25. if ($db_con)
    26. { die('Такой логин уже есть'); }
    27. //Начало выполнения программы, в случае, если логин не дублируется
    28. {
    29. //Проверяем пароли
    30. if ($password1 != $password2)
    31. { die('Пароль не совпадает с подтверждением'); }
    32. //Проверили, начало скрипта если пароли одинаковы
    33. {
    34. //Запрашиваем ключ из бд.
    35. mysql_query("DELETE FROM `valid_keys` WHERE `key` = '$key'");
    36.  if (mysql_affected_rows() != 0)
    37. //Начинаем выполнять скрипт дальше, если ключ был удален.
    38.  {
    39. mysql_query("INSERT INTO 'accounts' ( login, password, key ) VALUES ($login, $password1, $key)");
    40. echo "Аккаунт зарегистрирован";    
    41.  }
    42.  //Ключ не был найден в базе данных.
    43.  else {
    44.      die('Ключ неверный.');
    45.  }
    46.  }
    47.  }
    48. mysql_close();
    49.  ?>