2012-05-02 7 views
0

私は2つの条件でif文を作成しようとしています。 1つの変数が存在しないかどうかをチェックするものは&は "good2go"という単語に一致し、もう1つは "body"変数が存在することを確認するものです。私はここでエラーメッセージをトリップしようとしています。ここに私が持っているものと私が試したものがあり、どれもうまくいかないようです。ifnot文とif文を1行で作成する

if (stripos($_POST['check'], 'good2go') == FALSE && $_POST['body']) {   
       $error = true; } 

if (!$_POST['check'] == 'good2go' && $_POST['body']) { 
       $error = true; } 

if (!stripos($_POST['check'], 'good2go') && $_POST['body']) { 
       $error = true; } 

if ((!stripos($_POST['check'], 'good2go')) && $_POST['body']) { 
       $error = true; } 

これを動作させるにはどうすればよいですか?

ここには、検証コードと電子メールコードが記載されているcontact_us.phpのコード全体があります。

$error = false; 
    if (isset($_GET['action']) && ($_GET['action'] == 'send')) { 

      // Winnie the pooh check 
     //$t = tep_db_prepare_input($_POST['verify']); 
     if (!isset($_POST['check']) && !$_POST['check']=='good2go' && isset($_POST['body'])) { 
       $error = true;    
     } else { // Winnie the pooh Check 

    $name = tep_db_prepare_input($_POST['name']); 
    $email_address = tep_db_prepare_input($_POST['email']); 


//IP recorder start 
$ipaddress = $_SERVER["REMOTE_ADDR"]; 
$ip = "\n\nIP: " . $ipaddress; 
$content = "\n\nName: ".$name."\n\nComments: ".$_POST['enquiry']; 
$product = tep_db_prepare_input($_POST['product']); 
    if ($product) { 
$product_text = "\n\nProduct Interest: ".$product; } 
$content_ip = $content . $product_text. $ip; 
$enquiry = tep_db_prepare_input($content_ip); 
//IP recorder end 


     } 
// BOF: Remove blank emails 
// if (tep_validate_email($email_address)) { 
// tep_mail(STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, EMAIL_SUBJECT, $enquiry, $name, $email_address); 
// tep_redirect(tep_href_link(FILENAME_CONTACT_US, 'action=success')); 
// } else { 
// $error = true; 
// $messageStack->add('contact', ENTRY_EMAIL_ADDRESS_CHECK_ERROR); 
    if (! tep_validate_email($email_address)) { 
     $error = true; 
     $messageStack->add('contact', ENTRY_EMAIL_ADDRESS_CHECK_ERROR); 
    } 
    if ($enquiry == '') { 
     $error = true; 
     $messageStack->add('contact', ENTRY_EMAIL_CONTENT_CHECK_ERROR); 
    } 
    if ($error == false) {  
     tep_mail(STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, EMAIL_SUBJECT, $enquiry, $name, $email_address); 

     tep_redirect(tep_href_link(FILENAME_CONTACT_US, 'action=success')); 
// EOF: Remove blank emails 
    } 
    } 
+2

変数が存在するかどうかを確認するには、isset()を使用します。また、if文が機能するはずです。 – dweiss

+0

私はごめんなさい、私は元のコメントが混ざって、私は完全な反対を意味した。 DOH! – sven30

+0

!isset()が存在しないかどうかをチェックし、あなたがうまく動作しているような!striposも – dweiss

答えて

2

ソリューションを入れて:

if (!isset($_POST['check']) || !$_POST['check']=='good2go' || !isset($_POST['body'])) { 
       $error = true;    
} 

アンパサンド対パイプの理由は、あなたがエラーをスローしたいということですフィールドのANYに問題がある場合また、ボディがセットされていないか、ISがセットされているかをチェックしたいとします。これはあなたのためにうまくいってうれしい!

+0

