0

我正在尝试用 2 个条件创建一个 if 语句。一个检查一个变量是否不存在并且与单词“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

另一个检查以确保“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 (isset($_POST['check']) && $_POST['check']=='good2go' && !isset($_POST['body']) {
   // your code 
}

但是,根据问题的标题:使用三元语句。语法是这样的

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

一种检查一个变量是否存在并匹配单词“good2go”

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

另一个检查以确保“body”变量不存在。

!isset($_POST['body'])

所以,把它们放在一起

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

试试这个:

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

考虑使用empty而不是issetif your $_POST['body']can be present with an empty value。

于 2012-05-02T20:46:52.657 回答