我似乎无法防止重复名称输入

时间:2015-11-05 04:20:13

标签: php mysql

好的,所以我现在已经有一段时间了。 我想要实现的是阻止人们创建在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();
?>

我到底做错了什么?

2 个答案:

答案 0 :(得分:9)

这里有很多不妥之处。

您使用MySQL关键字list作为一项功能,仅此一项就会导致您遇到问题。

旁注:是的,我知道它不是&#34;保留&#34;单词,它是一个&#34;关键字&#34;如果用作函数,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);

您的代码也可以进行SQL注入。使用准备好的声明。

现在,我们不知道所有变量的来源。

使用错误报告。

我还建议您使用条件empty()作为变量/输入。

否则,您可能还会收到MySQL可能抱怨的其他错误。

即:

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

最终并确保数据库中没有重复条目,您可以设置UNIQUE约束。

答案 1 :(得分: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);
?>