2016-03-18 3 views
0

Я новичок в PHP & MySQL, я пытаюсь создать эту регистрационную форму для проекта, над которым я сейчас работаю, вот PHP-скрипт, кстати. Если ошибок много, потому что я только что начал!Регистрация формы PHP

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

PHP код:

<?php 

//register php 

error_reporting(0); 

$regUsername = $_POST['reg-username']; 
$regEmail = $_POST['reg-email']; 
$regPassword = $_POST['reg-password']; 

if(isset($regUsername) && isset($regEmail) && isset($regPassword)){ 
     $connect = mysql_connect('localhost', 'root', ''); 
     $selectDB = mysql_select_db('supermazad'); 
     $query = mysql_query("INSERT INTO users (username, email, password) VALUES ('$regUsername', '$regEmail', '$regPassword')"); 
     $checkIfSame = mysql_query("SELECT * FROM users WHERE username AND email LIKE '$query' "); 
     echo '<h1 class="successMessage">You have successfully registered!</h1>'; 
} 
      if($regUsername || $regEmail == $checkIfSame){ 
      echo '<h1 class="errorMessage">The username or e-mail already exists.</h1>'; 
     } 

?> 
+0

Прежде первый из первых, почему вы отлаживать код с 'error_reporting (0)' Turn это 'error_reporting (E_ALL);' и добавить 'ini_set ('display_errors', 1)', чтобы узнать, что происходит в вашем коде. – fusion3k

+2

Если вы только что начали, вы могли бы также с самого начала и не использовать 'mysql_ *'. Это устарело более 2 лет. Вместо этого попробуйте MySQLi или PDO. – icecub

+0

'$ checkIfSame = mysql_query (" SELECT * FROM users WHERE username И email LIKE '$ query' ");' ... что это? 'username И email LIKE '$ query' ' – JanLeeYu

ответ

1

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

0

Я думаю, что вы должны сделать это, как это после того, как $selectDB = mysql_select_db('supermazad');:

$checkIfSame = mysql_query("SELECT * FROM users WHERE username LIKE '".$regUsername."' OR email LIKE '".$regEmail."' "); 
if (mysql_num_rows($checkIfSame) > 0) { 
    echo '<h1 class="errorMessage">The username or e-mail already exists.</h1>'; 
} else { 
    //insert new user here 
    $query = mysql_query("INSERT INTO users (username, email, password) VALUES ('$regUsername', '$regEmail', '$regPassword')"); 
} 

Кроме того, у вас есть это в вашем посте:

, если адрес электронной почты или имя пользователя матч

так вы должны использовать OR, а не AND

+0

Привет @JanLeeYu, я сделал несколько настроек, и теперь он работает, спасибо! –

+0

Добро пожаловать. – JanLeeYu

1
  1. Пожалуйста, используйте MySQLi вместо MySQL, потому что это безопаснее
  2. удалить error_reporting (0)
  3. не использовать «как», потому что он может иметь много результата
  4. ошибка
  5. синтаксиса на запросе тузд

попробовать это один раз отладить, если есть ошибка, но я думаю, что это работает

$regUsername = $_POST['reg-username']; 
$regEmail  = $_POST['reg-email']; 
$regPassword = $_POST['reg-password']; 

if(isset($regUsername) && isset($regEmail) && isset($regPassword)){ 
     $mysqli   = mysqli_connect("localhost","root","","supermazad") or die("Error " . mysqli_error($mysqli)); 
     $queryInsert = "INSERT INTO users (username, email, password) 
          VALUES 
          ('$regUsername', '$regEmail', '$regPassword')"; 
     mysqli_query($mysqli, $queryInsert); //this will insert the data from db 

     $queryUser = "SELECT username,email FROM users WHERE username = '$regUsername' AND email = '$regEmail'"; // this will authenticate and uses an exact match 
     $result  = $mysqli->query($queryUser); 
     $row  = mysqli_fetch_array($result); 

     echo '<h1 class="successMessage">You have successfully registered!</h1>'; 
} 
      if($regUsername == $row['username'] && $regEmail == $row['email']){ //this check if email and username are match with database $row['username'] store username from mysql field and $row['email'] do the same 
      echo '<h1 class="errorMessage">The username or e-mail already exists.</h1>'; 
     } 

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

+0

Спасибо @LiuJinLong, мой скрипт работает прямо сейчас! –

+0

попробуйте использовать https: // www.diffchecker.com/ вставьте свой старый скрипт слева и новый скрипт справа, чтобы узнать, какова ваша ошибка. Также, пожалуйста, сделайте мой ответ правильным для пунктов hehehe –

0

Попробуйте это:

$checkIfSame = mysql_query("SELECT * FROM users WHERE username LIKE '".$regUsername."' OR email LIKE '".$regEmail."' "); 
if (mysql_num_rows($checkIfSame) > 0) { 
    echo '<h1 class="errorMessage">The username or e-mail already exists.</h1>'; 
} else { 
    //insert new user here 
    $query = mysql_query("INSERT INTO users (username, email, password) VALUES ('$regUsername', '$regEmail', '$regPassword')"); 
}