これは私が最後に使ったコードです:if(($ _POST ['body'] || $ _POST ['check']!== 'good2go')){ – sven30

0

これらの不要な機能はすべて必要ありません。あなたが達成しようとしていることである。

if (isset($_POST['check']) && $_POST['check']=='good2go' && !isset($_POST['body']) { 
    // your code 
} 

しかし、質問のタイトルを1としては三元の文を使用してください。構文は、このような

$var = <condition> ? <true> : <false>; 
一つの変数が&は「good2go」必ず「体」を作るためにチェック

isset($_POST['check']) AND $_POST['check'] == 'good2go' 

や他の単語と一致して存在しているかどうかを確認する

+0

私はあなたが質問を読むとは思わない。 – dweiss

+0

@dweiss。ハハ、本当。今私は答えを決めました。あなたの投票を見直してください。ありがとうございました:) – Starx

+0

ありがとう!個人的に何も意味するものではありませんでした。ちょうど実際に問題に関連していませんでした。 – dweiss

0

一つとしてあります変数は存在しません。

!isset($_POST['body']) 

ので、ちょうどあなたの更新の問題に一緒に

if (isset($_POST['check']) AND $_POST['check'] == 'good2go' AND !isset($_POST['body'])) {   
    $error = true; 
} 
+0

私は反対が必要です。 – sven30

+0

私は$ _POST ['check']が空であるか、good2goと等しくないようにする必要があります。私はテストのためにエラーを出すことができるようにボディに値が必要です。それ以外の場合はフォームを通過させます。フォーム用のハニーポットを作りようとしています。 – sven30

1

と、「body」変数が存在しないことを確認するその他のものがあります。

if(stripos($_POST['check'], "good2go") !== false && !isset($_POST['body'])){ 
    //code here 
} 
+0

私は$ _POST ['check' ]どちらかが空であるか、それともgood2goと等しくないかのどちらかになります。私はテストのためにエラーを出すことができるようにボディに値が必要です。それ以外の場合、フォームは正常に終了します。フォーム用のハニーポットを作りようとしています。 – sven30

1

stripos機能に関するPHPのドキュメントによると:

この関数は論理値FALSEを返すことがありますが、またFALSEと評価され非ブール値を返すことがあります。詳細についてはブーリアンに関するセクションをお読みください。この関数の戻り値をテストするには、===演算子を使用します。

// Doing stripos checks you MUST use === (not ==) 
if (stripos($_POST['check'], 'good2go') !== FALSE && $_POST['body']) {   
      $error = true; } 

そして、あなたが上記を変更することができます何$_POST['body']が存在しないかどうかを確認するために:

だから、あなたはに最初の行を変更する必要があります - 更新

if (stripos($_POST['check'], 'good2go') !== FALSE && (!isset($_POST['body'])) { 

-

あなたのコメントによると、$_POST['check']は「good2go」に等しくなる必要があります。striposは、正確に等しいか文字列の一部であるかにかかわらず、good2goの存在をチェックします。 「うわー、このハンバーガーはgood2goです。

だから、私は条件付きに変更になります。

if (((isset($_POST['body'])) && (strlen($_POST['body']) > 0)) && ((!isset($_POST['check'])) || ($_POST['check'] !== 'good2go'))) { 
    // Post body has a value and Post check DOES NOT equal good2go, someone is hax0rin! 
} 

それはあなたが作業しているものと右のインラインだとあなたはCross-site request forgery上に読むことをお勧めします。

+0

私はgood2goに相当する$ _POST ['check']が必要です。エラーを出すためにbody変数に値が必要です。それは私の目標はここに私のハーフポットを構築しようとしているので、エラーを旅行しようとしている私はハローポットを構築しようとしているので、ボットはフォーム上のボディフィールドを埋めると、それはエラーをトリップしますが、またgood2goは、誰かまたはボットがこのスクリプトを実行するために別のフォームを使用しようとしている場合、これらの変数はそれを通過する必要があり、そうでなければエラーをトリップするので、「good2go」と等しくない。 – sven30

+0

申し訳ありませんが、私は混乱しています。私は$ _POST ['check']が空であるか、good2goと等しくなくてエラーをトリップする必要があります。 – sven30

+0

Lol、私はちょうどそれが役立つかどうか、私がリファクタリングするかどうかを参照して更新しました.... –

0

はこれを試してください:あなたの$_POST['body']は空の値を持つ存在することができる場合

if(!empty($_POST['check']) && $_POST['check']=='good2go' && empty($_POST['body'])) { $error=true; } 

ではなくissetemptyを使用することを検討してください。

+0

私は$ _POST ['check']が空であるか、good2goと等しくないようにする必要があります。私はテストのためにエラーを出すことができるようにボディに値が必要です。それ以外の場合は、フォームを正常に通過させます。フォーム用のハニーポットを作りようとしています。 – sven30