Пожалуйста, объясните, почему я не могу получить переменный сеанс для «пистолета», чтобы установить или $ _SESSION [ «сообщил»], но он отлично работает для «Винтовки»PHP условные StrPos проверить косяк набор переменного сеанса
формы ЧТО ПОСТЫ ДАННЫЕ
<form name="<?=$prodadd?>" id="<?=$prodadd?>" method="post" action="process.php">
<input type="hidden" name="formid" value="addtocart" />
<!-- other input fields here -->
<input type="hidden" name="type" value="<?=$row['Type']?>" />
<input type="hidden" name="weight" value="<?=$row['Weight']?>" />
<!-- other input fields here -->
</form>
ПРОСТОЙ ЗАЕЗД process.php УСТАНОВКА SESSION Variable:
if (strpos($_POST[type],"Pistol")) {
session_start();
$_SESSION['pwght'] = $_SESSION['pwght'] + $_POST['weight'];
session_write_close();}
else if (strpos($_POST[type],"Rifle")) {
session_start();
$_SESSION['rwght'] = $_SESSION['rwght'] + $_POST['weight'];
session_write_close();}
$_SESSION['reported'] = $_POST['weight'];
, что я делал и ПРОБОВАЛИ:
Я посмотрел в базе данных после того, как элемент стрелковой и элемент Пистолет был послан через форму. Помимо обычных различий в продуктах, они одинаковы. Я проверил и проверил, что в обоих случаях данные записываются в базу данных и не пусты или отсутствуют. Я изменил порядок, в котором if/else if выполняется с одинаковыми результатами. Я изменил имя имен сеансов без изменения проблемы. Независимо от того, что я делаю, я не могу получить его, чтобы установить $ _SESSION [ 'pwght'] или $ _SESSION [ 'сообщили']
Что произойдет, если вы изменяете все эти 'если (StrPos ($ _ POST [тип] "строка"))' 'ы в 'если (StrPos ($ _ POST [Тип]» строка ")! == FALSE)' s '? (Примечание: если 'type' не является определенной константой, вы, вероятно, должны использовать' $ _POST ['type'] ', хотя это не проблема. – Wrikken
@Wrikken, похоже, исправил его, но я не знайте почему. (Как побочная заметка у меня было это как '$ _POST ['xxx']' до этого без изменений, я только недавно взял одинарные кавычки как попытку попробовать что-нибудь исправить.) - Можете ли вы объяснить, почему используя функцию true/False check, но другой метод не подходит? – DMSJax
Если вы посмотрите на руководство для ['strpos'] (http://www.php.net/strpos), есть большой красный квадрат, объясняющий, почему, и это помогает узнать о [type juggling] (http://php.net/manual/en/language.types.type-juggling.php): позиция подстроки в строке возвращается, если позиция находится в _the самый первый символ_, эта позиция - '0'. Голый' 0' оценивается как false. Таким образом, разница между выводами strpos() составляет '0' или' false'. Сопоставления типов ('=== '&'! == ') не только сравнивают« правду »или« ложь », значения, но проверьте, являются ли левые и правые выражения одинаковыми _type_. – Wrikken