Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php条件strpos检查无法设置会话变量_Php_Forms_Session_Post_Strpos - Fatal编程技术网

php条件strpos检查无法设置会话变量

php条件strpos检查无法设置会话变量,php,forms,session,post,strpos,Php,Forms,Session,Post,Strpos,请解释为什么我无法设置“Pistol”或$_session['reported']的会话变量,但它对“Rifle”很有效 发布数据的表单 <form name="<?=$prodadd?>" id="<?=$prodadd?>" method="post" action="process.php"> <input type="hidden" name="formid" value="addtocart" /> <!-- other input

请解释为什么我无法设置“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>
我所做和尝试的:

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的顺序。我已经更改了会话名称,没有问题。无论我做什么,我都无法让它从中设置$\u会话['pwght']或$\u会话['reported']

警告

此函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值。有关更多信息,请阅读。用于测试此函数的返回值

换句话说,您希望检查它是否返回布尔值false,而不是返回任何其他可能的值(在本例中,它在第一个字符处匹配)。这是通过以下方式实现的:

if(strpos($haystack,$needle)!==false)

如果将所有这些
if(strpos($\u POST[type],“string”)
更改为
if(strpos($\u POST[type],“string”)!==false)
,会发生什么?(注意:除非
type
是一个已定义的常量,否则您可能应该使用
$\u POST['type']
,尽管这不是这里的问题。@Wrikken,这似乎已经解决了它,但我不知道为什么。(作为旁注,我将其作为
$\u POST['xxx']
在没有任何改变的情况下,我最近刚刚删除了单引号,试图尝试任何方法来修复它。)--您能解释为什么使用真/假检查有效,而另一种方法无效吗?如果您查看手册中的,有一个大的红色框解释了原因,它有助于了解:返回字符串中子字符串的位置,如果位置在第一个字符处,则该位置为
0
。一个空的
0
求值因此,strpos()输出是
0
还是
false
之间存在差异。类型安全比较(
==
&
!=
)不要只比较“truthy”或“falsy”值,还要检查左右表达式是否为同一类型。@Wrikken明白了-请根据上面的内容写一个答案,我将投票赞成/接受它。