Php 验证表单不工作
我的表单工作正常,但现在我的表单有一个问题:即使表单正确且完整,也不会发送邮件,如果输入不正确(例如地址邮件或电话号码或输入名称的最小长度),也不会发送错误消息 主机的(最后一个)PHP版本是5.6.10 拜托,有人能帮我吗?Thx 表格编号:Php 验证表单不工作,php,forms,Php,Forms,我的表单工作正常,但现在我的表单有一个问题:即使表单正确且完整,也不会发送邮件,如果输入不正确(例如地址邮件或电话号码或输入名称的最小长度),也不会发送错误消息 主机的(最后一个)PHP版本是5.6.10 拜托,有人能帮我吗?Thx 表格编号: <?php session_start(); ?> <!DOCTYPE....> <head> ... </head> <body> ... ... <?ph
<?php session_start(); ?>
<!DOCTYPE....>
<head>
...
</head>
<body>
...
...
<?php include 'scripts/contact.php'; ?>
<form action="Contact.php" method="post" accept-charset="UTF-8">
<table id="formular">
<tr>
<td><label for="nume">Nume: <span style="color: red"><sup>*</sup></span> </label></td>
<td><input type="text" name="nume" id="nume" maxlenght="20" value="<?php echo $_POST['nume']; ?>" /></td>
<td><span class="err"><?php if(isset($errors['nume'])&&$error) { print $errors['nume']; } ?></span></td>
</tr>
<tr>
<td><label for="prenume">Prenume: <span style="color: red"><sup>*</sup></span> </label></td>
<td><input type="text" name="prenume" id="prenume" maxlenght="20" value="<?php echo $_POST['prenume']; ?>" /></td>
<td><span class="err"><?php if(isset($errors['prenume'])&&$error) { print $errors['prenume']; } ?></span></td>
</tr>
<tr>
<td><label for="telefon">Telefon: <span style="color: red"><sup>*</sup></span> </label></td>
<td><input type="text" name="tel" id="tel" maxlenght="20" value="<?php echo $_POST['tel']; ?>" /></td>
<td><span class="err"><?php if(isset($errors['tel'])&&$error) { print $errors['tel']; } ?></span></td>
</tr>
<tr>
<td><label for="email">Email: <span style="color: red"><sup>*</sup></span> </td>
<td><input type="text" name="email" id="email" maxlength="50" value="<?php echo $_POST['email']; ?>" /></label></td>
<td><span class="err"><?php if(isset($errors['email'])&&$error) { print $errors['email']; } ?></span></td>
</tr>
<tr>
<td><label for="mesaj">Mesaj: <span style="color: red"><sup>*</sup></span> </label></td>
<td><textarea cols="20" rows="5" wrap="virtual" id="mesaj" name="mesaj" maxlength="150" onkeyup="nrcaractere()"><?php echo $_POST['mesaj']; ?></textarea><br>
<div id="ramase">150 chars remaining</div>
<script type="text/javascript">window.ready = nrcaractere();</script></td>
<td><span class="err"><?php if(isset($errors['mesaj'])&&$error) { print $errors['mesaj']; } ?></span></td>
</tr>
<tr>
<td></td>
<td align="center">
<button type="submit" name="trimite" />Trimite</button>
<button type="button" name="reset" onClick="sterge()" />Reset</button></td>
<td></td>
</tr>
</table>
</form>
...
...
...
...
...
Nume:*
听起来您有两个问题,一个是验证问题,另一个是发送电子邮件问题。首先解决最简单的问题:首先看看您的邮件设置是否正确——php是否可以正常发送电子邮件,或者这是您的代码有问题吗?我使用以下php脚本来告诉我服务器是否正确设置为发送电子邮件:
<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
$from = "<YOUR EMAIL>";
$to = "<YOUR EMAIL>";
$subject = "PHP Mail Test script";
$message = "This is a test to check the PHP Mail functionality";
$headers = "From:" . $from;
mail($to,$subject,$message, $headers);
echo "Test email sent";
?>
它不工作,你需要配置服务器让php发送电子邮件。我喜欢使用ssmtp守护进程来简化向SMTP服务器发送电子邮件的过程
至于验证代码,很难理解。您是否考虑过改用验证库?您甚至可以使用原始HTML5——请参见此处:
但如果您真的想使用自己的php验证器,我个人会编写如下内容:
<?php
$validation_elements = array(
'nume' => function() {
if (!isset($_POST['nume'])) return 'You must enter your nume';
if (!preg_match('/^[a-zA-Z]{1,}$/',$_POST['nume']) return 'Your nume can only be letters.;'
return false;
},
'prenume' => function() {
if (!isset($_POST['Mandatory'])) return 'Your prenume is mandatory';
if (!preg_match('/^[a-zA-Z]{1,}$/',$_POST['prenume'])) return "Your presume can only consist of letters";
if (strlen($_POST['prenume'])<3) return "Your presume is too short.";
return false;
},
'tel' => function() {
if (!isset($_POST['tel']) return false; // in this example tel is not mandatory but must match the following rule if it is present:
if ( !preg_match('/^[0-9]{4}[\s.]{0,1}[0-9]{3}[\s.]{0,1}[0-9]{3}$/', $_POST['tel']) && !preg_match('/^[0-9]{3}[\s.]{0,1}[0-9]{3}[\s.]{0,1}[0-9]{2}[\s.]{0,1}[0-9]{2}$/', $_POST['tel']) && ($_POST['tel'] != '-')) return ' Mask: 021.021.02.01 or 0740.123.456 or -';
return false;
},
'email' => function() {
if (!isset($_POST['email'])) return 'Your email is mandatory';
if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $_POST['email'])) return "Your email address must be like something@something.something";
return false;
},
'mesaj' => function() {
if (!isset($_POST['mesaj'])) return 'Your mesaj is mandatory';
if (strlen($_POST['mesaj'])<15) return 'Mesaj too short. Min. 15 chars';
if (strlen($_POST['mesaj'])>150) return 'Mesaj too long. Max 150 chars.';
return false;
}
}
foreach ($validation_elements as $validation_element => $validation_rule) {
$errors = array();
if ($validation_rule()) {
$errors[] = $validation_rule($validation_element);
}
}
if (!empty($errors)) {
echo "The form was not completed because: <ul>";
foreach ($errors as $error) {
echo "<li>$error</li>";
}
echo "</ul>";
} else {
send_email();
}
听起来您有两个问题,一个是验证问题,另一个是发送电子邮件问题。首先解决最简单的问题:首先看看您的邮件设置是否正确——php是否可以正常发送电子邮件,或者这是您的代码有问题吗?我使用以下php脚本来告诉我服务器是否正确设置为发送电子邮件:
<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
$from = "<YOUR EMAIL>";
$to = "<YOUR EMAIL>";
$subject = "PHP Mail Test script";
$message = "This is a test to check the PHP Mail functionality";
$headers = "From:" . $from;
mail($to,$subject,$message, $headers);
echo "Test email sent";
?>
它不工作,你需要配置服务器让php发送电子邮件。我喜欢使用ssmtp守护进程来简化向SMTP服务器发送电子邮件的过程
至于验证代码,很难理解。您是否考虑过改用验证库?您甚至可以使用原始HTML5——请参见此处:
但如果您真的想使用自己的php验证器,我个人会编写如下内容:
<?php
$validation_elements = array(
'nume' => function() {
if (!isset($_POST['nume'])) return 'You must enter your nume';
if (!preg_match('/^[a-zA-Z]{1,}$/',$_POST['nume']) return 'Your nume can only be letters.;'
return false;
},
'prenume' => function() {
if (!isset($_POST['Mandatory'])) return 'Your prenume is mandatory';
if (!preg_match('/^[a-zA-Z]{1,}$/',$_POST['prenume'])) return "Your presume can only consist of letters";
if (strlen($_POST['prenume'])<3) return "Your presume is too short.";
return false;
},
'tel' => function() {
if (!isset($_POST['tel']) return false; // in this example tel is not mandatory but must match the following rule if it is present:
if ( !preg_match('/^[0-9]{4}[\s.]{0,1}[0-9]{3}[\s.]{0,1}[0-9]{3}$/', $_POST['tel']) && !preg_match('/^[0-9]{3}[\s.]{0,1}[0-9]{3}[\s.]{0,1}[0-9]{2}[\s.]{0,1}[0-9]{2}$/', $_POST['tel']) && ($_POST['tel'] != '-')) return ' Mask: 021.021.02.01 or 0740.123.456 or -';
return false;
},
'email' => function() {
if (!isset($_POST['email'])) return 'Your email is mandatory';
if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $_POST['email'])) return "Your email address must be like something@something.something";
return false;
},
'mesaj' => function() {
if (!isset($_POST['mesaj'])) return 'Your mesaj is mandatory';
if (strlen($_POST['mesaj'])<15) return 'Mesaj too short. Min. 15 chars';
if (strlen($_POST['mesaj'])>150) return 'Mesaj too long. Max 150 chars.';
return false;
}
}
foreach ($validation_elements as $validation_element => $validation_rule) {
$errors = array();
if ($validation_rule()) {
$errors[] = $validation_rule($validation_element);
}
}
if (!empty($errors)) {
echo "The form was not completed because: <ul>";
foreach ($errors as $error) {
echo "<li>$error</li>";
}
echo "</ul>";
} else {
send_email();
}
我前面的答案的问题是它不可移植——你不能把代码带到别处使用。在我之前的回答中,我暗示有另一种更好的方法来编写验证例程。给你。它更复杂,但只是稍微复杂一点
<?php
$validation_rules = array(
'tel' => array(
'required' => true
),
'mesaj' => array(
'lessThan' => 150,
'moreThan' => 15,
'alphanumeric' => true
), <etc>
);
$errors = array();
/* Note: you could also write each validation rule like this:
function required($input, $is_required) {
... <etc>
}
The function name is the name of the validation rule in the above array.*/
$validation_types = array() {
'required' => function($input, $is_required) {
$isset = isset($_POST[$input]));
return ($is_required && !$isset) ? "$input is required" : false;
},
'alphanumeric' => function($input, $is_required) {
return preg_match('/^[a-zA-Z]{1,}$/',$_POST[$input] ? "$input must be alphanumeric" : false;
},
'likeEmail' => function($input, $is_required) {
return !preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $_POST[$input]) ? "$input must be like an email address" : false;
},
'lessThan' => function($input, $value) {
return (!strlen($input) < $value) ? "$input must be less than $value" : false;
}, <etc>
}
foreach ($validation_rules as $input=>$rules) {
foreach($rules as $rule=>$params) {
$validation_failed = $validation_types[$rule]($input, $params);
// if you used the simpler way of declaring validation rules,use this instead:
// $validation_failed = $rule($input, $params);
if ($validation_failed) {
$errors[] = $validation_failed;
}
}
}
我前面的答案的问题是它不可移植——你不能把代码带到别处使用。在我之前的回答中,我暗示有另一种更好的方法来编写验证例程。给你。它更复杂,但只是稍微复杂一点
<?php
$validation_rules = array(
'tel' => array(
'required' => true
),
'mesaj' => array(
'lessThan' => 150,
'moreThan' => 15,
'alphanumeric' => true
), <etc>
);
$errors = array();
/* Note: you could also write each validation rule like this:
function required($input, $is_required) {
... <etc>
}
The function name is the name of the validation rule in the above array.*/
$validation_types = array() {
'required' => function($input, $is_required) {
$isset = isset($_POST[$input]));
return ($is_required && !$isset) ? "$input is required" : false;
},
'alphanumeric' => function($input, $is_required) {
return preg_match('/^[a-zA-Z]{1,}$/',$_POST[$input] ? "$input must be alphanumeric" : false;
},
'likeEmail' => function($input, $is_required) {
return !preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $_POST[$input]) ? "$input must be like an email address" : false;
},
'lessThan' => function($input, $value) {
return (!strlen($input) < $value) ? "$input must be less than $value" : false;
}, <etc>
}
foreach ($validation_rules as $input=>$rules) {
foreach($rules as $rule=>$params) {
$validation_failed = $validation_types[$rule]($input, $params);
// if you used the simpler way of declaring validation rules,use this instead:
// $validation_failed = $rule($input, $params);
if ($validation_failed) {
$errors[] = $validation_failed;
}
}
}
我没有看到mesaj
name属性。报告错误。抱歉,已编辑并更新。ThxI请参见无mesaj
name属性。报告错误。抱歉,已编辑并更新。谢谢