请有人给我一些急需的指导。。。
我有一个注册表,但我需要添加一个条件,即如果用户名已经在表中,则会出现一条消息。除了不断添加到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注入和使用过时的函数。