此代码在名为form.php的单独文件中工作正常,但是当我将其粘贴到 WordPress的主题页面,它甚至不验证表格,甚至不发送邮件。为什么我点击了wordpress主题中的“提交”按钮后为什么没有任何动作? 有人可以帮助我解决问题吗?
get_header();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$nameError = $mailError = $messageError = '';
function validate($data){
if(empty($data)){
return false;
}else{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
}
//Validate name input
if(!validate($_POST['name'])){
$nameError = 'Polje ime je obavezno.';
}else{
if (!preg_match("/^[a-zA-Z ]*$/",$_POST['name'])) {
$nameError = "Polje moze sadrzavati samo slova i razmak";
}
}
//Validate email input
if(!validate($_POST['email'])){
$mailError = 'Polje email je obavezno';
}else{
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$mailError = "Nevazeća email adresa";
}
}
//Validate message textarea
if(!validate($_POST['message'])){
$messageError = 'Molimo unesite poruku';
}
if(empty($nameError) && empty($mailError) && empty($messageError)){
//Create the body
$body = "Ime: {$_POST['name']}\n\nPoruka: {$_POST['message']}";
//Make it no longer than 70 characters long
$body = wordwrap($body, 70);
//Send the mail
mail('example@example.com', 'Contact Form Submission',
$body,
"From: {$_POST['email']}");
//Print a message
echo '<p><em>Thank you for contacting me. I will reply some day.
</em></p>';
}else{
echo '<p style="font-weight: bold; color: #C00">Please fill out
the
form completley.</p>';
}
}
HTML 与php验证位于同一文件中的代码
<section class="contact-img">
<div class="container-fluid">
<div class="row">
<?php the_post_thumbnail(); ?>
</div>
</div>
</section>
<section class="contact">
<div class="container">
<div class="row">
<?php dynamic_sidebar('contact-page'); ?>
<div class="col-md-12">
<h4 class="col-xs-12 text-center"><strong>Ostavite
poruku</strong></h4>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-xs-10 col-xs-offset-1 col-sm-6 col-sm-offset-3">
<form method="POST" action="<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<div class="form-group">
<input type="text" class="form-control" name="name"
value="" placeholder="Ime">
<div><?php if(isset($nameError)) echo $nameError; ?>
</div>
</div>
<div class="form-group">
<input type="text" class="form-control" name="email"
value="" placeholder="E-mail">
<div><span class="error"><?php if(isset($mailError))
echo $mailError; ?></span></div>
</div>
<div class="form-group">
<textarea class="form-control" name="message" rows="3"
placeholder="Poruka"></textarea>
<div><span class="error"><?php
if(isset($messageError)) echo $messageError; ?></span></div>
</div>
<input class="btn btn-default" type="button" name="button"
value="Pošalji">
</form>
</div>
</div>
</div>
</section>
答案 0 :(得分:1)
您遇到语法错误(如果关闭了错误报告功能,则会出现死亡白页)
$nameError = 'Polje moze sadrzavati samo slova i razmak;
应该是:
$nameError = 'Polje moze sadrzavati samo slova i razmak';
可以让您验证名字的另一件事是Regex很简单,它不考虑Jane Doe-Smith
,J o h n S m i t h
或j
甚至{{1} },一个空字符串。
我会用这样的东西:
''
正则表达式:
if(!preg_match("/^([a-z]+)\s+(?:([a-z]+)\s+)?([-a-z]+)$/i" , $_POST['name'])){
$nameError = 'Polje moze sadrzavati samo slova i razmak;
}
通过([a-z]+)
(前2个捕获组)匹配a
z
匹配一个或多个空格\s+
非捕获组(?...)
(可选)中间名?
通过([-a-z]+)
匹配-
和a
(用于带连字符的姓氏)z
不区分大小写的标志。测试用例:
\i
这仍然是一个很小的样本,但是应该涵盖大多数英语名称(不确定这是John Smith {match}
John E Smith {match}
Jane J Doe-Smith {match}
John {no match}
是哪种语言)。
很多年前,我曾经和一个女孩约会,名字带有连字符...大声笑。
最后一件事是打开显示错误,并将错误报告设置为Polje moze
之类的值(用于开发)。我会说使用E_ALL
和ini_set('display_errors', '1')
,但它们不会在同一文件中捕获语法错误(通常)。