使用 PHP 检查数据是否已在 PSQL 数据库中
Checking to see if data is already in a PSQL database Using PHP
我有一个注册网页,它使用 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();
}
}
}
?>
谁能帮帮我?
非常感谢
戴夫
$uid 需要用单引号括起来,因为它是字符串。
所以这应该有效:
$sql = "SELECT * FROM users WHERE user_uid='$uid'";
您也可以尝试使用准备好的语句,这样您就不必对字符串使用单引号,而是将数据类型作为参数传递(通常是 string
或 integer
)。它还将保护您免受 SQL 注入,这是针对您的代码易受攻击的网站的常见攻击类型。
在 PHP 中,使用准备语句的流行方式是 PDO:http://php.net/manual/en/pdostatement.bindvalue.php
我有一个注册网页,它使用 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();
}
}
}
?>
谁能帮帮我? 非常感谢 戴夫
$uid 需要用单引号括起来,因为它是字符串。 所以这应该有效:
$sql = "SELECT * FROM users WHERE user_uid='$uid'";
您也可以尝试使用准备好的语句,这样您就不必对字符串使用单引号,而是将数据类型作为参数传递(通常是 string
或 integer
)。它还将保护您免受 SQL 注入,这是针对您的代码易受攻击的网站的常见攻击类型。
在 PHP 中,使用准备语句的流行方式是 PDO:http://php.net/manual/en/pdostatement.bindvalue.php