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