我正在数据库系统上工作,并且尝试避免重复输入电子邮件和用户名。我已经尝试过,但它仍然是拒绝项,但无法确切看到被拒绝的内容。
有人可以告诉我我错了吗?
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约束,并根据错误结果使用条件语句。
请参考以下有关安全性的脚注。
旁注1:如果不想检查电子邮件和用户名是否都存在,可以删除OR Username= '".$username."'
。
旁注2:-我不确定您的列名是否大小写混合,因此您可能需要进行一些调整。
电子邮件或电子邮件-密码或密码-用户名或用户名
旁注2:-确保所有元素都具有name属性,并且表单确实使用POST方法。
首先查询,然后如果用户/电子邮件不存在,请执行INSERT。
假设您已经建立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或PDO with prepared statements。
对于密码存储,请使用CRYPT_BLOWFISH或PHP 5.5的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());
}
PHP strtotime困境 - php有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00…
PHP-全局变量的性能和内存问题 - php假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…
php-casperjs获取内部文本 - php我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…
php:拆分字符串,直到第一次出现数字 - php我有像cream 100G sup 5mg Children 我想在第一次出现数字之前将其拆分。所以结果应该是array( array('cream','100G'), array('sup','5mg Children') ); 可以告诉我如何为此创建图案吗?我试过了list(…
将大字符串分成多个小字符串-PHP - php我从数据库中获取了一个长字符串,我需要对其进行解析,以使其不包含一个大字符串,而是多个,其中每个字符串都有2个字符。让我们以示例为例:我连接到表,获取此字符串:B1C1F4G6H4I7J1J8L5O6P2Q1R6T5U8V1Z5,之后,我必须对字符串进行解析,因此:B1 C1 F4 G6 H4 I7 J1 J8 L5 O6 P2 Q1 R6 T5 U8 V1…