我有一个注册网页,该网页使用PHP连接到postgres数据库。
数据库如下:
id | first_name | last_name | email | uid | pwd
----+------------+-----------+--------------------+-------+------
9 | David | Jones | davidjones@one.com | admin | 111
10 | John | Stone | js@bbb.com | 5 | 222
11 | a | Stone | js@ccc.com | admin | 333
12 | David | f | js@ccc.com | admin | 4444
我想检查在网页中输入uid(用户名)时是否检查uid以查看是否已经使用过。 我正在创建的代码如下(所有其他检查空字段的电子邮件有效,输入工作仅用户名检查不起作用):
<?php
if (isset($_POST['submit']))
include_once 'dbh.inc.php';
$first = ($_POST[first]);
$last = ($_POST[last]);
$email = ($_POST[email]);
$uid = ($_POST[uid]);
$pwd = ($_POST[pwd]);
// valadate the sign up form
// check for empty fields
if (empty($first) || empty($last) || empty($email) || empty($uid) || empty($pwd)) {
header("Location: ../signup.php?signup=empty");
exit();
}else{
//check if email is valid
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
header("Location: ../signup.php?signup=invalidemail");
exit();
} else {
// check to see if user name is already been used
$sql = "SELECT * FROM users WHERE user_uid=$uid";
$result = pg_query($sql);
$resultCheck = pg_numrows($result);
if ($resultCheck > 0){
header("Location: ../signup.php?signup=usertaken");
exit();
} else {
// insert data into users table
$query="INSERT INTO users (first_name,Last_name,email,uid,pwd) VALUES ('$_POST[first]','$_POST[last]','$_POST[email]','$_POST[uid]','$_POST[pwd]')";
$result = pg_query($query);
// go back to the sign up page
header("Location: ../signup.php");
exit();
}
}
}
?>
有人可以帮助我吗? 非常感谢 戴夫
答案 0 :(得分:1)
您需要在$ uid周围使用单引号,因为它是字符串。 所以这应该工作:
$sql = "SELECT * FROM users WHERE user_uid='$uid'";
您也可以尝试使用预备语句,然后不必在字符串中使用单引号,而可以将数据类型作为参数(通常为string
或integer
)传递。它还可以保护您免受SQL注入的攻击,这是针对您的代码容易受到攻击的网站的常见攻击类型。
在PHP中,使用预准备语句的流行方式是PDO:http://php.net/manual/en/pdostatement.bindvalue.php