我试图创建一个带有验证码问题的php表单,但是在提交时,表单字段被清空(如果它们没有填写所有必填字段等,则会很烦人)。我确信解决方案必须简单。
这是我提交的代码:
if ($_POST['submit']) {
if ($name != '' && $email != '') {
if ($human == '4') {
if (mail ($to, $subject, $body, $from)) {
echo '<p>Your message has been sent!</p>';
unset($_POST);
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
} else if ($_POST['submit'] && $human != '4') {
echo '<p>You answered the anti-spam question incorrectly!</p>';
}
} else {
echo '<p>You need to fill in all required fields!!</p>';
}
答案 0 :(得分:3)
看起来您可能依赖于注册全局变量(除非您在其他位置设置$name
),而应该从$_POST
获取表单数据。
为了在提交和验证失败后保留表单值,我建议保留一个可以在表单提交后修改的数组:
$display = array(
'name' => '',
'email' => '',
'message' => ''
);
if($_SERVER['REQUEST_METHOD'] == 'POST'){
foreach($_POST as $key => $value){
if(isset($display[$key])){
$display[$key] = htmlspecialchars($value);
}
}
}
在表单中,使用$display
数组设置每个值:
<form>
<input type="text" name="name" value="<?php echo $display['name']; ?>" />
<input type="text" name="email" value="<?php echo $display['email']; ?>" />
<input type="text" name="message" value="<?php echo $display['message']; ?>" />
</form>
答案 1 :(得分:0)
您没有获得表单字段的值。
你应该像$name = $_POST['name'];
答案 2 :(得分:0)
您实际上必须重新设置值,例如
<input name="text" <?php isset($_POST['text'])?'value="'.htmlspecialchars($_POST['text']).'"':''; ?>>
...
<input name="check" type="checkbox" <?php isset($_POST['check'])?'checked':''; ?>>
每种类型的领域可能需要不同的技术。
答案 3 :(得分:0)
如果填写了数据,则需要echo
表单字段,因为默认情况下,表单回发会重新加载所有HTML,以便清除字段。
你应该这样做:
<?php
$to="";
$from="";
$body="";
$subject="";
//check for "submit click"
if(isset($_POST['submit'])){
$to=$_POST['to'];
$from=$_POST['from'];
$subject=$_POST['subject'];
$body=$_POST['body'];
//your email code here
}
?>
<form action="your_script.php" method="post">
From: <input type="email" name="from" value="<?php echo $from;?>"/>
<br/>
To: <input type="email" name="to" value="<?php echo $to;?>"/>
<br/>
Subject: <input type="te3xt" name="subject" value="<?php echo $subject;?>"/>
<br/>
Body: <textarea name="body"><?php echo $body;?></textarea>
<br/>
From: <input type="email" name="from" value="<?php echo $from;?>"/>
<br/>
<input type="submit" name="submit" value="Send"/>
</form>
答案 4 :(得分:0)
,使用预填(已发布)值进行表单
存在更容易的解决方案
在form.php发送正确的缓存HTTP标头(禁用重新验证)
Date: Wed, 19 Mar 2014 11:44:01 GMT
Expires: Wed, 19 Mar 2014 11:44:01 GMT (means now, not history)
Cache-Control: private, max-age=0
Pragma: private
<form action="post.php"> ....
并在post.php发现错误
<a href="javascript:window.history.go(-1);">go back</a> and correct error
表单与发布前的状态相同
答案 5 :(得分:0)
如果你有习惯离开&#34; id&#34;财产总是等于&#34;名称&#34;你的html元素中的属性,你可以像这样做:
<script type="text/javascript" src="path/to/jquery.min.js"></script>
<script type="text/javascript">
$().ready(function(){
//<?php foreach ($_POST as $fieldName => $fieldValue): ?>
$("#<?php echo $fieldName; ?>").val("<?php echo yourSanitizationFunction($fieldValue); ?>");
//<?php endforeach; ?>
});
</script>
这将使您的代码更清晰,而不是手动设置每个字段中的值。但也许你需要使用不同的技术来收音机和检查按钮。