防止重复输入sql php - 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约束,并根据错误结果使用条件语句。

请参考以下有关安全性的脚注。

旁注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 statementsPDO 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…