2016-04-13 2 views
0

Я изменяю веб-приложение, которое было встроено в PHP другим разработчиком. В настоящее время, если пользователь заполняет форму и вводит имя пользователя, которое уже используется, оно отображает ошибку MySQL Duplicate entry 'fred' for key 'username' на новой странице. Я хочу сделать так, чтобы сообщение об ошибке отображалось на одной странице, поэтому я пытаюсь проверить, совпадает ли введенное имя пользователя с другим именем пользователя в таблице, но я не могу заставить его работать. Есть предположения?Проверьте MySQL для повторной записи

$username_entry = ($_POST['username']); 
$username_match = mysql_query("SELECT * FROM business WHERE username='$username_entry'"); 

if (($_POST['username']) == $username_match) { 
    // do something 
} 
+0

какая часть не работает? –

+0

Лучшее решение - это уже реализованное. Если вы получите дублирующий ключ для результата ввода, вы можете отобразить соответствующее сообщение об ошибке. Это гарантирует, что вы только когда-либо совершаете одну поездку туда и обратно в базу данных. Если вы проверите, существует ли пользователь перед вставкой, это приведет к 2-мя поездкам, которые являются более дорогостоящими. Лучшее решение, которое я вижу для вашей проблемы, либо: 1. Перенаправить с страницы сообщения об ошибке обратно на вызывающую страницу и показать соответствующую ошибку. 2. Используйте ajax для завершения запроса и покажите ошибку в вызывающей форме. – Chris

+0

@ Chris-MayhemSoftware Я PHP noob, поэтому я не уверен, как я собираюсь отображать сообщение об ошибке таким образом. Не могли бы вы уточнить? –

ответ

0

Прежде всего, вы ничего не возвращаете из своего запроса для проверки. Я запрашиваю db, чтобы увидеть, возвращаются ли какие-либо строки с этим именем пользователя. $ cnt - это количество строк, поэтому, если это больше нуля, у вас есть дубликат.

$username_entry = ($_POST['username']); 
    $username_match = mysql_query("SELECT count(*) FROM business WHERE username='$username_entry'"); 
    $cnt = mysql_num_rows($username_match); 

    if (($cnt > 0) { 
     // do something 
    } 
+0

Спасибо, что ответили. Я получаю следующую ошибку, когда я использую ваш код ... –

+0

Предупреждение: mysql_fetch_array() ожидает, что параметр 1 будет ресурсом, boolean задан в/Applications/XAMPP/xamppfiles/htdocs/shop-local-weekly-root/arizona/anytown/_actions/addbssn.php в строке 45 Предупреждение: mysql_num_rows() ожидает, что параметр 1 будет ресурсом, null указан в/Applications/XAMPP/xamppfiles/htdocs/shop-local-weekly-root-root/arizona/anytown/_actions/addbssn. php on line 46 –

+0

Если вы хотите сделать это лучше всего, просто используйте count (*), чтобы получить только 1 строку назад. – Chris

Смежные вопросы