我有一个小页面,它应该是从post数据创建一个mysql表,然后重定向到" second_page.php"但由于某种原因,在表单提交后,它不会重定向。
plot "test1.dat" using ($1):($2) notitle smooth cspline with filledcurve x1 lt rgb "#FFAAAA",\
"test2.dat" using ($1):($2) notitle smooth cspline with filledcurve x1 lt rgb "#FFFFFF",\
"test1.dat" using ($1):($2) notitle w l lw 2 lt 1 lc 0 smooth cspline,\
"test2.dat" using ($1):($2) notitle w l lw 2 lt 1 lc 1 smooth cspline
也出于某些原因它不会制作一张桌子,也不确定我在那里做错了什么。
答案 0 :(得分:3)
在输出中写入文本后,您无法进行重定向。 你需要先拥有它。会发生什么情况,当你的页面加载时,你首先检查你是否因为用户输入而在这里(提交设置并且有用户名)或者如果没有(第一次用户导航到页面)。然后您可以选择相应地重定向。
更新:使用POST而非默认设置。
<?php
$connection = mysqli_connect("localhost", "widget_cms", "password", "widget_corp");
if (isset($_POST["username"])) {
$username = $_POST['username'];
$query = "INSERT INTO subjects (menu_name) VALUES (?)"; //Use prepared statements instead of unsafe methods
if (isset($_POST['submit'])) {
$stmt = mysqli_prepare($connection, $query);
$stmt->bind_param("s", $username);
$qresult = $stmt->execute();
if ($qresult) {
header("Location: second_page.php");
} else {
die("Error " . mysqli_error($connection) . " " . "(" . mysqli_errno($connection) . ")" . ", Please contact Sammy for troubleshooting as soon as you can.");
}
}
}
mysqli_close($connection); //Dont need the connection open anymore
?>
<html>
<body>
<style>...</style>
<form name="login" action="login.php" method="POST">
Username: <input type="text" name="username"></br>
<input name="submit" type="submit" value="Submit" id="dlbutton" style="cursor:pointer">
</form>
</body>
</html>
答案 1 :(得分:2)
最可能的原因是在重定向之前你不能拥有任何HTML,尝试将你的所有php移到你的HTML之上。
- Epodax
这就是为什么它没有重定向。请阅读有关use and place PHP Headers的方法。
@Epodax如果我想用css设计它怎么样?我还能这样做吗? - 山姆
如果您希望标题重定向到其他页面,则应该不需要HTML ,因为所有输出HTML都将位于新的,重新编辑的页面中。
如果您因为某些不明确的理由而在当前页面中包含重定向和 HMTL,那么您可能想要做的就是使用an include。
其他一些说明:
每次运行header
重定向时,都应该在脚本后面直接使用exit
语句结束脚本。
您需要重新格式化代码,以便在[潜在]重定向之前不显示HTML。
如果您希望在die()
语句中设置样式(CSS等),最好只需用变量替换die
并在非变量上显示该变量文本 - 重定向页面,通知用户他们的错误。
如果以后出现问题,重定向无法正确找到其目标,即使用FULL URI。
(是的,我喜欢子弹点)
使用PHP error logging查找问题然后解决问题。这是至关重要的,你真正应该从这个问题中学到一点。
您的<form>
必须使用method="post"
发送将由PHP $_POST
数组读取的值。感谢Fred-ii。默认情况下,表单将使用GET
/ $_GET
方法发送(并因此将收到PHP)。
答案 2 :(得分:1)
你的代码工作正常,只需使用表单中的method属性。
当您使用POST方法获取值时,请使用method =“POST”作为表单属性。否则默认情况下它将采用GET方法。
以下是工作代码。只需进行少量更改,请检查并进行比较
$connection = mysqli_connect("localhost", "root", "", "chat");?>
<html>
<body>
<form name="login" action="index.php" method="POST" >
Username: <input type="text" name="username"></br>
</form>
<?php
if(isset($_POST['username'])){
$username = $_POST['username'];
$username = mysqli_real_escape_string($connection, $username);
$query = "INSERT INTO users (username) VALUES ('{$username}')";
if(isset($_POST['submit'])){
$qresult = mysqli_query($connection, $query);
if($qresult){
//header("Location: second_page.php");
}else{
die("Error " . mysqli_error($connection) . " " . "(" . mysqli_errno($connection) . ")" .", Please contact Sammy for troubleshooting as soon as you can.");
}
}
}
?>
</body>
</html>
<?php
mysqli_close($connection);
?>
答案 3 :(得分:1)
首先要注意: second_page.php
的内容未知,是否因为您在标题中设置的文件失败了。检查该文件中的错误。
所以要测试一下,用简单的echo "Success";
这是一个略有不同的重写,并确保您在安装了PHP / MySQL并访问的Web服务器上访问它
<{1}}而不是http://localhost/file.php
作为示例。
我在数据库连接和查询中添加了错误检查,并将操作更改为file:///file.php
为&#34; self&#34;,因为您在同一文件和post方法中执行对于表格,因为那是缺失的。
NOTA:您的action=""
列需要足够长才能容纳输入数据。 如果不够长,将静默
即:让它menu_name
安全起见,它有点矫枉过正,但仍然是一个安全的赌注。
另外,如果您的表格中有更多列,我们不知道例如VARCHAR (255)
并且是否为AUTO_INCREMENT,则未知且其他列是否具有某种形式的约束
旁注:请参阅代码中的注释。
id
<强>脚注:强>
如果这仍然不适合你,你需要进一步调查你的系统,看它为什么不起作用,超出了这个问题的范围。
答案 4 :(得分:0)
你必须在你的html输出前面移动php块。 如果还没有给出输出,则只能发送重定向头(通常是所有头)。
因此你应该做这个部分
<?php
$username = $_POST['username'];
$username = mysqli_real_escape_string($connection, $username);
$query = "INSERT INTO subjects (menu_name) VALUES ('{$username}')";
if(isset($_POST['submit'])){
$qresult = mysqli_query($connection, $query);
if($qresult){
header("Location: second_page.php");
}else{
die("Error " . mysqli_error($connection) . " " . "(" . mysqli_errno($connection) . ")" .", Please contact Sammy for troubleshooting as soon as you can.");
}
}
?>
在输出发生之前,脚本中的第一件事就是。
答案 5 :(得分:0)
问题是它没有在执行语句之前检查是否使用了表单。试试这个:
<?php
if(!empty($_POST)){
$connection = mysqli_connect("localhost", "widget_cms", "password", "widget_corp");
if(mysqli_connect_errno()){
die("Database connection failed: " . mysqli_connect_error() . "(" . mysqli_connect_errno() . ")");
}
$username = $_POST['username'];
$username = mysqli_real_escape_string($connection, $username);
$query = "INSERT INTO subjects ( menu_name, position, visible ) VALUES ('{$username}', 4, 1)";
$submission = mysqli_query($connection, $query);
if($submission){
header("Location: second_page.php");
}
if(!$submission){
die("Error: " . mysqli_error($connection, $submission));
}
}
?>
<html>
<body>
<form method="post" action="login.php" method="post">
Username: <input type="text" name="username"><br>
<input type="submit" name="submit" id="dlbutton"><br>
</form>
</body>
</html>