【问题标题】:Redirecting user for Invite/Referral System为邀请/推荐系统重定向用户
【发布时间】:2014-07-29 20:46:06
【问题描述】:

我创建了一个邀请/推荐系统,允许用户通过输入电子邮件地址来邀请某人,电子邮件和随机邀请代码存储在“推荐”表中。然后会向该人发送一封电子邮件,其中包含他们的电子邮件和 URL 链接中唯一的 10 个字符的邀请码,例如www.website.com/register.php?email=(emailaddress)&invite_code=1234567890

  • 我做了一些修改,下面的脚本现在应该被重定向到 register.php 如果没有然后回到主页。

我已经对此进行了测试,即使使用有效的 URL 链接,用户仍会被重定向到 index.php 页面。 (这也不会阻止用户手动访问 register.php)

表详细信息 = 带有 ID 的“推荐人”|网址 |点击 |电子邮件 |邀请码

我已经设法让页面重定向,但如果他们有一个实际的电子邮件邀请代码,这并不好。

这是我过去几天一直在修改以尝试开始工作的脚本:

 <?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
   }

?>

这应该是直截了当的,检查“电子邮件”和“邀请代码”的 URL 与表格进行比较,如果他们已被邀请,则允许访问该页面,如果不重定向。

【问题讨论】:

  • 这是register.php上的代码吗?如果是这样,那么像register.php?email=(emailaddress)&amp;invite_code=1234567890 这样的链接如果好,将被重定向到register.php,并且由于emailinvite_code 不再在网址中,它们将被重定向到index.php

标签: php mysql redirect


【解决方案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');

【讨论】:

  • 感谢您的评论 (Y) 我已经更新了帖子。我现在发送一个指向welcome.php 文件的链接,然后脚本会在该文件中检查信息以重定向到index.php 或register.php。不幸的是,它一直重定向到 index.php,这并没有停止对 register.php 的访问。只有受邀用户才能注册和访问。
  • @JSK 包含您问题中代码的文件的名称是什么?
  • welcome.php - 如果电子邮件和邀请代码为假,则 index.php 应该是用户被重定向到的位置,如果为真,那么它应该指向 register.php 以创建帐户。
【解决方案2】:

我知道这是一个 3 年前的问题,但您的代码中仍然存在一些明显的错误。

例如 你说 url 是 www.website.com/register.php?email=(emailaddress)&amp;invite_code=1234567890 但是,在你的 php 代码中,你寻找 $_GET['inviteCode']。所以,你的 url 实际上应该是www.website.com/register.php?email=(emailaddress)&amp;inviteCode=1234567890

现在,它将进入第一个 if 语句并被查找。然而,正如 Sean 和 robbmj 所提到的,您现在将被重定向到同一个页面,只是没有您的 GET 参数,这意味着它不会进入第一个 if 语句,而是直接转到重定向到索引的 else。

您应该做的是将您的注册表单放在 if 语句中,以检查代码和电子邮件是否存在于数据库中。而不是header('Location: register.php');

【讨论】:

    猜你喜欢
    • 2019-09-10
    • 2014-06-10
    • 2021-07-20
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2020-12-20
    相关资源
    最近更新 更多