我对网络开发领域相对较新,并被指派创建一个能够记录呼叫的网站。 我已经使用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> <?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> <?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> <?php echo $fnameErr; ?></sup></span>
</p>
<br>
<p>
<label>Client surname:</label>
<input type=text name="sname">
<span class="error"><sup> <?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> <?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
谢谢!
答案 0 :(得分:0)
你正在劫持表单提交。您onclick="window.location.href='reception.php?log=1';"
只是向该页面发出GET
个请求,而不是{1}}您的表单操作。