标头不工作 - 代码在标头之前和之后工作

时间:2014-05-06 08:10:01

标签: php redirect

我有以下代码,一个检查用户名和密码的php(nv_checklogin.php) 它包括一个config.php,它链接到一个数据库(存储用户名和密码)。

如果我在标题之前回显$ count,它会在屏幕上输出“1”(所以我确定与数据库的链接已经正确,代码进入if循环)。 如果我在标题后添加“echo'a';”,则输出“a”。

可能有什么不对? 它以前工作,我现在更新我的mysql命令到mysqli,因为我的文件已被主机移动,我的网站不再工作。 config.php文件中没有空行(不在?>之后)。

如果我登录该站点,则会调用nv_checklogin.php。它现在给我一个空白的屏幕,而不是重定向到nv_frames.php。如果我右键单击屏幕并检查页面的属性,我可以看到我仍然在nv_checklogin.php页面上。

提前感谢您的帮助/信息。

(输入错误的用户名/密码组合也会导致正确的输出(verkeerde naam en / paswoord)。

的config.php

<?php
// Connection's Parameters
$db_host="localhost";
$db_name="kleinpruts_copp1";
$username="kleinpruts_prono";
$password="xxxx";
$dbtimc = mysqli_connect($db_host, $username, $password, $db_name);
?>

nv_checklogin.php

<?php
session_start();
echo '<link rel="stylesheet" type="text/css" href="nv_style1.css">';
$_SESSION['login']=false;
$_SESSION['gebruiker']='test';
$_SESSION['naam']='test';
$_SESSION['voornaam']='test';
include('config.php');
// username and password sent from form 
$mygebruikersnaam=$_REQUEST['mygebruikersnaam']; 
$mypassword=$_REQUEST['mypassword']; 
// To protect MySQL injection
$mygebruikersnaam = stripslashes($mygebruikersnaam);
$mypassword = stripslashes($mypassword);
$mygebruikersnaam = mysqli_real_escape_string($dbtimc,$mygebruikersnaam);
$mypassword = mysqli_real_escape_string($dbtimc,$mypassword);
$sql="SELECT * FROM deelnemers WHERE gebruikersnaam='$mygebruikersnaam' and paswoord=SHA1('$mypassword')";
$result=mysqli_query($dbtimc,$sql);
$count=0;
// Mysql_num_row is counting table row
$count=mysqli_num_rows($result);
// If result matched $mygebruikersnaam and $mypassword, table row must be 1 row
if($count==1){
  $_SESSION['login'] = true;
  $_SESSION['gebruiker'] = $mygebruikersnaam;
  session_write_close();
  header("Location:nv_frames.php");
  exit();
}       // end else
else {
 echo '<p>Verkeerde naam en/of paswoord!</p>';
}      // end else

4 个答案:

答案 0 :(得分:1)

echo '<link rel="stylesheet" type="text/css" href="nv_style1.css">';上有输出header()无效,因为已有输出。

答案 1 :(得分:0)

我想你忘记在nv_checklogin.php上关闭你的php脚本了 不要忘记用

结束文件
  

&GT;

您应该在apache配置文件上激活display_errors。

我不习惯mysqli,我更喜欢PDO,但你的cose似乎没问题。 如果你需要帮助,请随时告诉我。

答案 2 :(得分:0)

<?php
session_start(); // dont do this here !
//echo not here after all php
$_SESSION['login']=false;
$_SESSION['gebruiker']='test';
$_SESSION['naam']='test';
$_SESSION['voornaam']='test';
include('config.php');
// username and password sent from form 
$mygebruikersnaam=$_REQUEST['mygebruikersnaam']; 
$mypassword=$_REQUEST['mypassword']; 
// To protect MySQL injection
$mygebruikersnaam = stripslashes($mygebruikersnaam);
$mypassword = stripslashes($mypassword);
$mygebruikersnaam = mysqli_real_escape_string($dbtimc,$mygebruikersnaam);
$mypassword = mysqli_real_escape_string($dbtimc,$mypassword);
$sql="SELECT * FROM deelnemers WHERE gebruikersnaam='$mygebruikersnaam' and paswoord=SHA1('$mypassword')";
$result=mysqli_query($dbtimc,$sql);
$count=0;
// Mysql_num_row is counting table row
$count=mysqli_num_rows($result);
// If result matched $mygebruikersnaam and $mypassword, table row must be 1 row
if($count==1){
  $_SESSION['login'] = true;
  $_SESSION['gebruiker'] = $mygebruikersnaam;
  session_write_close();
  header("Location:nv_frames.php");
  exit();
}       // end else
else {
 echo '<link rel="stylesheet" type="text/css" href="nv_style1.css">';
 echo '<p>Verkeerde naam en/of paswoord!</p>';
}      // end else

例如......

答案 3 :(得分:0)

正如Jm's answer所说,这是因为您的标题前已经有echo

在发出任何输出 之前,必须调用发送/修改HTTP标头的函数 。否则呼叫失败:

  

警告:无法修改标头信息 - 已发送的标头(输出从文件:行开始)

修改HTTP标头的一些功能是:

输出可以是:

  • 非故意:
  • 故意:
    • printecho和其他产生输出的函数(如var_dump
    • <html>代码之前的原始<?php区域。

有关详细信息,请查看this answer