2015-11-05 2 views
2

Ладно, так что я собираюсь на это какое-то время. Я пытаюсь добиться того, чтобы люди не могли создать то же имя, которое вводится в поле name = 'name'. Вот код html.Я не могу предположить, чтобы предотвратить дублирование имен входов

<div class="fieldclass"><form action='/newlist.php' method='POST' id="formID"> 
Name Your Card <input class='ha' type='text' name='name'><p> 
<input type='submit' value='create'/> 
     </form> 

и это моя страница mysql.

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = "root"; 
$dbname = "christmas"; 

// Create connection 
$dbhandle = mysqli_connect ($servername, $username, $password, $dbname) or die ("could not connect to database"); 


$selected = mysql_connect('christmas', $dbhandle); 



$query = mysql_query("SELECT * FROM list WHERE name='$name'"); 
if(mysql_num_rows($query) > 0){ 
    echo 'that name already exists'; 
}else{ 
    mysql_query("INSERT INTO list(name, one , two, three, four, five, six, seven, eight) VALUES ('$name' , '$one' , '$two' , '$three' , '$four' , '$five' , '$six', '$seven' , '$eight')"); 

} 


mysql_close(); 
?> 

Что, черт возьми, я делаю неправильно?

+1

читать эту http://stackoverflow.com/questions/17498216/can-i-mix-mysql-apis-in-php –

+0

плюс, я даже дал вам ссылку в вашем другом вопросе, который является проверенным методом. почему ты его не использовал? –

+0

вы также используете ключевое слово 'list' MySQL как функцию, и это само по себе вызовет проблемы. мы также не знаем, откуда происходит '$ name'. –

ответ

9

Здесь не так уж много вещей.

Вы используете ключевое слово MySQL list как функцию, и это само по себе вызовет проблемы.

Sidenote: Да, я знаю, что это не «зарезервирован» слово, это «ключевое слово» и MySQL обрабатывает ключевые слова особенно, если использовать в качестве функции, которая является то, что вы делаете сейчас в вашем втором запросе и это способ, которым MySQL интерпретирует его как; функция, а не имя декларации таблицы.

Я предлагаю переименовать эту таблицу в списки, или обернуть его в клещах.

Вы также смешиваете MySQL API/функции MySQL, которые не смешиваются.

Таким образом, ваш новый код будет читаться,
, понижая $selected = mysql_connect('christmas', $dbhandle);

$query = mysqli_query($dbhandle, "SELECT * FROM `list` WHERE name='$name'") 
     or die (mysqli_error($dbhandle)); 

if(mysqli_num_rows($query) > 0){ 
    echo 'that name already exists'; 
}else{ 
    mysqli_query($dbhandle, "INSERT INTO `list` (name, one, two, three, four, five, six, seven, eight) 
       VALUES ('$name' , '$one' , '$two' , '$three' , '$four' , '$five' , '$six', '$seven' , '$eight')") 
       or die (mysqli_error($dbhandle)); 

} 


mysqli_close($dbhandle); 

Ваш код также открыт для инъекции SQL. Используйте подготовленное заявление.

Теперь, мы не имеем ни малейшего представления о том, где все ваши переменные как.

Использовать отчет об ошибках.


Я также предлагаю вам использовать условный empty() для ваших переменных/входов.

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

т.е .:

if(!empty($var)){...} 

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

+0

о да. выложите его там как контрольный список. Check 'em off OP – Drew

+0

@Drew Yepper ;-) –

+0

вы пропустили обратные вызовы в 'SELECT * FROM list ...' – Sean

1

Вы смешиваете mysql и mysqli.

Попробуйте ввести код.

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = "root"; 
$dbname = "christmas"; 

// Create connection 
$dbhandle = mysqli_connect ($servername, $username, $password, $dbname) or die ("could not connect to database"); 

$query = mysqli_query($dbhandle, "SELECT * FROM list WHERE LOWER(name) = LOWER('$name') "); 
if(mysqli_num_rows($query) > 0){ 
    echo 'that name already exists'; 
}else{ 
    mysqli_query($dbhandle, "INSERT INTO list(name, one , two, three, four, five, six, seven, eight) VALUES ('$name' , '$one' , '$two' , '$three' , '$four' , '$five' , '$six', '$seven' , '$eight')"); 

} 

mysqli_close($dbhandle); 
?> 
+0

что не так с исходным запросом '' SELECT * FROM list WHERE name = '$ name' "' –

+0

@ arif_suhail_123 нет ничего плохого в '' SELECT * FROM list WHERE name = '$ name' "', но используя 'LIKE' и 'LOWER' даст более точный результат. – Suyog

+1

Это можно считать предложением, а не исправить .. :-) – Suyog

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