Php mysql-要创建错误吗

Php mysql-要创建错误吗,php,mysql,Php,Mysql,我是编程和php新手,我想在我的注册系统上创建一个错误,当用户使用数据库中已经存在的相同用户名创建一个帐户时,它会这样说:“用户名已经在使用中”,如果不是现有用户名,它会说“注册完成” 我尝试了以下代码: <? require ("conect.php"); $user = $_POST['user']; $pass = $_POST['password']; $email = $_POST['email']; $email_check = $_POST['email_check'

我是编程和php新手,我想在我的注册系统上创建一个错误,当用户使用数据库中已经存在的相同用户名创建一个帐户时,它会这样说:“用户名已经在使用中”,如果不是现有用户名,它会说“注册完成”

我尝试了以下代码:

<?
require ("conect.php");

$user = $_POST['user'];

$pass = $_POST['password'];

$email = $_POST['email'];

$email_check = $_POST['email_check'];


$register = mysql_fetch_array; 




if($user = $register[user]) {
echo"Username already in use";
}
else
{

$insert = mysql_query("INSERT INTO registration (user, password, email)
        VALUES('$_POST[user]','$_POST[password]','$_POST[email]')");

    echo "The account $user was successfully created.";

}

?>

你真的,真的需要了解。您使用的方法非常陈旧,非常不安全,按照今天的标准,这通常是一种糟糕的做法

由于这些原因,您的代码甚至不值得修复,应该使用准备好的语句重新编写

  • 正如其他用户所指出的,您应该通过PDO(或mysqli,但我肯定更喜欢PDO)使用准备好的语句

  • 您将POST存储在变量中,但在数据库查询中您只是再次使用$\u POST变量


  • 我不确定您对
    $register=mysql\u fetch\u array
    部分做了什么,但要获得所需的功能,您应该使用select查询来计算使用用户名的用户数

  • 您没有使用任何安全哈希格式来存储密码。我将其切换为使用密码\u hash()

  • 尝试类似的方法(虽然我还没有测试代码,所以可能会有错误):

    
    
    $register=mysql\u fetch\u数组你觉得这有什么用?很好。享受您的服务器+站点pwn3d。您需要查找有关如何选择数据的PHP教程。您的想法是正确的,但这里的语法是错误的-您希望从表中选择最少数量的数据,其中username=posted username,如果返回,则它存在,如果不存在,则插入(您的insert查询很好,但这是一个主要的安全风险-您需要使用
    mysqli\u real\u escape\u string
    htmlentities
    等来转义已发布的变量)问题标题表明您打算创建一个错误。这还不算很接近。找到一个好的教程并遵循它,然后再试一次。不要使用
    mysql\u*
    -这些函数已被弃用。选择
    mysqli
    PDO
    。我并没有试图创建一个安全的网站,事实上,我正在使用一个免费主机进行测试关于php。不过还是要感谢您的帮助,我会查看只有PHP5.5才出现的链接
    password\u hash()
    ,这在很多托管服务器上还不可用。
    <?php
    
        //Put all POSTS in variables
        $user                 = $_POST['user'];
        $pass                 = password_hash($_POST['password'], PASSWORD_DEFAULT);
        $email                = $_POST['email'];
        $email_check          = $_POST['email_check'];
    
        //Database config- probably should store in a separate file
        $database_host        = "";
        $database_name        = "";
        $database_user        = "";
        $database_password    = "";
    
        $conn = new PDO("mysql:host=$database_host;dbname=$database_name",$database_user,$database_password);
    
        //Find out if the username is taken.
        $sql = "SELECT count(*) FROM `registration` WHERE user = :user"; 
        $q = $conn->prepare($sql); 
        $q->execute(array(':user' => $user)); 
        $number_of_rows = $q->fetchColumn();
    
        //Clear $sql and $q so you can use them again
        $sql = NULL;
        $q   = NULL;
    
        if ($number_of_rows > 1) {
    
            //Username already taken
            echo "Username already taken";
    
        } 
        else {
    
            $sql = "INSERT INTO registration (user,password,email) VALUES (:user,:password,:email)";
            $q = $conn->prepare($sql);
            $q->execute(array(':user'=>$user, ':password'=>$password, ':email'=>$email));
    
            echo "The account " . $user . " was successfully created";
    
        }
    ?>