Удалить конкретные определения из переменной в PHP - PullRequest
0 голосов
/ 31 декабря 2010

У меня есть скрипт почты PHP, который проверяет имя, адрес электронной почты и номер телефона перед отправкой почты. Это означает, что поля Имя, Адрес электронной почты и Телефон Обязательные Поля.

Я хочу, чтобы Имя и ИЛИ Электронная почта или Телефон . Таким образом, если вводятся имя и телефон, он отправляет почту, или если вводятся имя и адрес электронной почты, он также отправляет электронную почту.

В настоящий момент скрипт работает так, как будто он имеет несколько операторов 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. Затем проверьте эту переменную и, если она истинна, удалите часть $ phoneError из переменной $ errors.

Чувак, я надеюсь, что здесь есть какой-то смысл. Кто-нибудь знает, почему это не работает? Он сообщает обо всех ошибках, если все поля оставлены пустыми: (

Спасибо! Amit

Ответы [ 4 ]

1 голос
/ 31 декабря 2010

так ...

$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 голос
/ 31 декабря 2010

Сначала необходимо создать массив ошибок, например:

$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>';
}
0 голосов
/ 31 декабря 2010

Хотя это и не выгодно использовать способ Selsaek (см. Выше), один из способов сделать это - использовать битовую маску (набор констант с степенями 2 и одну переменную хранения).Вы ИЛИ переменную хранения с константой, а затем, когда вы И две вместе позже, ненулевой результат означает, что флаг был отключен.Нет причин, по которым вы не можете использовать массив для хранения флага и текста:

$WARNING_MASK = array('name' => 1, 'email' => 2, 'phone' => 4);
$warningflag = 0;

для установки флага как ошибки (вы ИЛИ переменная хранения с константой):

$warningflag = $warningflag | $WARNING_MASK['name'];

для проверки на наличие ошибки (вы И значение хранилища с константой):

if ($warningflag & $WARNING_MASK['name']) {}
0 голосов
/ 31 декабря 2010

Я считаю,

if ( !($errors) )

должно быть

if ( !$errors )
//or
if( !isset( $errors ) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...