我使用bluehost作为我的虚拟主机,我遇到了一些问题。下面的代码是我的困惑点。
<?php
include '../init.php';
error_reporting(0);
?>
<div class='container'>
<html>
<head>
<link rel="stylesheet" type="text/css" href="/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="/bootstrap/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="/bootstrap/css/responsive.css">
<link rel="stylesheet" type="text/css" href="/bootstrap/css/responsive.min.css">
<script language="JavaScript" type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<link rel="stylesheet" type="text/css" href="SignIn.css">
<title>SoundBooth - Sign in</title>
<link rel="icon" href="../Images/Logo.png" type="image/x-icon"/>
</head>
<body background="../Images/BGMain.png">
<div class='signinLabel'>Sign in</div>
<div class='bg'></div>
<div class='user'>Username</div>
<div class='pass'>Password</div>
<form action="index.php" method='POST'>
<input name='Username' autocomplete="off"class='usr' type="text" style='height:34px;'/>
<input name='Password' autocomplete="off"class='pas'type="password" style='height:34px;'/>
<input type='submit' class='submit' value='Log in' ></input>
</form>
<a class='forgotPass' href="#">(Forgot password)</a>
<div class='no-account-label'>Don't have an account? |</div>
<a class='no-account-button' href="/signup">Sign up</a>
<?php
if (empty($_POST) === false){
$username = $_POST['Username'];
$password = $_POST['Password'];
if (empty($username) || empty($password)){ ?>
<div style="float:left;margin:-415px 200px;width:500px;text-indent:100px;"class="alert alert-error">You need to enter a username and password!</div>
<?php
}elseif (user_exists($username) === false){?>
<div style="float:left;margin:-415px 170px;width:500px;text-indent:100px;"class="alert alert-error">We can't find that username! Have you <a style='color: rgb(185, 74, 72);' href='../HTML/signup.html'>registered?</a></div>
<?php
}elseif (user_active($username) === false){ ?>
<div style="float:left;margin:-415px 200px;width:500px;text-indent:100px;"class="alert alert-error">You haven't activated your account!</div> <!--Remove this-->
<?php
}else{
$login = login($username, $password);
if ($login === false){ ?>
<div style="float:left;margin:-415px 200px;width:500px;text-indent:100px;"class="alert alert-error">The username or password you have entered is incorrect!</div>
<?php
}else{
$errors[] = 'Logging In...';
$_SESSION['user_id'] = $login;
if (isset($_SESSION['user_id'])){
mysql_query("UPDATE `users` SET `online_offline`='1' WHERE `user_id`='$_SESSION[user_id]'");
}
header("Location: http://sound-booth.com/");
exit();
}
}
}
echo output_errors($errors)
?>
</div>
</body>
</html>
是脚本的链接。它适用于localhost,但不适用于我的实际服务器。即使header()重定向也不起作用。
有人可以解释一下吗?
解决方案:
ob_start();
答案 0 :(得分:9)
最好的选择就是这样使用。
// Use this line instead of header
echo "<script>location='your_url.com'</script>";
答案 1 :(得分:6)
在发送任何输出之前必须设置标头。在进行header()
调用之前,您正在向用户发送大量HTML。也许它在一个环境中工作但在另一个环境中工作,因为output_buffering
在您的localhost php.ini上设置,但在服务器上没有。
您应该重新编写代码以确保在任何内容之前发送header()
,但如果您想让它正常工作,请将ob_start()
附加到代码的开头,它将强制执行缓冲。
答案 2 :(得分:2)
必须在HTTP响应之前发送HTTP标头。即,您必须在回显任何其他内容或发送任何HTML之前致电header
。
有可能,它在本地服务器上运行的原因是因为您在那里配置了output buffering。您可以在页面顶部插入对ob_start();
的调用,以在脚本中启用输出缓冲。然后,由于HTML将被缓冲,直到脚本完成,重定向头可以首先到达浏览器,因为它必须。或者,您可以重新编写脚本以将header
调用置于顶部。
答案 3 :(得分:2)
使用
ob_start();
之后的<?php
,并在文档末尾使用ob_end_flush();
。
答案 4 :(得分:1)
header("Location: http://sound-booth.com/");
它在文本输出之后。
使用OB_start()或更改代码。
答案 5 :(得分:0)
您可能已关闭错误报告,这就是您不会收到错误消息的原因。
如果你之前有一个空格,那么header()不起作用。您需要将它放在所有字符串输出之上才能使其正常工作。
答案 6 :(得分:0)
OP,
您的<div class='container'>
标记<{1}}前面有<html>
标记(然后在</body>
之前关闭。
在打开<div class='container'>
代码后尝试移动<body>
。
希望有所帮助。
答案 7 :(得分:0)
我认为您正在收到PHP警告:无法修改标头信息 - 标头已经存在 发送 他们在这里解释得更好http://www.herongyang.com/PHP/Cookie-ob_start-Output-Buffer-Function.html
答案 8 :(得分:0)
答案 9 :(得分:0)
$r=mysqli_query($con,$stmt);
if(!$r)
{
die("Server failed" . mysqli_error($con));
}
else{
header("Location: index.html");
exit();
}?>
上述代码对我有用。
答案 10 :(得分:0)
页面的第一行使用
<php ob_start();?>
然后在头文件下面使用
ob_end_flush();
例如像这样。
<?php
ob_start();
?>
<?php
//Get values from the post Operation
require_once 'db/conn.php';
if (isset($_POST['submit'])) {
//extract values from the $_POST array
$id = $_POST['id'];
$fname = $_POST['firstName'];
$lname = $_POST['lastName'];
$dob = $_POST['dob'];
$email = $_POST['email'];
$contact = $_POST['phone'];
$specialty = $_POST['specialty'];
//call crud Funtion
$result = $crud->editAttendees($id, $fname, $lname, $dob, $email, $contact, $specialty);
//redirect to index.php
if ($result) {
header("Location: viewrecords.php");
ob_end_flush();
} else {
echo "error";
}
}
答案 11 :(得分:-1)
我认为ob_start()
函数调用是解决此问题的最佳方法。可以在逻辑语句之后调用标头函数的属性。这是传递值,而只是采用它的前一个值。