由于某些原因,我正在努力解决这个问题header("Location:http://corocloud.com/index.php/");
不工作,我已尝试其他路径到文件但没有工作,
header("Location:index.php");
,header("index.php");
,header("./index.php/");
这些都不起作用,我的代码就是这样:
<!DOCTYPE html>
<html>
<head>
<title>CoroCloud</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="./js/material.min.js"></script>
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.pink-indigo.min.css" />
<style>.mdl-layout{align-items:center;justify-content:center;}.mdl-layout__content{padding:24px;flex:none;}</style>
</head>
<body>
<div class="mdl-layout mdl-js-layout mdl-color--grey-100">
<main class="mdl-layout__content">
<div class="mdl-card mdl-shadow--6dp">
<div class="mdl-card__title mdl-color--primary mdl-color-text--white">
<h2 class="mdl-card__title-text">CoroCloud</h2>
</div>
<div class="mdl-card__supporting-text">
<form method="POST">
<div class="mdl-textfield mdl-js-textfield">
<input class="mdl-textfield__input" type="text" name="uname" />
<label class="mdl-textfield__label" for="uname">Username</label>
</div>
<div class="mdl-textfield mdl-js-textfield">
<input class="mdl-textfield__input" type="password" name="pass"/>
<label class="mdl-textfield__label" for="pass">Password</label>
</div>
<div class="mdl-card__actions">
<input type="submit" class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect" name="sub">
</div>
</form>
</div>
</div>
</main>
</div>
<?php
session_start();
// this will trigger when submit button click
if(isset($_POST['sub'])){
$db = new mysqli("localhost","user","password","db");
// create query
$query = "SELECT * FROM users WHERE user='".$_POST['uname']."' AND password='".sha1($_POST['pass'])."'";
// execute query
$sql = $db->query($query);
// num_rows will count the affected rows base on your sql query. so $n will return a number base on your query
$n = $sql->num_rows;
// if $n is > 0 it mean their is an existing record that match base on your query above
if($n > 0){
$_SESSION['username'] = $_POST['uname'];
$_SESSION['password'] = $_POST['pass'];
$_SESSION['userobj'] = mysql_fetch_assoc($query);
header("Location: index.php");
exit();
} else {
echo "Incorrect username or password";
}
}
?>
</body>
</html>
我知道代码正在执行,因为每个$ _SESSION var都获得了值,为什么标头不起作用?
顺便说一句,我正在尝试重定向的文件位于同一个文件夹中。
编辑: 不要运行代码片段,因为它有PHP
答案 0 :(得分:2)
您无法输出内容,然后执行&#34;标题&#34;在php中操作。 所以,修改你的代码,先做所有的PHP东西,然后输出html。 在此之前你不得有任何输出(html,警告等)&#34;标题&#34;线。 见:http://php.net/manual/en/function.header.php
答案 1 :(得分:2)
在代码顶部//在html代码
之前添加此代码ob_start();
session_start();
// this will trigger when submit button click
if(isset($_POST['sub'])){
$db = new mysqli("localhost","user","password","db");
// create query
$query = "SELECT * FROM users WHERE user='".$_POST['uname']."' AND password='".sha1($_POST['pass'])."'";
// execute query
$sql = $db->query($query);
// num_rows will count the affected rows base on your sql query. so $n will return a number base on your query
$n = $sql->num_rows;
// if $n is > 0 it mean their is an existing record that match base on your query above
if($n > 0){
$_SESSION['username'] = $_POST['uname'];
$_SESSION['password'] = $_POST['pass'];
$_SESSION['userobj'] = mysql_fetch_assoc($query);
header("Location: index.php");
exit();
} else {
echo "Incorrect username or password";
}
}
// Put here html code //
答案 2 :(得分:1)
请先尝试使用ob_start()函数和标题位置
ob_start();
header("Location:http://corocloud.com/index.php/");
exit;
我希望它会有所帮助!你请提供你在那里得到的错误。
答案 3 :(得分:1)
在调用标头之前,您可能不会生成输出(HTML或echo)。 http://php.net/manual/en/function.header.php
答案 4 :(得分:1)
正如Icewine指出的那样,应该在创建任何输出之前设置标题。
因此,要么将设置标题的代码移动到脚本的开头,要么通过在脚本开头调用ob_start()
来捕获带输出缓冲的所有输出。
此外,习惯上在使用Location标头重定向时不发送任何内容,将重定向的逻辑移动到脚本开头的另一个原因是,然后在设置标头后调用exit()
。
答案 5 :(得分:0)
更好的方法是尝试遵循一些PHP基础知识。
<?php
ob_start();
session_start();
标题 后退出
header("Location:demo.php");
exit;