2010-12-27 6 views
0

で実行されません私のコードです:PHPコードは、ここで特定の変数

$validator = new FormValidator(); 
       $firstResult = $validator->checkFirst($_POST['firstname']); 
       $lastResult = $validator->checkLast($_POST['lastname']); 
       $emailResult = $validator->validateEmail($_POST['emailaddress1']); 

       if (is_null($firstResult) && is_null($lastResult) && $emailResult) { 

        $mail = new PHPMailer(); 

        $mail->IsSMTP(); // telling the class to use SMTP 
        $mail->AddAddress("[email protected]"); 

        $mail->Subject = "test"; 
        $mail->MsgHTML($messageHTML); 

        redirectULS('english/forms/thankyou.php'); 

        if(!$mail->Send()) { 
         echo 'Message was not sent.'; 
         echo 'Mailer error: ' . $mail->ErrorInfo; 
        } else { 

         //$bridge->pushLead($lead); 
        } 
       } 

これだけ作品、私はif文から$ emailResultを削除する場合:私はそれを呼び出すのはここ

class FormValidator { 

    private $firstname; 
    private $lastname; 
    private $email; 
    private $fields_with_lengths = array('first' => 2, 'last' => 2); 
    private $color = '<span style="color:#FF0000">'; 

    function checkFirst($firstname) { 
     $first_error = NULL; 
     if(strlen(trim($firstname)) < $this->fields_with_lengths['first']){ 
      $first_error = $this->color . 'Please enter more than ' . $this->fields_with_lengths['first'] . ' characters.</span>'; 
     } 
     return $first_error; 
    } 

    function checkLast($lastname) { 
     $last_error = NULL; 
     if(strlen(trim($lastname)) < $this->fields_with_lengths['last']){ 
      $last_error = $this->color . 'Please enter more than ' . $this->fields_with_lengths['last'] . ' characters.</span>'; 
     } 
     return $last_error;  
    } 



    function validateEmail($email){ 
     return preg_match('/^[^@][email protected][a-zA-Z0-9._-]+\.[a-zA-Z]+$/', $email); 
    } 


} 

です。私は間違って何をしています。私は後でtrueまたはfalseを返す関数についての以前のコメントを考慮に入れます。今私はこのif文を修正する必要があります。ありがとう。 (いくつかの変数は、私がここに知りたいすべてのif文が動作するように取得する方法である。他の場所で設定されている。)

+1

どうしたらうまくいかないのですか?正確にはどうなりますか?もしあなたがどんな誤りがあれば、それを得るのですか? –

+0

私は間違いをしないでください。 if文のコードは$ emailResult変数で実行されません。それだけでも。それを削除すると、中括弧内のコードが実行されます。それはただの変数です。 – sehummel

答えて

1
var_dump($firstResult, $lastResult, $emailResult); 

するpreg_match()は、パターンが一致した 回数を返します。 は0回(一致しない)または1回 になります。preg_match()は最初の一致後に を検索しなくなるためです。これとは逆に preg_match_all()は、 件の件名に達するまで、 になります。 preg_match()は、 にエラーが発生した場合にFALSEを返します。所与のパターンの一致(1または0)の数を返すするpreg_match

$email = "[email protected]"; 
echo preg_match('/^[^@][email protected][a-zA-Z0-9._-]+\.[a-zA-Z]+$/', $email); //1 (true) 

$email = "me+me.com"; 
echo preg_match('/^[^@][email protected][a-zA-Z0-9._-]+\.[a-zA-Z]+$/', $email); //0 (this is not false) 

$email = "[email protected]"; 
if(1 == 1 && 0 == 0 && preg_match('/^[^@][email protected][a-zA-Z0-9._-]+\.[a-zA-Z]+$/', $email)){ 
    echo "OK"; //yup 
} 
+0

だから私はそれが1であるかどうかをチェックしてみる必要がありますか? – sehummel

+0

@ shummel7845: '1'と異なる数が' true'と評価されるので、すでに動作するはずです。別の何かが間違っているに違いない。 –

+0

あなたは!= 0を置くことができますが、それは同じことです。 echo/print $ emailResultを実行すると、確かに分かります。しかし、これはそのままで動作するはずです。 –

0

。あなたはここで非常に奇妙な方法で評価しています。それを確認したいかもしれません。

+0

評価するにはどうすればよいでしょうか? – sehummel

+0

preg_matchの結果が1の場合はtrueを返し、そうでない場合はfalseを返します。次に、一致が成立したかどうかを知る。 Webartoが上記のように、それは正しいようですが、あなたのプログラムの論理を確かめることはできません。一致するものが見つかった場合はifが発生しますか? – Spyros

+0

また、投稿された値が何であるかを確認し、一致すればpreg_match – Spyros

0

私はテストを行い、コードは正しく機能します。 ここにエラーメッセージを挿入できますか?

+0

エラーメッセージが表示されません。ただ何も起こりません。 – sehummel

+0

コメントでなければなりません。 –

関連する問題