好的,所以我现在已经有一段时间了.我想要实现的是阻止人们创建在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>
Run Code Online (Sandbox Code Playgroud)
这是我的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();
?>
Run Code Online (Sandbox Code Playgroud)
我到底做错了什么?
这里有很多不妥之处.
您正在使用MySQL关键字list作为函数,仅此一项将导致您遇到问题.
旁注:是的,我知道它不是一个"保留"字,它是一个"关键字",如果用作函数,MySQL特别关注关键字,这就是你现在在第二个查询中所做的事情,并且是MySQL的方式将其解释为; 函数而不是表声明名称.
我建议你将该表重命名为列表,或将其包装在刻度线中.
您还混合了不混合的MySQL API /函数.
所以,你的新代码将作为阅读,
而下降$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);
Run Code Online (Sandbox Code Playgroud)
您的代码也可以使用SQL注入.使用准备好的声明.
现在,我们不知道你的变量来自哪里.
使用错误报告.
我还建议你empty()为变量/输入使用条件.
否则,您可能还会收到MySQL可能会抱怨的其他错误.
即:
if(!empty($var)){...}
Run Code Online (Sandbox Code Playgroud)
最终并确保数据库中没有重复条目,您可以设置UNIQUE约束.