我有一个PHP邮件脚本,可以在发送邮件之前验证姓名,电子邮件地址和电话号码。这意味着名称,电子邮件地址和电话字段是必需字段。
我想拥有它以便名称和 EITHER 电子邮件或电话是必需的。这样如果输入了姓名和电话,它就会发送邮件,或者如果输入了姓名和电子邮件,它也会发送电子邮件。
脚本现在的工作方式是它有几个IF语句,用于检查(1)名称,(2)电子邮件和(3)电话。以下是代码的if语句示例:
if ( ($email == "") ) {
$errors .= $emailError; // no email address entered
$email_error = true;
}
if ( !(preg_match($match,$email)) ) {
$errors .= $invalidEmailError; // checks validity of email
$email_error = true;
}
以下是发送邮件的方式:
if ( !($errors) ) {
mail ($to, $subject, $message, $headers);
echo "<p id='correct'>";
echo "ההודעה נשלחה בהצלחה!";
echo "</p>";
} else {
if (($email_error == true)) {
$errors != $phoneError;
/*echo "<p id='errors'>";
echo $errors;
echo "</p>";*/
}
if (($phone_error == true)) {
$errors != $emailError;
$errors != $invalidEmailError;
/*echo "<p id='errors'>";
echo $errors;
echo "</p>";*/
}
echo "<p id='errors'>";
echo $errors;
echo "</p>";
}
但这不起作用。基本上这就是我想要做的:如果没有输入电子邮件地址或输入错误,请将名为$ email_error的变量设置为true。然后检查该变量,如果是,则删除$ errors变量的$ phoneError部分。
男人,我希望我在这里有所作为。有谁知道为什么这不起作用?如果所有字段都为空,它会报告所有错误:(
谢谢! 阿米特
答案 0 :(得分:1)
所以...
$sent=false;
if(!$name){
$errors[]='No Name was supplied.';
return($errors);
}
if($phone && validatePhone($phone)){
//send the phone message however...
$sent=true;
}
if($email && validateEmail($email)){
//send the email here...
$sent=true;
}
if(!$sent){
$errors[]='Neither an email or a phone was supplied';
return($errors);
}
归类:
class Communication {
var $sent=false;
var $errors=false;
public function __construct(){
$this->phone=$_POST['phone'];
$this->email=$_POST['email'];
$this->name=$_POST['name'];
if($this->validateName()){
$this->validateEmail();
$this->validatePhone();
}
}
public function validateEmail(){
//do your regex here and eval either false or true to $status
if(!$status){
$this->errors['ErrorInvalidEmail']=ErrorInvalidEmail;
}else{
$this->sendEmail();
}
}
public function validatePhone(){
//do your regex here and eval either false or true to $status
if(!$status){
$this->errors['ErrorInvalidPhone']=ErrorInvalidPhone;
}else{
$this->sendText();
}
}
public function validateName(){
//do your regex here and eval either false or true to $status
if(!$status){
$this->errors['ErrorInvalidName']=ErrorInvalidName;
return(false);
}else{
return(true);
}
}
public function sendEmail(){
$this->sent=true;
//do your sending by email HERE
}
public function sendText(){
$this->sent=true;
// do your sending by text/phone here
}
}
$c=new Communication();
print_r($c->errors);
答案 1 :(得分:1)
首先需要建立一系列错误,即:
$errors = array();
if (!$phone) { // add more validation as required
$errors['phone'] = $phoneError;
}
if (!$email) {
$errors['email'] = 'No email provided';
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors['email'] = 'Invalid email provided';
}
然后发送或显示错误:
if (!isset($errors['phone']) || !isset($errors['email'])) {
// send mail here, only if either the phone or the email error is missing
} else {
// display errors
echo '<p id="errors">';
foreach ($errors as $error) {
echo $error;
}
echo '</p>';
}
答案 2 :(得分:0)
我相信
if ( !($errors) )
应该是
if ( !$errors )
//or
if( !isset( $errors ) )
答案 3 :(得分:0)
虽然做Selsaek的方式(上图)没有任何好处,但一种方法是使用位掩码(一组常量为2的幂,以及一个存储变量)。您将存储变量与常量一起使用,然后当您和两者一起使用时,非零结果意味着该标志被触发。没理由你不能使用数组存储标志和文本:
$WARNING_MASK = array('name' => 1, 'email' => 2, 'phone' => 4);
$warningflag = 0;
将标志设置为错误(或者将存储变量设为常量):
$warningflag = $warningflag | $WARNING_MASK['name'];
测试错误(您和存储值的常量):
if ($warningflag & $WARNING_MASK['name']) {}