【发布时间】:2015-11-13 10:27:35
【问题描述】:
我的页面上有一个评论/问题表单。在我实现“提交”代码之前,它会检查验证工作。现在,每次我点击提交时,它都会进入我的“已发送消息”页面,即使我知道它不会分页验证。
我已经检查了一些相关的答案,但无法得到这个答案...
*注意:删除了一些值以达到重点
主要PHP:
<section style="-webkit-flex-direction: column; flex-direction: column;">
<?php include '/home/ubuntu/workspace/commentform.php';?>
<h2>Questions & Concerns</h2><br>
<p><span class="error">* required field</span></p><br>
<form name="contactform" method="post" action="comment-handler.php">
Full Name: <input type="text" name="name" value="<?php echo $name;?>" style="width:22em">
<span class="error">* <?php echo $nameErr;?></span><br><br>
Phone Number: (xxx) xxx-xxxx <input type="text" name="phone" value="<?php echo $phone;?>" style="width:9.5em"><br><br>
E-mail: <input type="text" name="email" value="<?php echo $email;?>" style="width: 25em">
<span class="error">* <?php echo $emailErr;?></span><br><br>
Comment:<br><sub>*500 Character Maximum.</sub>
<textarea name="comment" size="500" maxlength="500" rows="10" column="50" style="width: 50em; height: 10em"><?php echo $comment;?></textarea><br><br>
<input type="submit" name="submit" value="Submit">
</form>
</section>
错误处理表单
<?php
$nameErr = $phoneErr = $emailErr = $invoiceErr = "";
$name = $phone = $email = $invoice = $response = $comment = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}
if (empty($_POST["phone"])) {
$phone = "";
} else {
$phone = test_input($_POST["phone"]);
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
Comment-Handler(提交动作)表单:
<?php
$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$invoice = $_POST['invoice'];
$callResponse = $_POST['callResponse'];
$textResponse = $_POST['textResponse'];
$emailResponse = $_POST['emailResponse'];
$comment = $_POST['comment'];
$content = "Name: $name \n\nPhone: $phone \n\nEmail: $email \n\nInvoice #: $invoice \n\nContact Preference(s):\nCall: $callResponse Text: $textResponse Email: $emailResponse \n\n Question/Concern:\n\n $comment";
ini_set('display_errors',1);
if(isset($_POST['submit'])){
$to = '7servicerepairs@gmail.com';
$subject = "New Question For Se7en Service!";
$txt = $content;
$headers = array("From: info@se7enservice.com", "Reply-To: $email");
$headers = implode("\r\n", $headers);
mail($to,$subject,$txt,$headers);
if(mail($to,$subject,$txt,$headers)) {
include '/home/ubuntu/workspace/sentMessage.php';
} else {
echo '<p>Message DID NOT Sent. Please Try Again.</p>';
}
}
?>
【问题讨论】:
-
您希望在单击提交按钮和请求发送到服务器之间,还是在请求发送到服务器之后进行验证?
-
那么它什么时候验证或根本不验证?
Error Handling Form在哪里使用? -
Mike - 在单击提交按钮和将请求发送到服务器之间。 @chris85 目前,它根本没有验证。在我创建comment-handler.php 并将表单的操作设置为等于它之前,它已经完成了。在表单操作等于 "" 之前,验证工作,出现错误时刷新屏幕,并显示哪些输入有错误。
-
所以
commentform.php==Error Handling Form?如果是这样,那就是问题所在。 PHP 是服务器端,因此它仅在页面加载时可用。当您单击提交时,它会转到comment-handler.php,因此您的验证规则永远不会运行。您可以进行 ajax 检查,在实际提交之前将表单提交到commentform.php。 (您仍然需要服务器端检查,以避免绕过 ajax 的恶意用户)。 -
好的,我该如何解决。以前从未使用过ajax检查。你能解释一下吗?或者我结合commenform.php和comment-handler.php,我如何组织它以确保表单不提交,除非它通过所有验证规则?
标签: php html forms validation form-submit