我正在尝试编写注册表单,当用户按下“提交”按钮时,我想检查用户名是否已经存在 - 如果是,则显示一个弹出窗口,显示“用户名”已经存在 - 请改变它“。 当用户使用Javascript关闭该弹出窗口时 - 我希望用户插入的其余字段留在他们的位置(我的意思是,只删除用户名 - 但是例如,名字将保留)< / p>
这是我写的代码:
$con=mysqli_connect("localhost","root","","shnitzale");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$check="SELECT count (username) as num FROM registered_clients WHERE username=$_GET[User]";
if (!mysqli_query($con, $check))
{
echo "Username already exist";
}
else
{
$sql="INSERT INTO registered_clients (Username, Password, First_name, Last_name,
Day, Month, Year, Gender, Address, City, Phone_Number1, Phone_number2, Email)
VALUES
('$_GET[User]','$_GET[Password]','$_GET[Fname]','$_GET[Lname]','$_GET[Day]',"
. "'$_GET[Month]','$_GET[Year]','$_GET[gender]','$_GET[Address]','$_GET[City]',"
. "'$_GET[Phone1]','$_GET[Phone2]','$_GET[Email]')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "Thank you $_GET[Fname] $_GET[Lname]";
}
mysqli_close($con);
所有这些都是在我按下“提交”按钮后转到的单独的php文件中, 我知道在进入此页面之前需要检查用户名验证,但我真的不知道如何... 谢谢!
答案 0 :(得分:0)
由于这个原因,您当前的用户名检查无效:
if (!mysqli_query($con, $check))
{
echo "Username already exist";
}
这永远不会发生。即使找不到用户名,您当前的查询也将始终返回有效结果。 num
只是0。
这是一种方法:
$username = mysqli_real_escape_string($con, $_GET['User']); // Do some minimal sanitization at least!
$check = "SELECT username FROM registered_clients WHERE username='$username'";
$result = mysqli_query($con, $check);
if(mysqli_num_rows($result)) {
echo "Username already exists";
}
通过这种方式,您可以提取找到的实际用户名并对其进行计数。或者,您仍然可以使用count (username) as num
查询,但之后您必须获取查询结果并查看num
的值。
请注意,您的INSERT
查询对SQL注入仍然是开放的。在查询中使用它们之前,您需要清理所有这些$_GET
参数。
答案 1 :(得分:0)
您需要AJAX http://www.w3schools.com/ajax/并检查,如果用户名可用而不加载其他页面,或者您可以将注册表单的操作设置到注册页面并再次插入所有有效的表单数据。
不要忘记在以前清理用户数据!
答案 2 :(得分:0)
如果你想用ajax这样做:创建一个单独的页面(现在生病了)usercheck.php
/*
$database_connection = database connection and stuff
Also, does your table have a primary key 'id'? I'd highly recommend it.
*/
$username = mysqli_real_escape_string($database_connection, $_GET['username']; // Use $_GET or $_POST depending on the AJAX request.
if (strlen($username) > 3){ // Only check if the username string is bigger than 4 characters. No point in checking an empty username.
$UserCheck = mysqli_query("SELECT id FROM registered_clients WHERE username = '$username' LIMIT 1");
if (mysqli_num_rows($UserCheck) > 0){
die('<p style="color: red;">The username '.$username.' is already taken.</p>');
} else {
die('<p style="color: green;">The username '.$username.' is available.</p>');
}
}
如果您将AJAX请求定位到 usernamecheck.php?username = superman 并直接在用户名字段下显示该页面的输出,则用户将从服务器获得实时更新。
您还可以将脚本的输出更改为1或0,以便您可以在javascript中选择它。