我有以下代码,一个检查用户名和密码的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
答案 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标头的一些功能是:
输出可以是:
<?php
之前或?>
之后的空白print
,echo
和其他产生输出的函数(如var_dump
)<html>
代码之前的原始<?php
区域。 有关详细信息,请查看this answer。