添加';检查用户名';注册表格PHP


Adding a 'check username' to registration form PHP

请有人给我一些急需的指导。。。

我有一个注册表,但我需要添加一个条件,即如果用户名已经在表中,则会出现一条消息。除了不断添加到SQL表之外,我已经尝试过几次了。

任何帮助都将不胜感激。这是我当前的代码:

提前感谢!

    <?php
    session_start();session_destroy();
    session_start();
    $regname = $_GET['regname'];
    $passord = $_GET['password'];
    if($_GET["regname"] && $_GET["regemail"] && $_GET["regpass1"] && $_GET["regpass2"] )
    {
        if($_GET["regpass1"]==$_GET["regpass2"])
{
    $host="localhost";
    $username="xxx";
    $password="xxx";
    $conn=  mysql_connect($host,$username,$password)or die(mysql_error());
    mysql_select_db("xxx",$conn);
    $sql="insert into users (name,email,password) values('$_GET[regname]','$_GET[regemail]','$_GET[regpass1]')";
    $result=mysql_query($sql,$conn) or die(mysql_error());
    print "<h1>you have registered sucessfully</h1>";
    print "<a href='login_index.php'>go to login page</a>";
}
    else print "passwords don't match";
    }
    else print"invaild input data";
    ?>

用户kingkero提供了一个很好的方法。您可以修改表,使用户名字段为UNIQUE,因此表中不能包含用户名重复的行。

然而,如果您无法修改表或出于其他原因想要选择不同的方法,您可以首先尝试在表上运行选择,检查结果并采取相应行动:

$result=mysql_query('SELECT name FROM users WHERE name="'.$_GET['regname'].'"');
$row = mysql_fetch_row($result);

然后,您可以检查$row是否包含用户名:

if($row['name']==$_GET['regname'])

如果此语句返回true,那么您可以向用户显示一条消息,并告诉他选择不同的用户名。

请注意

使用直接来自客户端(或浏览器)的变量(如$_GET['regname']中可能存储的变量)并使用它们来构建SQL语句被认为是不安全的(请参阅维基百科上关于SQL注入的文章)。

你可以使用

$regname=mysql_escape_string($_GET['regname'])

以确保其安全。

首先,第二行出现了一些混乱:

session_start();session_destroy();
session_start();

你为什么这么做?只需要一个session_start();

然后你可以通过简单的SQL查询找到用户:

$sql="SELECT * FROM users WHERE name = '$regname'";
$result=mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($result) > 0) {
    //...echo your message here
}

当您得到它时,我建议您使用PDO和param数据绑定来重写代码,以防止SQL注入和使用过时的函数。