我创建了一个邀请/推荐系统,允许用户通过输入电子邮件地址邀请某人,电子邮件和随机邀请代码存储在'推荐'表。然后,通过电子邮件和URL链接中唯一的10个字符的邀请代码向该人发送电子邮件,例如www.website.com/register.php?email=(EMAILADDRESS)及invite_code = 1234567890
我已对此进行了测试,即使使用有效的URL链接,用户仍会重定向到index.php页面。 (这也不会阻止用户手动访问register.php)
表详情='推介' ID |网址|点击|电子邮件| inviteCode
我已经设法让页面重定向,但如果他们的电子邮件有实际的邀请代码,那就不好了。
这是我过去几天修改的脚本,试图让它起作用:
<?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) //check if values are correct and available in database
{
header('Location: register.php');
}
else
{
header('Location: index.php');
exit;
}
}
else
{
header('Location: index.php'); //Page not accessible if neither email nor referral entered
}
?>
应该是直截了当的,请查看电子邮件的网址&#39; &安培; &#39; inviteCode&#39;如果已被邀请,则与表进行比较,如果不重定向,则允许访问该页面。 &LT;通过更新,它们应该重定向到register.php或index.php。如果没有邀请访问,这不会停止访问register.php。
答案 0 :(得分:1)
假设问题中的脚本名为register.php
且脚本命中此行:
header('Location: register.php');
浏览器会将用户重定向回同一页面,这次查询字符串将不包含电子邮件并注册验证码。此时,register.php
脚本将重定向到index.php页面(使其看起来像验证失败)。
当您的电子邮件地址和身份验证代码有效时,您要做的是将用户重定向到welcome.php
。
welcome.php可能包含以下内容:
<?php
echo 'Your invitation was validated';
并在register.php中更改
header('Location: register.php');
至
header('Location: welcome.php');
答案 1 :(得分:0)
我知道这是一个3岁的问题,但您的代码中仍有一些明显的错误。
例如
你说网址是www.website.com/register.php?email=(emailaddress)&invite_code=1234567890
,在你的PHP代码中,你会找到$_GET['inviteCode']
。因此,您的网址应该是www.website.com/register.php?email=(emailaddress)&inviteCode=1234567890
。
现在,它将进入第一个if语句并被查找。然而正如Sean和robbmj所提到的,你现在只是在没有你的GET参数的情况下重定向到同一页面,这意味着它不会输入第一个if语句,直接转到重定向到索引的else。
您应该做的是在if语句中包含您的注册表单,以检查数据库中是否存在代码和电子邮件。而不是header('Location: register.php');
。