php strpos做奇怪的事情

时间:2014-10-30 13:49:28

标签: php strpos

我在这里有这个代码,由于某种原因,它会接受前3个ifs为true或最后if。我似乎无法在不删除其中一个的情况下将其转到其中一个。

例如,输入来自TBN D664'或者'其他'它将在那里整理。但无论我投入什么输入,TAN D664'总是如此。

即使我重新排列它们,他们仍然会说无论陈述是什么,都是真的。我在我的程序中的其他地方使用了类似的代码并且工作正常,只有在这个地方才能给我带来麻烦。

if($Category == 'Petrochemical') {

    if (strpos($_SESSION['Petrochemical_app'],'TAN D664') !== false) {
        $i=37;
    } 

    elseif (strpos($_SESSION['Petrochemical_app'],'TBN D2869') !== false) {
        $i=37;
    }

    elseif (strpos($_SESSION['Petrochemical_app'],'TBN D4739') !== false) {
        $i=37;
    }

    elseif ((strpos($_SESSION['Petrochemical_app'],'H2S') !== false) ||  
        (strpos($_SESSION['Petrochemical_app'],'Other') !== false)) {
        if( (strpos($sample,'75to120') !==false) || 
            (strpos($sample,'120to200') !==false) || 
            (strpos($sample,'200ormore') !==false)){
            $i=26;
        }
        if( (strpos($sample,'10to30') !== false) || 
            (strpos($sample,'less10') !== false)){
            $i=24;
        }
        if(strpos($sample,'30to75') !== false) {
            $i=25;
        }
    }
}

如果有帮助,这是获得此特定选择的复选框。

<fieldset>
  <b>Petrochemical</b><br />
  <input onclick="document.getElementById('selector_button').disabled = false; document.getElementById('charstype').disabled = true;"name="Petrochemical_app[]" type="checkbox" value="TAN D664" id="D664"> <label for="D664">TAN: D664</label>
  <input onclick="document.getElementById('selector_button').disabled = false; document.getElementById('charstype').disabled = true;"name="Petrochemical_app[]" type="checkbox" value="TBN D2869" id="D2869"> <label for="D2869">TBN: D2869</label>
  <input onclick="document.getElementById('selector_button').disabled = false; document.getElementById('charstype').disabled = true;"name="Petrochemical_app[]" type="checkbox" value="TBN D4739" id="D4739"> <label for="D4739">TBN: D4739</label>
  <input onclick="document.getElementById('selector_button').disabled = false; document.getElementById('charstype').disabled = true;"name="Petrochemical_app[]" type="checkbox" value="H2S and Mercaptan Bromine Number" id="H2S"> <label for="H2S">H2S and Mercaptan Bromine Number</label>
  <input onclick="document.getElementById('selector_button').disabled = false; document.getElementById('charstype').disabled = true;"name="Petrochemical_app[]" type="checkbox" value="Other" id="Other"> <label for="Other">Other: specify below</label>
  <label for="Other5">Please Specify:</label> <input name="Other5" type="text" id="Other5">
  </fieldset>

我在这里把它变成了一个会话

$_SESSION['Petrochemical_app']=$_POST['Petrochemical_app'];

当我做print_r();只要我使用复选框

进行不同的选择,我就会得到这个或它的变化
Array ( [0] => TBN D4739 )  

此外,如果我将所有这些都检查出来,我会得到这个

Array ( [0] => TAN D664 [1] => TBN D2869 [2] => TBN D4739 [3] => H2S and Mercaptan Bromine Number [4] => Other ) 

P.S。感谢您帮助代码格式的人!我是一个很长一段时间的stackoverflow爬行者,这是我的第一篇文章:P

1 个答案:

答案 0 :(得分:0)

更新后,我认为错误非常明确。

if (strpos($_SESSION['Petrochemical_app'],'TAN D664') !== false) {
    $i=37;
} 

应该是

if (in_array('TAN D664', $_SESSION['Petrochemical_app'])) {
    $i=37;
} 

由于表单有几个具有相同名称的复选框,因此将值放入一个数组中,然后将其保存在会话中。您的代码在该数组上使用了字符串函数,这显然无法正常工作。您想检查数组中是否有特定值,因此应使用in_array([needle], [haystack])来检查。