问:我如何检查电子邮件是否存在,我有此代码,但无法正常工作
<?php
include "Config.php";
function mksafe($data){
$data=trim($data);
$data=strip_tags($data);
$data=htmlspecialchars($data);
$data=addslashes( $data);
return $data;
}
$fname = mksafe($_POST["fname"]);
$lname = mksafe($_POST["lname"]);
$email = mksafe($_POST["email"]);
$sql = "SELECT * FROM `users` WHERE `email`=$email";
$result = $conn->query($sql);
if($result->num_rows >= 1) {
echo "Email already exist.";
} else {
$sql = "INSERT INTO users (fname, lname, email,reg_date)
values(' $fname', '$lname',' $email',now())";
if ($conn->query($sql) === TRUE){
header("Refresh:0; url=index.php");
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
$conn->close();
答:因此,我看到您正在从表单中输入名字,姓氏和电子邮件地址。然后,您要对数据进行清理以准备将其用于MySQL语句。
但是,您的SQL语句需要这样加上引号$email:
$sql = "SELECT * FROM `users` WHERE `email` = '$email'";
然后,您正在使用该SQL语句查询数据库,如果存在一行,则说确实存在,如果没有,则看起来在单引号和变量之间有一些多余的空格,它们不应该。第18/19行应显示为:
$sql = "
INSERT INTO `users` (fname, lname, email, reg_date)
VALUES ('$fname', '$lname', '$email', NOW())
";
答:该代码有效,尽管我会警告您有关在SQL中包含变量的问题。准备好的声明会更安全。
顺便说一句,不知道您的其余代码是什么样子,我只能提供您检查对“ if”语句的输入是否符合您的期望。尝试在第13行之后转储sql语句,添加以下内容:
print_r($ sql); die();