防止重复条目 sql php
prevent duplicate enteries sql php
我在数据库系统上工作,我正在努力避免重复输入电子邮件和用户名。我已经尝试过,但它仍然被拒绝,但无法确切地看到被拒绝的内容。
谁能告诉我哪里错了?
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.";
}
}
您好,如果电子邮件和用户名列设置了 UNIQUE KEY,请检查您的 mysql table 定义。没有这个标志 table 仍然接受所有电子邮件和用户名。
如果发生不好的事情,也尝试获取信息。
if (!$result) {
die('Invalid query: ' . mysql_error());
}
我制定这个答案只是为了向您展示检查重复项和插入的基础知识。
您最终应该在给定的列上设置 UNIQUE 约束,并根据错误结果使用条件语句。
请参阅下面关于安全性的脚注。
旁注 #1: 如果您不想检查电子邮件和用户名是否都存在,您可以删除 OR Username= '".$username."'
。
旁注 #2: - 我不确定您的列名是否大小写混合,因此您可能需要做一些调整。
- 电子邮件或电子邮件 - 密码或密码 - 用户名或用户名
旁注 #2: - 确保所有元素都包含 name 属性并且表单确实使用了 POST 方法。
先查询,如果user/email不存在,则执行INSERT。
假设您已经建立了 DB connection:(请参阅 "Establishing a DB connection" 下脚注下方的其他注释)。
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$query = "SELECT * FROM users
where email='".$email."'
OR Username= '".$username."'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0){
echo "A record already exists.";
exit;
}
else{
$insert = mysql_query("INSERT into users (email, Username, Password)
VALUES ('".$email."','".$username."', '".$password."')");
}
if($insert){
echo "Success";
}
else{
echo "There was an error " . mysql_error();
}
mysql_close();
} // brace for if(isset($_POST['submit']))
你也可以替换
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
和
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);
在您开始使用准备好的语句之前增加一些安全性。
脚注:
关于安全。
不要使用旧的 mysql_
API,也不应该以纯文本格式存储密码。
使用mysqli
with prepared statements, or PDO with prepared statements。
密码存储,使用CRYPT_BLOWFISH or PHP 5.5's password_hash()
函数。
对于 PHP < 5.5 使用 password_hash() compatibility pack
.
将错误报告添加到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告只应在试运行中进行,绝不能在生产中进行。
正在建立数据库连接:
即来自 mysql_select_db()
的手册:
$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());
}
只需将您的 table 电子邮件和用户名列的结构设置为 UNIQUE
那么一切都会好起来的。
如果您尝试插入重复数据
它不会插入并且 mysql_query 将 return false
创建 table...
CREATE TABLE table_name (
column_name data_type(size) constraint_name
)
...您可以像这样使用 UNIQUE
约束:
CREATE TABLE table_name (
column_name data_type(size) UNIQUE
)
此约束不区分大小写,这意味着“UsErNaMe”和“用户名”被视为相同。
单击 here 了解有关此约束的详细信息。
我在数据库系统上工作,我正在努力避免重复输入电子邮件和用户名。我已经尝试过,但它仍然被拒绝,但无法确切地看到被拒绝的内容。 谁能告诉我哪里错了?
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.";
}
}
您好,如果电子邮件和用户名列设置了 UNIQUE KEY,请检查您的 mysql table 定义。没有这个标志 table 仍然接受所有电子邮件和用户名。
如果发生不好的事情,也尝试获取信息。
if (!$result) {
die('Invalid query: ' . mysql_error());
}
我制定这个答案只是为了向您展示检查重复项和插入的基础知识。
您最终应该在给定的列上设置 UNIQUE 约束,并根据错误结果使用条件语句。
请参阅下面关于安全性的脚注。
旁注 #1: 如果您不想检查电子邮件和用户名是否都存在,您可以删除 OR Username= '".$username."'
。
旁注 #2: - 我不确定您的列名是否大小写混合,因此您可能需要做一些调整。
- 电子邮件或电子邮件 - 密码或密码 - 用户名或用户名
旁注 #2: - 确保所有元素都包含 name 属性并且表单确实使用了 POST 方法。
先查询,如果user/email不存在,则执行INSERT。
假设您已经建立了 DB connection:(请参阅 "Establishing a DB connection" 下脚注下方的其他注释)。
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$query = "SELECT * FROM users
where email='".$email."'
OR Username= '".$username."'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0){
echo "A record already exists.";
exit;
}
else{
$insert = mysql_query("INSERT into users (email, Username, Password)
VALUES ('".$email."','".$username."', '".$password."')");
}
if($insert){
echo "Success";
}
else{
echo "There was an error " . mysql_error();
}
mysql_close();
} // brace for if(isset($_POST['submit']))
你也可以替换
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
和
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);
在您开始使用准备好的语句之前增加一些安全性。
脚注:
关于安全。
不要使用旧的 mysql_
API,也不应该以纯文本格式存储密码。
使用mysqli
with prepared statements, or PDO with prepared statements。
密码存储,使用CRYPT_BLOWFISH or PHP 5.5's password_hash()
函数。
对于 PHP < 5.5 使用 password_hash() compatibility pack
.
将错误报告添加到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告只应在试运行中进行,绝不能在生产中进行。
正在建立数据库连接:
即来自 mysql_select_db()
的手册:
$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());
}
只需将您的 table 电子邮件和用户名列的结构设置为 UNIQUE 那么一切都会好起来的。 如果您尝试插入重复数据 它不会插入并且 mysql_query 将 return false
创建 table...
CREATE TABLE table_name (
column_name data_type(size) constraint_name
)
...您可以像这样使用 UNIQUE
约束:
CREATE TABLE table_name (
column_name data_type(size) UNIQUE
)
此约束不区分大小写,这意味着“UsErNaMe”和“用户名”被视为相同。
单击 here 了解有关此约束的详细信息。