PHP Location函数检查$ _GET

时间:2017-01-02 15:55:35

标签: php mysqli

这里有一个小问题,位置直接。 有一个页面,用户需要有正确的“代码”来访问该页面,这些链接由URL共享,如http://www.domain.com/index.php?c=65487549 如果用户在没有?c =或只是普通文件名index.php的情况下访问此页面 他们应该被送到另一个地方。

到目前为止我尝试了什么:

    if (!isset($_GET['c']) == "") {
                header ('Location: http://www.domain.com/another.php');
                exit();
    } else {
        $result2 = $link->query('SELECT code FROM Codes WHERE code="'.    (isset($_GET['c'])).'"');
    $CodeisValid = mysqli_num_rows($result2);

        if ($CodeisValid) {
          return true;
        } else {
                header ('Location: http://www.domain.com/another.php');
                exit();
        }
    }

如果用户拥有来自db的正确代码,则用户应该看到该页面。

有任何线索吗?

谢谢=)

5 个答案:

答案 0 :(得分:1)

我会写这样的代码:

<?php
if ('string' == 0) {
    echo 'you got me';
}

总是更好地清理用户输入。无论你如何得到它,从形式,从GET,POST等。始终消毒用户输入。

当您只需要一个来自数据库的结果限制您的查询时,这将会加速考虑事情。

始终在if语句中使用严格的比较。为什么?运行以下代码,您将看到原因:

===

如果您使用严格比较'SELECT code FROM Codes WHERE code="'. (isset($_GET['c'])).'"'; ,则if将按预期工作。

稍后编辑:

这是错误的

isset

因为1将返回一个布尔值(true或false),如果为真,则内部字符串将被翻译为'',如果未设置为public class MyObject { public int ID {get; set;} public string Topic {get; set;} public string Subject {get; set;} } 空字符串,则无论如何都是将是一个错误生成器

答案 1 :(得分:0)

我遇到过这种情况。我建议的是

if (empty($_GET['c'])) {
            header ('Location: http://www.domain.com/another.php');
            exit();
} else {
    $result2 = $link->query('SELECT code FROM Codes WHERE code="'.    (isset($_GET['c'])).'"');
$CodeisValid = mysqli_num_rows($result2);

    if ($CodeisValid) {
      return true;
    } else {
            header ('Location: http://www.domain.com/another.php');
            exit();
    }
}

我认为这可以胜任。如果没有请评论。希望它有所帮助

答案 2 :(得分:0)

只需删除代码第一行中的 ==“”即可。 在查询中,从那里删除“ isset ”。

isset正在检查变量“是否已设置” - 如果存在。它只返回TRUE或FALSE,因此在查询中您不会查找FALSE或TRUE。

答案 3 :(得分:0)

我猜不是最好的解决方案,但是这个解决方案就像我问的那样。 在.php重定向用户后没有任何内容。 没有或错误的代码后?c =重定向用户。 如果代码正确,请显示页面。

如果有人有更好的版本,我很乐意为所有人提供帮助: - )

    if (empty($_GET['c'])) {
        header ('Location: http://www.domain.com');
      die();
    } 

    if (isset($_GET['c'])) {
        $GetCode = htmlspecialchars($_GET['c']);

        $result = $link->query('SELECT code FROM FF_Products WHERE code = "'. $GetCode .'" LIMIT 1');
        $CodeisValid = mysqli_num_rows($result);

        if ($CodeisValid > 0) {
         // is valid if set return true here, only shows white page!
        } else {
          header ('Location: http://www.domain.com');
          die();
        }
    }

答案 4 :(得分:-1)

if (!isset($_GET['c']) == "") { header ('Location: http://www.domain.com/another.php'); exit(); }

更改为

if (!isset($_GET['c']) && $_GET['c'] == "") { header ('Location: http://www.domain.com/another.php'); exit(); }

像弗雷德一样说..