【问题标题】:Notice: Undefined index: HTTP_REFERER注意:未定义索引:HTTP_REFERER
【发布时间】:2013-11-27 09:02:52
【问题描述】:

注意:未定义索引:HTTP_REFERER

$http_referer = $_SERVER['HTTP_REFERER']

我在教程中使用了这个。看起来还不错

代码也从包含文件中调用它

我应该改变什么?

我添加了 print_r($_SERVER);现在页面给了我这个

 Array ([UNIQUE_ID] => UoSxWa56310AAAwUckIAAAAA
        [HTTP_HOST] => movafaghha.com
        [HTTP_COOKIE] => __utma=210711305.58608218.1372977010.1372977010.1372977010.1; __utmz=210711305.1372977010.1.1.utmcsr=who.is|utmccn=(referral)|utmcmd=referral|utmcct=/whois/movafaghha.com; PHPSESSID=83eb0e2ae7ebe4b6c2eeb071d9f5de71
        [HTTP_X_REAL_IP] => 109.109.41.81
        [HTTP_X_FORWARDED_HOST] => movafaghha.com
        [HTTP_X_FORWARDED_SERVER] => movafaghha.com
        [HTTP_X_FORWARDED_FOR] => 109.109.41.81
        [HTTP_CONNECTION] => close 
        [HTTP_CACHE_CONTROL] => max-age=0 
        [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
        [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.48 Safari/537.36 
        [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8,fa;q=0.6 
        [PATH] => /sbin:/usr/sbin:/bin:/usr/bin
        [SERVER_SIGNATURE] =>
        [SERVER_SOFTWARE] => Apache 
        [SERVER_NAME] => movafaghha.com 
        [SERVER_ADDR] => 174.122.223.93 
        [SERVER_PORT] => 80 
        [REMOTE_ADDR] => 109.109.41.81 
        [DOCUMENT_ROOT] => /home/memarest/public_html/movafaghha.com 
        [SERVER_ADMIN] => webmaster@movafaghha.memarestan.com 
        [SCRIPT_FILENAME] => /home/memarest/public_html/movafaghha.com/tutorials/login200/register.php 
        [REMOTE_PORT] => 49737 
        [GATEWAY_INTERFACE] => CGI/1.1 
        [SERVER_PROTOCOL] => HTTP/1.0 
        [REQUEST_METHOD] => GET 
        [QUERY_STRING] => 
        [REQUEST_URI] => /tutorials/login200/register.php 
        [SCRIPT_NAME] => /tutorials/login200/register.php 
        [PHP_SELF] => /tutorials/login200/register.php 
        [REQUEST_TIME_FLOAT] => 1384427865.54 
        [REQUEST_TIME] => 1384427865 
        [argv] => Array ( ) 
        [argc] => 0 
    ) 

编辑了代码,但仍然无法回显所有需要的字段

<?php

ini_set("display_errors", true);
error_reporting(E_ALL);

require 'core.inc.php';






if(!loggedIn()) {

//check mikunim ke tamame field ha dar form vojod darand va set shudan

if(isset($_POST['username'])&&isset($_POST['password'])&&isset($_POST['password_again'])&&isset($_POST['firstname'])&&isset($_POST['surename'])) {

    $username = $_POST['username'];
    $password = $_POST['password'];
    $password_again = $_POST['password_again'];
    $firtsname = $_POST['firstname'];
    $surename = $_POST['surename'];



    //HALA CHECK MIKUNIM KHALI HASTAND YA NA

    if(!empty($username)&&!empty($password)&&!empty($password_again)&&!empty($firstname)&&!empty($surename)){
        echo 'ok' ;

    } else {

        echo ' All fields are required';

    }

}




?>

<form action="register.php" method="POST">
Username:<br> <input type="text" name="username"><br> <br>
Password:<br> <input type="password" name="password"><br><br>
Password again:<br> <input type="password" name="password_again"><br><br>
Firstname:<br> <input type="text" name="firstname"><br><br>
Surname:<br> <input type="text" name="surename"><br><br>
<input type="submit" value="register">



</form>

<?php

} elseif (loggedIn()) {

    echo 'you \'re already logged in';
    }

?>

现在添加后

“e”

页面显示“所有字段都是必需的”

但即使填写所有字段消息也不会改变

【问题讨论】:

  • 你应该测试这个变量是否存在。如果您不是来自其他页面,而是直接在地址栏中输入该页面的链接,则不会有任何引荐来源...

标签: php indexing undefined http-referer


【解决方案1】:

HTTP_REFERER不保证是客户端发送的:

将用户代理引向当前页面的页面地址(如果有)。这是由用户代理设置的。不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 作为一个特性的能力。简而言之,它不能真正被信任。

在你的情况下,它显然 没有被发送,所以你所能做的就是

if(isset($_SERVER['HTTP_REFERER'])) {
  //do what you need to do here if it's set    
   }
else
{
   //it was not sent, perform your default actions here
}

【讨论】:

  • 嗨,我认为原始问题可能要求阻止某些垃圾邮件网站(至少在我的情况下)。在上述解决方案中,将在所有情况下执行操作。这是我所做的: if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] == 'www.spamwebsite.com') {//action}。
【解决方案2】:
if (isset($_SERVER['HTTP_REFERER'])) {$THE_REFER=$_SERVER['HTTP_REFERER']}

【讨论】:

  • isset 方法返回一个布尔值。您的 $THE_REFER 变量将是 "true""false",而不是引用标头的实际值。
  • @JeffKilbride 感谢您的评论。这个帖子是2年前的……我不知道为什么我发了这个不合逻辑的帖子!我震惊了!我已经编辑过了。再次感谢您
【解决方案3】:

未定义索引表示未设置数组键,做一个:

var_dump($_POST); die(); 

在引发错误的行之前,您可以看到您正在尝试获取一个不存在的数组键。

【讨论】:

    【解决方案4】:

    正确的引用方式是

    $my_referer = isset($_POST['referer']) ? trim($_POST['referer']) : (isset($_SERVER['HTTP_REFERER']) ? base64_encode($_SERVER['HTTP_REFERER']) : false);
    

    【讨论】:

      猜你喜欢
      • 2015-12-01
      • 2015-06-02
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 2015-07-29
      相关资源
      最近更新 更多