表单提交后PHP页面不重定向?

时间:2016-03-31 11:38:11

标签: php mysql forms redirect

我有一个小页面,它应该是从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

也出于某些原因它不会制作一张桌子,也不确定我在那里做错了什么。

6 个答案:

答案 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>