防止重复输入sql php

防止重复输入sql php,php,sql,duplicates,Php,Sql,Duplicates,我正在一个数据库系统上工作,我正在努力避免电子邮件和用户名的重复条目。我已经尝试过了,但仍然是拒绝,但无法确切看到拒绝的内容。 有人能告诉我我错在哪里吗 if(isset($_POST['submit'])){ $username = $_POST['username']; $password = $_POST['password']; $email = $_POST['email']; $sql="INSERT into users (username,password,email) VA

我正在一个数据库系统上工作,我正在努力避免电子邮件和用户名的重复条目。我已经尝试过了,但仍然是拒绝,但无法确切看到拒绝的内容。 有人能告诉我我错在哪里吗

if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];

 $sql="INSERT into users (username,password,email) VALUES('$username','$password','$email')";

 $result = mysql_query("INSERT INTO users VALUES ('duplicate')");

 if (!$result) {
echo "Enter a different value";
 } else {
echo "Save successful.";

}
}

如果电子邮件和用户名列设置了唯一的键,请检查mysql表定义。如果没有此标志,表仍然接受所有电子邮件和用户名

如果发生了不好的事情,也要设法获取信息

if (!$result) {
    die('Invalid query: ' . mysql_error());
}

我制定这个答案只是为了向您展示检查重复项和插入的基础知识

您最终应该在给定的列上设置唯一约束,并根据错误结果使用条件语句

关于安全问题,请参阅我下面的脚注

旁注1:如果不想检查电子邮件和用户名是否都存在,可以删除或Username='.$Username'

旁注2:我不确定你的列名是否大小写混合,所以你可能需要做一些调整

电子邮件或电子邮件-密码或密码-用户名或用户名 旁注2:-确保所有元素都具有name属性,并且表单确实使用了POST方法

首先查询,然后如果用户/电子邮件不存在,则执行插入

假设您已经建立了一个数据库连接:请参阅脚注下面的“建立数据库连接”下的其他注释

您还可以替换

$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];

在您开始使用准备好的语句之前,您需要增加一些安全性

脚注:

关于安全

不要使用旧的mysql_uAPI,也不应该以纯文本形式存储密码

使用,或

对于密码存储,请使用或PHP5.5的函数

对于小于5.5的PHP,请使用

将错误报告添加到文件顶部,这将有助于查找错误

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

只需将电子邮件和用户名表列的结构设置为“唯一” 那么一切都会好起来的。 如果您试图插入重复数据
当创建表时,它不会插入,mysql\u查询将返回false

CREATE TABLE table_name (
  column_name data_type(size) constraint_name
)
…您可以像这样使用唯一约束:

CREATE TABLE table_name (
  column_name data_type(size) UNIQUE
)
此约束不区分大小写,这意味着“用户名”和“用户名”被认为是相同的


单击以获取有关此约束的详细信息。

设置唯一约束或使用mysql\u num\u rows或COUNT。另外,不要以明文形式存储密码;危险。首先使用select检查用户名!然后试着在后面插入它!唯一的约束是唯一可以接受的。numrows/count异常,可能/将导致问题。那么您的查询是错误的$result=mysql\u queryINSERT INTO users value'duplicate';,它几乎不起作用。删除它并执行$sql=mysql\u queryINSERT。。。那么如果$sql{并查找我在上面给您的函数。很抱歉,我无法将其发布在注释中,希望您查看代码。我将确保我不会在下一次遇到此错误时出错。您的SQL语法中有错误;请查看与MySQL服务器版本对应的手册,以获取在第行附近使用的正确语法2@zahid 我有点这样认为。我之前注意到了错误,你可能没有注意到我所做的编辑;我在插入中忘记了一个右括号。再次重新加载答案并重新复制。哦,是的,我认为它看起来有点奇怪。谢谢添加用户,但电子邮件没有显示在数据库中。是的blank@zahid顺便说一句:你可以接受这个答案,这对你有多大帮助最重要的是,它解决了您的问题!您可能想花2分钟的时间来了解它的工作原理:@zahid它是空的,因为它没有包含在查询中。只需按照相同的方法添加它。将用户名、密码更改为电子邮件、用户名、密码和“$Username.”、“$Password.”更改为“$email.”、“$Username.”、“$Password.”更改为“$email.”、“$Username.”、“$Password.”
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Not connected : ' . mysql_error());
}

// make foo the current db
$db_selected = mysql_select_db('foo', $link);
if (!$db_selected) {
    die ('Can\'t use foo : ' . mysql_error());
}
CREATE TABLE table_name (
  column_name data_type(size) constraint_name
)
CREATE TABLE table_name (
  column_name data_type(size) UNIQUE
)