2015-02-19 3 views
0

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

$query = mysqli_query($con, "SELECT * FROM Email WHERE Email = '".$testemail. "'"); 
if(mysqli_num_rows($query) > 0){ 
    echo "Email is already in use.<br>"; 
}else{ 
    $query = mysqli_query($con, "SELECT * FROM Username WHERE Username = '".$testname. "'"); 
    if(mysqli_num_rows( $query) > 0){ 
    echo "Username is already in use.<br>"; 
}else{ 
    $sql = "INSERT INTO users (Username, Password, Email, Firstname, Lastname, Lastlogin, Registered) VALUES ('$testname', '$testpass', '$testemail', '$testfirstname' , '$testlastname', '$lastlogin', '$registered')"; 
    if ($conn->query($sql) === TRUE) { 
     echo "New account created successfully<br>"; 
    } 
    } 
} 

ли конкретный код, который должен остановить это происходит, но here is the full page:

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

EDIT: Я пробовал редактировать его, но он все еще не работает, я также сделал уникальную запись «Email» и «Username» в моей базе данных. Но все это означает, что данные вообще не вводятся. Я также пробовал обходной путь, где он отображает ошибку при ошибке номер 1062, но это еще не сработало.

The new code

я упустил что-то очевидное, как хорошо, я использую IF заявление, так что петли только через проверку тьфу запросы, когда я думаю

+1

Каковы значения, которые сравниваются? Если значения действительно должны быть уникальными, то также поможет установить ограничение на столбцы базы данных. Примечание: вы можете быть широко открыты для SQL-инъекций с помощью этого кода. – David

+0

в кодовой ссылке он использует mysqli_real_escape_string для sql-инъекции. , например. $ testname = mysqli_real_escape_string ($ con, $ _POST ['username']); – justAnotherUser

+0

Да, один из моих друзей сказал мне использовать mysqli_real_escape_strings в качестве основного счетчика против этих. Есть ли лучший/безопасный способ защиты от инъекций? – Crecket

ответ

0

Я сделал имя столбца UNIQUE в моей базе данных, и чем добавлены новые данные через эту линию:

$sql = "INSERT INTO users (Username, Password) VALUES ('$testname', '$testpass')"; 
if (!($conn->query($sql))) { 
    echo "Username is already in use"; 
}else{ 
    echo "New account created successfully"; 
} 

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

1

Я подозреваю, что эти SELECT запросов терпят неудачу, потому что они не считывая те же данные, которые были вставлены в базу данных. Вот ваша вставка:

INSERT INTO users ... 

Но вы выбираете из различных таблиц:

SELECT * FROM Email ... 
SELECT * FROM Username ... 

Если значения в таблице называется users, почему вы выбирать из таблиц, называемых Email и Username? Может быть, вы решили выбрать из users вместо этого? Что также означает, что вы можете сделать это в одном запросе вместо двух:

SELECT * FROM users WHERE Username = '".$testname. "' OR Email = '".$testemail. "' 
+0

Не могли бы вы изменить мой код, чтобы он проверял все значения из столбца? Я думаю, что он проверяет только первую строку по какой-то причине – Crecket

+0

@Crecket: Не совсем понятно, что вы имеете в виду. Во-первых, нет «первой строки». Заказ строк в базе данных не гарантируется, если явно не определено. Если имена пользователей и/или электронные письма должны быть уникальными, я бы * ожидал * вышеуказанный запрос, чтобы возвращать только одну строку. (Или нулевые строки.) Каким образом ваша обновленная попытка не работает? Не стесняйтесь редактировать вопрос, чтобы указать на это. – David