2010-12-30 14 views
0

メールを送信する前に、名前、電子メールアドレス、および電話番号を検証するPHPメールスクリプトがあります。これは、名前、電子メールアドレス、および電話のフィールドがであることを意味します。フィールド。PHPの変数から特定の定義を削除する

私は名前EITHERメールまたは電話が必要とされるように、それを持っていると思います。名前と電話が入力された場合はメールを送信し、名前とメールが入力された場合はメールも送信します。

スクリプトは現在、(1)名前、(2)電子メール、(3)電話をチェックするいくつかのIF文を持っています。ここでは、コードのif文の例です:

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

これはしかし動作しません:

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

そして、ここではそれがメールを送信する方法です。基本的にこれは私がやりたいことです。電子メールアドレスが入力されていない場合、または入力が間違っている場合は、$ email_errorという変数をtrueに設定します。その変数をチェックし、それが真であれば、$ errors変数の$ phoneError部分を削除します。

男私はここでいくつかの意味を作っていると思います。誰もがなぜこれがうまくいかないか知っていますか?すべてのフィールドを空のままにしている場合は、すべてのエラーを報告:(

ありがとう! アミット

答えて

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>'; 
} 
+0

魅力のように働いて、ありがとう。 – Amit

0

私は

if (!($errors)) 

はそう

if (!$errors) 
//or 
if(!isset($errors)) 
+0

私はあなたが私の質問に誤解していると思います。このスクリプトは、エラーのテストに使用されます。エラーの3つのフィールド(名前、電話、電子メール)をすべてテストし、そのようなエラーが存在する場合は、3つすべてを$ errors変数に格納します。次に、$ errors変数をテストして空であるかどうかを確認し、空であればメールを送信します(そうでなければecho $ errors)。私はそれが今IF電子メールフィールドが無効だが、電話フィールドが有効であることを確認するためにテストをしたいと思います。電話フィールドが無効で電子メールフィールドが有効な場合、STILLはメールを送信します。あなたは2つのうちの1つだけ(電話/電子メール)が必要ですが、 – Amit

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); 
+0

のifステートメント内のバリデーションメソッドを移動し、無効なフォーマットの$ errorsスタックに追加することはできません。 – FatherStorm

+0

私は疑いがありますこれは動作しますが、私の最後に書き直す必要があります。変数から定義を削除する簡単な方法はありますか?たとえば、私は '$ errors = $ aを持っています。 $ b'を削除してから、 '$ b'を' $ errors'から削除したいのですが、そのようなことをする方法はありますか? '$ errors = $ errors - $ b'のように並べ替えられますが、うまくいきません。 – Amit

+0

そのため、私はそれらを配列に積み重ねています。 $ errors ['emailInvalid'] = 'あなたのメールアドレスが無効であるようです。'そして、unset($ errors ['emailInvalid']を使ってメールを削除してください。 '])); – FatherStorm

0

ありますがSelsaekのやり方(上記)を行う以上の利点は、それを行う方法の1つはビットマスク(2の累乗である定数のセットと1つのストレージ変数)です。あなたはOR変数を定数で置き換えた後、2つのANDを後で組み合わせると、0以外の結果はフラグがトリップしたことを意味します。理由もなくあなたはフラグとテキスト格納する配列を使用することはできません。

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

は、エラーフラグを設定するために(あなたや定数格納変数):

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

をテストしますエラー(あなたは定数と記憶値をANDします):

if ($warningflag & $WARNING_MASK['name']) {} 
関連する問題