PHP变量正在丢失'在HTML表单提交

时间:2017-06-08 17:09:53

标签: php html forms

我对网络开发领域相对较新,并被指派创建一个能够记录呼叫的网站。 我已经使用HTML表单来实现这一点 - 我过去曾经做过很多这样的事情,但之前从未遇到过这个问题。

我的页面包含3个按钮:一个用于记录呼叫,一个用于转发呼叫,另一个用于查看所有呼叫记录。我通过在按钮中使用onclick方法来实现这一点:

<button type=submit value=log onclick="window.location.href='reception.php?log=1';">Log a call.</button>

然后使用PHP GET在页面的其余部分显示相应的内容。

                try {
                    $log = $_GET["log"];
                }
                catch(Exception $ex) {
                    die();
                }

                if($log) {
                    ?>
                    // create form

这完美无缺,我已经创建了如下表单。

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post" name="log">
<p>
    <label>Call date: </label>
    <input type="date" name="date" value=<?php echo date("Y-m-d"); ?>>
    <span class="error"><sup>&emsp;<?php echo $dateErr; ?></sup></span>
</p>
<br>
<p>
    <label>Does the client have a contract?</label>
    <select name="contract">
        <option value="default" selected disabled>Please select...</option>
        <option value="true">Yes</option>
        <option value="false">No</option>
    </select>
    <span class="error"><sup>&emsp;<?php echo $contractErr; ?></sup></span>
</p>
<br>
<p>
    <label>Client forename:</label>
    <input type=text name="fname" <?php if(isset($fname)) echo "value='".$fname."'";?>>
    <span class="error"><sup>&emsp;<?php echo $fnameErr; ?></sup></span>
</p>
<br>
<p>
    <label>Client surname:</label>
    <input type=text name="sname">
    <span class="error"><sup>&emsp;<?php echo $snameErr; ?></sup></span>
</p>
<br>
<p>
    <label style="position: relative; top: -135px;">Client enquiry:</label>
    <textarea name=enq style="font-size: 14px; height: 150px; width: 300px;"></textarea>
    <span class="error"><sup>&emsp;<?php echo $enqErr; ?></sup></span>
</p>
<br>
<p>
    <button type=submit name=submit value=submit style="position:relative; right: -115px; height:40px; width: 100px;">Submit</button>
</p>

它运作得很好。但是,提交表单时会出现问题:由于某种原因,我定义的所有PHP变量在单击提交时都显示为空,这意味着任何自动完成/错误消息都不会显示。正如您在表单代码中看到的那样,作为测试,我将其自动填充为&#34; fname&#34;如果用户已经设置了该字段,但该字段不起作用。

这是我的PHP验证(它尚未完成,我只想先完成所有&#39; isset&#39;检查):

if ($_SERVER["REQUEST_METHOD"] == "POST") {
            if(isset($_POST["submit"])) {
                $go = true;
                $query = "INSERT INTO callLog VALUES(NULL, '";
                if(empty($_POST["date"])) {
                    $dateErr = "* Please enter a date.";
                    $go = false;
                }
                else {
                    $query .= date('Y-m-d', strtotime($_POST["date"]))."', ";
                }

                if(empty($_POST["contract"])) {
                    $contractErr = "* Please select 'Yes' or 'No'.";
                    $go = false;
                }
                else {
                    $contract = test_input($_POST["contract"]);
                    if($contract == "Yes") {
                        $contract = "TRUE";
                    }
                    else {
                        $contract = "FALSE";
                    }
                    $query .= $contract.", '";
                }

                if(empty($_POST["fname"])) {
                    $fnameErr = "* Please enter a forename.";
                    $go = false;
                }
                else {
                    $fname = test_input($_POST["fname"]);
                    $query .= $fname."', '";
                }

                if(empty($_POST["sname"])) {
                    $snameErr = "* Please enter a surname.";
                    $go = false;
                }
                else {
                    $sname = test_input($_POST["sname"]);
                    $query .= $fname."', '";
                }

                if(empty($_POST["enq"])) {
                    $enqErr = "* Please enter an enquiry.";
                    $go = false;
                }
                else {
                    $query .= $enq."');";
                }

                if($go) {
                    $conn->query($query);
                    header('Location: reception.php');
                }

                ?><script>
                    $(document).ready(function() {
                        window.location.href='reception.php?log=1';
                    });
                </script><?php
            }
        }

最后的JS只是为了在提交数据后页面重定向到呼叫日志表单页面,而不是必须单击“呼叫日志”。按钮再次。

我完全不知道为什么这不起作用。除了&#39; GET&#39;显示页面的方法,我已经完成了过去所做的一切工作。这是&#39; GET&#39;方法干扰,还是我错过了什么?

我已经看到可能尝试使用Ajax来处理提交以查看它是否可行,但我不太熟悉JQuery(只知道基础知识)并且不知道如何使用Ajax

谢谢!

1 个答案:

答案 0 :(得分:0)

你正在劫持表单提交。您onclick="window.location.href='reception.php?log=1';"只是向该页面发出GET个请求,而不是{1}}您的表单操作。