2015-08-06 2 views
0

Итак, я смотрел многочисленные ссылки на страницу регистрации php, однако у меня проблемы. После перезагрузки страницы всегда существует строка «Username уже существует». Я знаю, что есть проблема с моим кодом, но, видя, что я не PHP Savvy, я действительно не знаю, как это исправить; Я смотрю на пару часов и, похоже, не могу это исправить, а также много разных способов зарегистрировать учетную запись. Может быть, один из вас может мне помочь. Вот мой код:PHP - Имя пользователя уже существует. Осталось на экране

  <html> 
       <body> 
        <form method="post" action=""> 
         Username: <input type="text" name="username" value="" /><br/> 
         Password: <input type="password" name="pass" value="" /><br/> 
         Repeat Password: <input type="password" name="pass2" value=""/><br/> 
         <input type="submit" name="submit" value="Submit" /> 
        </form> 
       </body> 
      </html> 

      <?php 
       $con = mysql_connect("localhost", "root", "123"); 
       $db = mysql_select_db("cq3"); 

       $Username = isset($_POST['Username']); 
       $sql = "SELECT * FROM accounts WHERE Username = '$Username'"; 
       $result = mysql_query($sql, $con); 
       if(mysql_num_rows($result)){ 
        echo "Username already exists!"; 
       } 
       else 
       { 
        if(isset($_POST['submit'])) 
        { 
         $sql = "INSERT INTO `accounts` (Username, Password) VALUES ('".$_POST['username']."', '".$_POST['pass']."')"; 
         $sql = mysql_query($sql); 
        } 
       } 
      ?> 
+0

сравнить 'имя =" имя пользователя "с' $ _POST ['Username'] '- Тогда это не будет работать' $ Username = isset ($ _ POST ['Username']); 'по двум причинам. Используйте отчет об ошибках и более безопасный способ хранения паролей, а также API MySQL. –

+0

@ Fred-ii- Я не думаю, что он пытается спросить о неопределенной ошибке индекса. Он спрашивает, почему его код все еще отображается, даже если пользователь не нажал кнопку отправки. – Script47

+0

@ Script47 вам лучше посмотреть снова и перейти к моему первому комментарию к ним. –

ответ

1

Вы должны поставить проверку имени пользователя в заявлении $_POST['submit']if так он работает только тогда, когда пользователь нажимает на кнопку отправки. Это должно решить вашу проблему.

Edit 1

Как Фред отметил,

<input type="text" name="username" value="" />

Но вы почему-то делают,

$Username = isset($_POST['Username']);

Должно быть,

$username = isset($_POST['username']);

Обратите внимание на нижний регистр у в $_POST['username']

Кроме того, чтобы решить другой вопрос, сообщения об ошибке показывает, когда он не должен,

$con = mysql_connect("localhost", "root", "123"); 
    $db = mysql_select_db("cq3"); 

    $username = isset($_POST['username']) ? htmlspecialchars($_POST['username'], ENT_QUOTES) : false; 
    $sql = "SELECT * FROM accounts WHERE Username = '$Username'"; 
    $result = mysql_query($sql, $con); 

    if(isset($_POST['submit'])) { 
     $sql = "SELECT * FROM accounts WHERE Username = '$Username'"; 
     $result = mysql_query($sql, $con); 

     if(mysql_num_rows($result)){ 
      echo "Username already exists!"; 
     } else { 
      $sql = "INSERT INTO `accounts` (Username, Password) VALUES ('".$_POST['username']."', '".$_POST['pass']."')"; 
      $sql = mysql_query($sql); 
     } 
    } 

Вы должны убедиться, что все имена ваших входов совпадают с клавишами в $_POST.

Что нужно сделать, это только вставить пользователя, если нажата кнопка отправки И если имя пользователя не существует, также теперь проверка имени пользователя будет выполняться после нажатия пользователем отправки.

Редактировать 2 + 3

Если вы можете, вы должны stop using mysql_* functions. Они больше не поддерживаются и являются officially deprecated. Узнайте об preparedstatements и рассмотрите возможность использования PDO, it's really not hard.

Похоже, что вы можете хранить пароли в текстовом виде. Если это так, то оно очень обескуражено.

Рекомендуется использовать функцию CRYPT_BLOWFISH или PHP 5.5's password_hash(). Для PHP < 5.5 используйте password_hash() compatibility pack.

+0

* «Это должно исправить вашу проблему». * - Я ненавижу быть носителем плохих новостей здесь, но это не так. Помните, что в большинстве или во всех языках программирования/программирования переменные чувствительны к регистру, как и массивы POST. Кроме того, их 'isset()' это тоже не работает. –

+0

'$ username = isset ($ _ POST ['username']);' close, но не сигары. Это неверно. Ref: http://php.net/manual/en/function.isset.php и http://php.net/manual/en/language.operators.comparison.php –

+0

@ Фред-и-гах, его код, Я пропустил это. Редактирование сейчас. – Script47