-1

私は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と、機能します。変数名を使用すると、$namefalseが返されます。

なぜこれが起こっているのかについてのアイデアはありますか?

関数を呼び出す

    <?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);
?>
4

4 に答える 4

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

?>
于 2011-06-13T14:39:53.993 に答える
1

質問の下のコメントから-という名前$nameの2つの引数があり、2番目の引数は次のように設定されてい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)
{
    // ...
}
于 2011-06-14T06:45:57.543 に答える
0

$nameは特別な変数名ではなく、phpはで始まる名前のみを予約__します(そして、いくつかの継承された定義済み変数があります)。$name処理方法が異なるプログラムは1つも見つかりませんでした。完全な例を提供できますか?

ただし、後にセミコロンが欠落していることに注意してくださいreturn false。これらのエラーを確認するには、エラーデバッグをオンにします。

于 2011-06-13T14:40:17.013 に答える
0

コードをどのように呼んでいますか?通常の等価性テスト(==)を実行しているので、PHPが値を自動変換することを忘れないでください。また、空の文字列に等しい値がかなりあります。

例えば

bla(0, ...);

PHP-land0は同等''性テストと同等であるため、引き続きリターンがトリガーされます。(0 == ''TRUEです)。厳密な等式テストを使用して、値とタイプを強制的にチェックします。

if ($blah === '') {
    return false;
}

これは期待どおりに機能します。これ0 == ''は、厳密なチェックが目に見えない形でチェックをタックしint == string、それがFALSEと評価されるためです。

于 2011-06-13T14:44:11.693 に答える