Использование переменной '$ name' в функции - PullRequest
0 голосов
/ 13 июня 2011

Мне нравится думать, что я достаточно разбираюсь в 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);
?>

Ответы [ 4 ]

1 голос
/ 14 июня 2011

Из комментариев ниже вопроса - было два аргумента с именем $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)
{
    // ...
}
1 голос
/ 13 июня 2011

Я не могу воспроизвести феномен 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

?>
0 голосов
/ 13 июня 2011

Как вы называете код?Поскольку вы выполняете обычный тест на равенство (==), помните, что PHP автоматически преобразует значения для вас, и существует довольно много значений, равных пустой строке.

например

bla(0, ...);

по-прежнему будет вызывать возврат, потому что в PHP-земле 0 эквивалентно '' в тесте на равенство.(0 == '' это ИСТИНА).Используйте тест строгого равенства для принудительной проверки значения И типа:

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

Это будет работать, как и ожидалось, поскольку при 0 == '' строгая проверка незаметно привязывается к проверке int == string, которая оценивается как ЛОЖЬ.

0 голосов
/ 13 июня 2011

$name не является специальным именем переменной, только php резервирует имена , начиная с __ (и есть несколько унаследованных предопределенных переменных). Я не смог найти ни одной программы, в которой $name обрабатывается по-другому. Можете ли вы привести полный пример?

Обратите внимание, что после return false вы пропустите точку с запятой. Включите отладка ошибок , чтобы увидеть эти ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...