我觉得我对php非常了解,但这让我很困惑。
保持基本我有:
function req_new($pname, $use=null, $depID=null, $manID=null, $manName=null, $suppID=null, $suppName=null, $cat=null, $brand=null, $name, $email, $custom_code, $user=null, $method=null)
{
//validation
if($pname == ''){return false;}
if($manID==null AND $manName==null){return false;}
foreach(func_get_args() as $arg)
{
$arg = fquery_sanitize($arg);
}
//submit new request
$sql = "insert into sds_product_requests ".
"(prodName, produse, depID, reqDate, manID, manName, suppID, suppName, prodCat, prodBrand, Name, Email, InternalC, `user`, method) ".
"VALUES ".
"('$pname','$use','$depID', NOW(),'$manID', '$manName', '$suppID', '$suppName', '$cat', '$brand', '$name', '$email', '$custom_code', '$user', $method)";
$result = fquery_db($sql);
if($result>1)
{return true;}
else
{return false;}
}
如果代码使用变量名$name
,则它不起作用。使用另一个变量名称,如$pname
,它可以工作。如果我使用变量名$name
,则返回false。
有关为何发生这种情况的任何想法?
调用函数
<?php
$name = getPOST('name');
$depID = getPOST('depID');
$cat = getPOST('cat');
$supp = getPOST('supp');
$suppID = getPOST('suppID');
$man = getPOST('man');
$manID = getPOST('manID');
$confirm = req_new('THIS IS A NAME', null, $depID, $manID, $man, $suppID, $supp, $cat, null, null, null, null, fauth_GetUserID(), 1);
?>
答案 0 :(得分:1)
我无法重现OP的现象,至少不在OP发布的代码范围内。
<?php
function bla($name, $whatever, $bla)
{
if ($name == '') { return false; }
return true;
}
$name = "ORLY?";
echo bla($name, null, null) . "\n"; // prints 1, as expected
?>
答案 1 :(得分:1)
根据问题下方的评论 - 有两个名为$name
的论据,第二个论坛设为NULL
:
function req_new(
$pname, /* first $name, wich started to work after renaming to $pname */
$use=null, $depID=null, $manID=null, $manName=null, $suppID=null,
$suppName=null, $cat=null, $brand=null,
$name, /* second $name, which was set to NULL and overrode first argument */
$email, $custom_code, $user=null, $method=null)
{
// ...
}
答案 2 :(得分:0)
$name
不是一个特殊的变量名,php reserves names仅以__
开头(并且有一些继承的预定义变量)。我找不到以$name
处理不同的单个程序。你能提供一个完整的例子吗?
请注意,您在return false
之后错过了分号。开启error debugging即可查看这些错误。
答案 3 :(得分:0)
你是如何调用代码的?由于您正在进行常规的相等性测试(==
),请记住PHP会为您自动转换值,并且有相当多的值等于空字符串。
e.g。
bla(0, ...);
仍将触发返回,因为在PHP中,land 0
在等式测试中等同于''
。 (0 == ''
为TRUE)。使用严格相等测试来强制检查值和类型:
if ($blah === '') {
return false;
}
这将按预期工作,因为在0 == ''
时,严格检查会对int == string
检查进行无形检查,该检查的结果为FALSE。