0

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

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

6 に答える 6

2

更新された問題の解決策:

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

パイプとアンパサンドの理由は、いずれかのフィールドに問題がある場合にエラーをスローするためです。また、body が設定されていないか、IS が設定されているかを確認する必要があります。これがうまくいったことを嬉しく思います!

于 2012-05-02T20:41:06.593 に答える
1

もう1つは、「body」変数が存在しないことを確認するためにチェックします。

if(stripos($_POST['check'], "good2go") !== false && !isset($_POST['body'])){
    //code here
}
于 2012-05-02T20:41:26.153 に答える
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「うわー、このハンバーガーいいなぁ」。

したがって、条件を次のように変更します。

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

クロスサイト リクエスト フォージェリを読みたいと思うかもしれません。これは、あなたが取り組んでいることと一致しているように思われるからです。

于 2012-05-02T20:41:30.460 に答える
0

これを試して:

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

空の値で存在できる場合は、empty代わりに使用することを検討してください。isset$_POST['body']

于 2012-05-02T20:46:52.657 に答える
0

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

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

ただし、質問のタイトルによると、三項ステートメントを使用してください。構文はそのとおりです

$var = <condition> ? <true> : <false>;
于 2012-05-02T20:40:12.927 に答える
0

1 つの変数が存在するかどうかをチェックし、「good2go」という単語に一致するもの

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

もう1つは、「body」変数が存在しないことを確認するためにチェックします。

!isset($_POST['body'])

だから、それらをまとめるだけです

if (isset($_POST['check']) AND $_POST['check'] == 'good2go' AND !isset($_POST['body'])) {        
  $error = true; 
} 
于 2012-05-02T20:40:55.810 に答える