2014-10-30 5 views
-2

У меня есть этот код здесь, и по какой-то причине он примет либо первые 3 ifs как истинные, либо последние, если. Кажется, я не могу заставить его идти к одному или другому, не удаляя одного из них.php strpos делает странные вещи

Ввод, например, является «TBN D664» или «Other», и он будет сортироваться там. Но независимо от того, какой вклад я набрасываю на него, «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

Что такое вход, это то, что находится в '$ _SESSION ['Petrochemical_app']'? – Paul

+0

Второе и третье - одно и то же, не так ли? – Barmar

+1

знаете, что вы можете использовать ** elseif **? вы знаете, что в php ** switch() ** exsists? – donald123

ответ

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]), чтобы проверить это.

+0

Большое спасибо! Это билет, и это отстой, потому что я начал с этих операторов if, но я не мог заставить его работать. Ты герой, сэр. – dup3

Смежные вопросы