脚本头过早结束?
Premature End of Script Headers?
我的代码有问题,是使用header
时的过早执行错误。
代码:
<?php
session_start();
require 'config.php';
$prepend = "<span class='welcome'>";
$append = "</span>";
if (!isset($_SESSION['name'])) {
header("Location: login.php");
}
echo $prepend."Здравей ".$_SESSION['name'].$append."</br>";
if (isset($_POST['submit']))
{
$newname = mysql_real_escape_string($_POST['newname']);
$newpass = mysql_real_escape_string($_POST['newpass']);
$oldpass = mysql_real_escape_string($_POST['oldpass']);
$checkPass = "SELECT pass from admin WHERE pass = '$_POST[oldpass]'";
$rs = mysqli_query($connect,$checkPass);
$data = mysqli_fetch_array($rs, MYSQLI_NUM);
if ($data > 0)
{
$query = "UPDATE admin SET pass ='".$_POST['newpass']."',name ='".$_POST['newname']."'" ;
$result = mysqli_query($connect, $query);
if ($result === true)
{
echo "Update sucessfuly!";
}
}
else {
header('Location: admin.php?failed=1');
}
}
?>
第一次打开页面时,else
部分立即执行,我不明白为什么。
第一次打开页面会执行else部分,因为没有设置session变量,需要先设置session变量
$_SESSION['sessionName']= $value;
您一定是在其他页面上完成了此操作,如果是,请分享代码。
并尝试使用
if(mysqli_num_row($data)>0)
{
$query = "UPDATE admin SET
pass='".$_POST['newpass']."',name='".$_POST['newname']."'" ;
$result = mysqli_query($connect, $query);
if ($result === true)
{
echo "Update sucessfuly!";
}
}
else{
header('Location: admin.php?failed=1');
}
}
?>
首先你的代码中有两行奇怪的代码:
$rs = mysqli_query($connect,$checkPass);
$data = mysqli_fetch_array($rs, MYSQLI_NUM);
这些功能不存在,实际上你可能使用了 mysql_...()
功能,正如前面的陈述所证实的那样。
现在当你执行
$data = mysql_fetch_array($rs, MYSQLI_NUM);
那么$data
是一个数组(下一条记录returned)或者FALSE(当没有更多记录存在时。并且这个语句应该属于一个循环。
无论如何,在您当前的代码形式中,当您执行 if ($data > 0)
时,它 return 没有任何意义,因为 $data
是一个数组。
所以你必须根据你的需要重构这段代码(我猜你想控制pass
真的被前面的查询找到了)。
我的代码有问题,是使用header
时的过早执行错误。
代码:
<?php
session_start();
require 'config.php';
$prepend = "<span class='welcome'>";
$append = "</span>";
if (!isset($_SESSION['name'])) {
header("Location: login.php");
}
echo $prepend."Здравей ".$_SESSION['name'].$append."</br>";
if (isset($_POST['submit']))
{
$newname = mysql_real_escape_string($_POST['newname']);
$newpass = mysql_real_escape_string($_POST['newpass']);
$oldpass = mysql_real_escape_string($_POST['oldpass']);
$checkPass = "SELECT pass from admin WHERE pass = '$_POST[oldpass]'";
$rs = mysqli_query($connect,$checkPass);
$data = mysqli_fetch_array($rs, MYSQLI_NUM);
if ($data > 0)
{
$query = "UPDATE admin SET pass ='".$_POST['newpass']."',name ='".$_POST['newname']."'" ;
$result = mysqli_query($connect, $query);
if ($result === true)
{
echo "Update sucessfuly!";
}
}
else {
header('Location: admin.php?failed=1');
}
}
?>
第一次打开页面时,else
部分立即执行,我不明白为什么。
第一次打开页面会执行else部分,因为没有设置session变量,需要先设置session变量
$_SESSION['sessionName']= $value;
您一定是在其他页面上完成了此操作,如果是,请分享代码。
并尝试使用
if(mysqli_num_row($data)>0)
{
$query = "UPDATE admin SET
pass='".$_POST['newpass']."',name='".$_POST['newname']."'" ;
$result = mysqli_query($connect, $query);
if ($result === true)
{
echo "Update sucessfuly!";
}
}
else{
header('Location: admin.php?failed=1');
}
}
?>
首先你的代码中有两行奇怪的代码:
$rs = mysqli_query($connect,$checkPass);
$data = mysqli_fetch_array($rs, MYSQLI_NUM);
这些功能不存在,实际上你可能使用了 mysql_...()
功能,正如前面的陈述所证实的那样。
现在当你执行
$data = mysql_fetch_array($rs, MYSQLI_NUM);
那么$data
是一个数组(下一条记录returned)或者FALSE(当没有更多记录存在时。并且这个语句应该属于一个循环。
无论如何,在您当前的代码形式中,当您执行 if ($data > 0)
时,它 return 没有任何意义,因为 $data
是一个数组。
所以你必须根据你的需要重构这段代码(我猜你想控制pass
真的被前面的查询找到了)。