Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取URL数据时引用系统的重定向问题_Php_Mysql_Redirect_Mysqli - Fatal编程技术网

Php 获取URL数据时引用系统的重定向问题

Php 获取URL数据时引用系统的重定向问题,php,mysql,redirect,mysqli,Php,Mysql,Redirect,Mysqli,我已经创建了一个脚本,用户可以使用电子邮件地址邀请朋友,电子邮件地址和随机生成的10个字符串“inviteCode”被发送到一个名为“references”的表中 然后,被邀请的人会收到一封带有URL链接的电子邮件,其中包含他们的电子邮件和他们唯一的邀请代码 当用户单击链接时,register.php页面应该检查URL,以及他们的数据是否在“references”表中有效。如果是这样,那么我有一个包含行来添加注册表表单,如果不是这样,那么它们将被重定向。关键是没有人可以访问register.ph

我已经创建了一个脚本,用户可以使用电子邮件地址邀请朋友,电子邮件地址和随机生成的10个字符串“inviteCode”被发送到一个名为“references”的表中

然后,被邀请的人会收到一封带有URL链接的电子邮件,其中包含他们的电子邮件和他们唯一的邀请代码

当用户单击链接时,register.php页面应该检查URL,以及他们的数据是否在“references”表中有效。如果是这样,那么我有一个包含行来添加注册表表单,如果不是这样,那么它们将被重定向。关键是没有人可以访问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(!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\u行的存在性

另一个注意事项:

启用错误报告,它将在调试期间帮助您:

ini_set('display_errors', 1);
error_reporting(E_ALL);


您也可以将sql查询更改为选择计数(id)
,并检查其是否大于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_行,请替换以下内容:

$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."'";

在每次重定向时,将其更改为
die(随机消息)
只是想看看哪个条件在抛出重定向。我确实有一种隐秘的怀疑,那就是
if($mysql->num_rows)
@Darren第二个else语句似乎在强制重定向;当我把它拿出来的脚本不包括文件,我甚至检查的URL字符串;因为如果我手动输入/register.php,我可以访问该页面;我应该被重定向。@Darren我很抱歉,当我访问页面时,我仍然只是得到一个空白页面。我没想到它会有这么多的bug,只是一个简单的if和else语句,如果URL与表dataSorry匹配,我还在学习,我想知道我应该在哪里使用这个脚本,它是在页面的顶部还是在我的末尾?我把我的声明连在一起了没关系,我们都去过。我会更新我的答案。谢谢你的帮助,我真的很感激。我收到两个错误,未定义变量和试图获取非对象的属性。这必须是为了使用“num_rows”-因此我假设我没有返回任何内容,这就是为什么我的脚本在最后一条else语句中失败的原因。我已经编辑了我的脚本,但仍然没有任何更改,没有出现错误。我只收到最后一个回音“问题”。用URL检查表格肯定有问题谢谢你的回复(Y)我编辑了我的帖子,我测试了你的脚本-我收到一个空白页(括号或半圆括号必须缺失)将返回。@JSK是的,请让我知道结果是什么!我不确定我是瞎了还是有其他问题,但是我添加了If(!isset($u GET['email'])| |!isset($u GET['inviteCode']){die(header('Location:index.php'));}else&我已经有错误报告了。我没有收到任何错误,页面只是空白,我不确定这是否是因为应用程序被终止,没有重定向或更小的错误。我甚至检查了URL字符串吗?我可能把自己搞糊涂了,不知道什么应该是一个简单的脚本
"SELECT email,inviteCode FROM referrals WHERE email='".$email."' AND inviteCode='".$inviteCode."'";