2010-12-27 4 views
0

Hier auszuführen ist mein Code:PHP-Code wird nicht mit bestimmten Variablen

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); 
    } 


} 

Hier ist, wo ich es nennen:

$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); 
        } 
       } 

Dies funktioniert nur, wenn ich $ emailResult aus der if-Anweisung entfernen . Was mache ich falsch. Ich werde die früheren Kommentare über Funktionen berücksichtigen, die später nur wahr oder falsch zurückgeben. Im Moment muss ich diese if-Anweisung reparieren. Vielen Dank. (Einige Variablen werden an anderer Stelle gesetzt. Alles, was ich hier wissen wollen, ist, wie die if-Anweisung an die Arbeit.)

+1

Was funktioniert nicht? Was passiert genau? Welche Fehler bekommen Sie, wenn überhaupt? –

+0

Ich bekomme keine Fehler. Der Code in der if-Anweisung wird nicht mit der Variablen $ emailResult ausgeführt. Sogar für sich. Wenn ich es entferne, wird der Code in den geschweiften Klammern ausgeführt. Es ist nur die eine Variable. – sehummel

Antwort

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

preg_match() gibt die Anzahl der mal Muster übereinstimmt. Das wird entweder 0 mal (keine Übereinstimmung) oder 1 mal , weil preg_match() nach der ersten Übereinstimmung zu stoppen. preg_match_all() dagegen wird weiterfahren bis es das Ende Thema erreicht. preg_match() gibt FALSE zurück, wenn ein Fehler aufgetreten ist.

$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

Also muss ich überprüfen und sehen, ob es gleich 1 ist, dann? – sehummel

+0

@ shummel7845: Was schon funktionieren sollte, weil jede Zahl, die sich von "1" unterscheidet, zu "true" wird. Da muss etwas anderes nicht stimmen. –

+0

Sie können! = 0 setzen, aber das ist das Gleiche. echo/print $ emailResult und dann wirst du sicher wissen. Dies sollte jedoch so funktionieren wie es ist. –

0

Preg_match die Anzahl der Übereinstimmungen für das gegebene Muster zurückgibt (entweder 1 oder 0). Sie bewerten hier auf eine sehr seltsame Art und Weise. Vielleicht möchten Sie das überprüfen.

+0

was wäre ein besserer Weg zu bewerten? – sehummel

+0

Wenn das Ergebnis von preg_match 1 ist, können Sie true, sonst false, zurückgeben. Dann weißt du, ob ein Match stattgefunden hat. Wie Webarto oben sagt, scheint es richtig zu sein, aber wir können uns der Logik Ihres Programms nicht sicher sein. Das passiert wenn eine Übereinstimmung gefunden wird oder? – Spyros

+0

überprüfen Sie auch, was der gebuchte Wert ist und wenn es übereinstimmt, wäre es eine gute Idee, das Ergebnis von preg_match – Spyros

0

Alter, ich habe einen Test gemacht und Ihr Code funktioniert richtig. Können Sie die Fehlermeldung hier setzen?

+0

Ich erhalte keine Fehlermeldung. Es passiert einfach nichts. – sehummel

+0

Sollte ein Kommentar sein. –

Verwandte Themen