我创建了一个脚本供用户使用电子邮件地址邀请朋友,电子邮件地址和随机生成的10个字符串'inviteCode'被发送到名为'referrals'的表。
受邀人员会收到一封电子邮件,其中包含一个包含其电子邮件及其唯一的inviteCode的URL链接; http://website.com/register.php?email=email&inviteCode=1234567890
当用户点击链接时,页面register.php应该检查URL以及它们的数据在'referrals'表中是否有效。如果是,那么我有一个包含行来添加注册表单,如果没有,那么它们被重定向。重点是没有人可以访问register.php,除非他们被邀请并发送了链接。
此时页面会一直重定向到index.php;
Register.php脚本:
<?php
include 'config.php';
if (isset($_GET['email'],$_GET['inviteCode'])) {
$mysqli = new Mysqli(/* your connection */);
$email = $mysqli->real_escape_string($_GET['email']);
$inviteCode = $mysqli->real_escape_string($_GET['inviteCode']);
$sql = "SELECT email,inviteCode FROM referrals WHERE email='".$email."' AND inviteCode='".$inviteCode."'";
$query = $mysqli->query($sql);
if ($query->num_rows > 0) { //check if values are correct and available in database
echo 'lol';
}
else
{
echo 'no';
exit;
}
}
else
{
echo 'problem'; //Page not accessible if neither email nor referral entered
}
?>
我将第一个if语句替换为:
if(!isset($_GET['email']) || !isset($_GET['inviteCode'])) {
die(header('Location: index.php'));
} else
我收到一个没有错误的空白页面。我相信电子邮件可能有问题,邀请代码没有设置。
对此有任何帮助将非常感谢(Y)谢谢。
答案 0 :(得分:0)
你应该首先考虑处理错误。尝试这样的事情:
if(!isset($_GET['email']) || !isset($_GET['inviteCode'])) {
die(header('Location: index.php'));
} else {
$mysqli = new Mysqli(/* your connection */);
$email = $mysqli->real_escape_string($_GET['email']);
$inviteCode = $mysqli->real_escape_string($_GET['inviteCode']);
$sql = "SELECT email,inviteCode FROM referrals WHERE email='$email' AND inviteCode='$inviteCode'";
$query = $mysqli->query($sql);
if ($query->num_rows > 0) { //check if values are correct and available in database
include'register-form.php';
} else {
die(header('Location: index.php'));
}
}
<强>击穿强>
if
块会检查GET[email]
或GET[inviteCode]
是否 设置。如果是这种情况,请使用die()
终止该应用并将用户重定向至index.php
。
第二个变化是这一行:
if ($query->num_rows > 0) {
这将检查以确保返回的行超过 0
(意味着实际上返回了行。)因为您之前只测试了$query->num_rows
的存在
另一个注意事项:
打开错误报告,它会在调试过程中帮助您:
ini_set('display_errors', 1);
error_reporting(E_ALL);
你也可以改变你的sql查询来选择COUNT(id)
并检查它是否大于0,但这对你正在尝试做的事情来说似乎有些过分。
答案 1 :(得分:0)
执行此操作以查明查询是否返回任何内容:
首先确保与数据库的连接成功:
$mysqli = new Mysqli(/* your connection */);
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
$email = $mysqli->real_escape_string($_GET['email']);
添加,然后告诉我们之后的结果,还提供特定的错误消息。
要调试num_rows,请将其替换为:
$query = $mysqli->query($sql);
if ($query->num_rows) //check if values are correct and available in database
{
include'register-form.php';
}
有了这个:
$query = $mysqli->query($sql);
$count = $query->num_rows;
print $count;
exit;
if ($query->num_rows) //check if values are correct and available in database
{
include'register-form.php';
}
如果显示0,我怀疑这是因为你的sql语句需要连接。
"SELECT email,inviteCode FROM referrals WHERE email='".$email."' AND inviteCode='".$inviteCode."'";