-3

我是编程和 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.";

}

?>

但它没有用,有人可以帮忙吗

4

2 回答 2

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

  2. 您将 POSTS 存储在变量中,但是在数据库查询中您只是再次使用 $_POST 变量?

  3. 我不确定你对这$register = mysql_fetch_array部分做了什么,但要获得所需的功能,你应该使用选择查询来计算使用用户名的用户数量。

  4. 您没有使用任何安全的哈希格式来存储密码。我将其切换为使用 password_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";

    }
?>
于 2013-10-10T22:13:30.327 回答
1

你真的,真的需要阅读准备好的陈述。您使用的方法非常陈旧,非常不安全,并且按照今天的标准通常是一种不好的做法。

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

于 2013-10-10T21:49:29.950 回答