【问题标题】:Header Location code not working--suggestions?标头位置代码不起作用 - 建议?
【发布时间】:2012-11-08 18:05:32
【问题描述】:

PHP 不是我的菜,但我需要设置一个简单的登录区域——所以我来了。这是我发现的一些代码,似乎可以工作,但不会重定向。

如果我将重定向更改为回显,它会起作用。如果我将位置更改为“包含”,它会起作用。我在“位置”代码中做错了什么?

我愿意接受有关交替编码的建议。我有一个网页,如果用户输入密码,网站上会出现一个附加部分。所以我在那个网站上有一个表单提交到这个代码,然后它应该重定向回来,新部分现在可见。

这是我的代码--

<?php

// error reporting
ini_set('display_errors',1); 
 error_reporting(E_ALL);

$host="localhost"; // Host name
$username="foo"; // Mysql username
$password="foo"; // Mysql password
$db_name="foo"; // Database name
$tbl_name="members"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
header("Location: http://www.google.com/"); 

// Register $myusername, $mypassword 
// success
//session_register("myusername");
//session_register("mypassword");
}
else {
echo "Wrong Username or Password";
}

?>

【问题讨论】:

  • 从哪里开始会话(调用 session_start())?
  • 在脚本顶部添加ini_set('error_reporting', E_ALL);,看看是否收到任何错误消息。
  • 好的——我把这段代码放在第一个
  • 好的,我改用 ini_set('display_errors',1);错误报告(E_ALL);这适用于错误报告。确实收到“警告:无法修改标头信息 - 标头已由(第 41 行 [url] 中的 [url] 输出开始”)。现在弄清楚这意味着什么......

标签: php login location


【解决方案1】:

session_register 已弃用。因此,输出已经发送,您可能会看到错误报告已打开。在header之前什么都不能输出

【讨论】:

  • 所以如果我注释掉 session_register("myusername");和 session_register("mypassword");看来我得到了相同的结果。我需要将这些移到代码中的什么位置?假设需要它们?
  • 我修改了上面的代码以反映更新。仍然收到“标头”发送错误...嗯。
  • 在线?请提及行号以及该行是什么。
【解决方案2】:

我猜您的标头已经发送,这会使您尝试使用的标头无效(尽管 PHP 通常会告诉您这是一个问题)。

可能导致您的标头自动发送的是您的 php 块之外的任何正常输出(例如,如果您的表单 html 存在于此块之上)。

【讨论】:

  • 试图理解这一点。所以我在 index.html 页面上有表单,表单操作会转到此代码 (checklogin.php)。这是我遇到的错误,但我不知道标头被发送到哪里,所有这些东西都被注释掉了。
【解决方案3】:

原来问题似乎是我的代码中的空格。一旦我删除了所有间距,问题就消失了。有点奇怪——但这就是发生的事情。感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 2013-07-28
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多