表单提交未显示或正在执行

时间:2015-08-02 01:19:48

标签: php forms mysqli

最近我使用HTML,CSS和JavaScript构建了一个表单。然后我输入了将表单中输入的数据发送到我的数据库所需的PHP。在我完成之后,我认为它是必要的工作,当我执行代码时,我最终得到一个空白页。形式和一切都消失了。这是我的PHP代码:

<?php
require("$_SERVER[DOCUMENT_ROOT]/connect.php");

$email = $username = $type = $question = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") 
{
if(!empty($_POST))
{

    if(isset($_POST["email"], $_POST["username"], $_POST["type"], $_POST["question"])
    {
         $email = test_input($_POST["email"]);
         $username = test_input($_POST["username"]);
         $type = test_input($_POST["type"]);
         $question = test_input($_POST["question"]);
         $premium = ($_POST["premium"]);
         $member = $_POST["member"];
         $terms = $_POST["terms"];
        if ($member != "NO") 
        {
             $member = "YES";
        }

    }
    if(!empty($email) && !empty($username) && !empty($type) && !empty($question) && !empty($terms))
    {
        $insert = $db->prepare("INSERT INTO QuestionSubmission (Email, Username, Type, Question, Member, Premium, Date) VALUES (?, ?, ?, ?, ?, ?, NOW())");
        $insert->bind_param("ssssss", $email, $username, $type, $question, $member, $premium);

        if($insert->execute())
        {
            header("Location: landing.php");
            die();
        }
    }
}
}
function test_input($data) 
{
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

&#34;成员&#34; part是一个复选框,用户可以选择成为其成员。它最初是未经检查的,我已经设置了一个&#34; NO&#34;为了那个原因。此外,还有一个隐藏的复选框已经检查,其值为NO ...这是&#34; premium&#34;复选框。最后,有一个用于同意条款的复选框。这最初是未选中的,但用户必须检查它,以便它不会为空并且表单要处理。

请您解释一下我要做什么才能使我的表格正常运作?

此外,&#34;要求(&#34; $ _ SERVER [DOCUMENT_ROOT] /connect.php"); &#34; part是我与数据库代码的连接所在的位置。此代码和表单代码位于同一页面中。

2 个答案:

答案 0 :(得分:1)

require_once $_SERVER[DOCUMENT_ROOT]."/connect.php");替换为$_SERVER,您未使用变量 - error_log无法像您一样使用它。这就是为什么你得到一个死亡的空白页面#34;如果你检查if(!empty($_POST))你发现它有语法错误,那就是原因。

此外,您正在检查if ($_SERVER["REQUEST_METHOD"] == "POST") { if(!empty($_POST)) { - 这可能是任何POST表单。您应该删除此代码

die();

当您检查输入是否设置在上面的代码下方时。

最后请注意,当您使用exit;时,应使用die()代替exit;。他们真的做同样的事情,但using System.Linq; 的使用更多地用于错误检查,例如&#34;脚本不能再运行 - 现在死!&#34;,而{{1} }更像是&#34;我想停止脚本现在运行,我已经完成了 - 谢谢!&#34;。

答案 1 :(得分:0)

通常,在表单页面中包含处理代码会更容易。这样,如果您遇到错误,您可以:

  • 允许代码再次进入表单
  • 使用pextrw属性
  • 保留旧值

大致看起来像这样:

value="…"

为了便于管理,您可以将上面的PHP代码放在一个单独的文件中。

上面的示例问题是,虽然您在成功时会重定向到新页面,但您不会去其他地方。

如果您想使用单独的处理脚本执行此操作,则需要在失败时重定向回原始表单。但是,您会发现持续存在的旧数据更难以这样做。