从PHP中的变量中删除特定定义

时间:2010-12-30 21:21:49

标签: php email variables

我有一个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部分。

男人,我希望我在这里有所作为。有谁知道为什么这不起作用?如果所有字段都为空,它会报告所有错误:(

谢谢! 阿米特

4 个答案:

答案 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']) {}