0

请解释为什么我无法设置“Pistol”的会话变量或 $_SESSION['reported'],但它适用于“Rifle”

发布数据的表格

<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 中设置会话变量的简单检查:

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['reported']

4

1 回答 1

1

来自strpos 的手册

警告

此函数可能返回Boolean FALSE,但也可能返回计算结果为FALSE的非布尔值。请阅读有关布尔值的部分以获取更多信息。使用=== 运算符测试此函数的返回值。

换句话说,您想检查它是否返回布尔值 false,而不是任何其他在转换为布尔值时会评估为 false 的东西(在这种情况下0,它匹配第一个字符)。这是通过以下方式完成的:

if(strpos($haystack,$needle)!==false)
于 2013-06-27T20:27:14.377 回答