не видна переменная из функции

Тема в разделе "PHP", создана пользователем sunyang, 10 май 2011.

Модераторы: latteo
  1. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    Странно, прописал global перед переменной в функции, а она зараза не видна из-под нее(

    вот скриптина:
    PHP:
    function checkUser()
                {
                  if (isset (
    $_SESSION['login']) and $_SESSION['pass'])
                  {

                
    $q "SELECT * FROM ws_users WHERE mail = '$_SESSION[login]' and  pass = '$_SESSION[pass]'";
                
    $result mysql_query ($q);
                
    $row mysql_fetch_array($result);

                    if (
    $row==0// если данные с введенными $name и $pass в форму не нашлись в базе, то вырубаем сессию
                        
    {
                            global 
    $msg;
                            
    $msg "Неверные логин или пароль!";
                            
                            
    $_SESSION["enter"] = "false";
                        }

                    else { 
    // если введенные в форму данные нашлись в базе, т.е. $row!==0
                     
                    
    $_SESSION["enter"] = "true";
                    
    $total_vots explode ("|"$row['votes']);
                    
    $_SESSION["total_vots"] = $total_vots//Список всех голосований, в которых принимал участие юзер
                    
    $_SESSION["id_user"] = $row['id']; //Список всех голосований, в которых принимал участие юзер
                    
    $_SESSION["status"] = $row['status'];
                    
    header ("location: index.php");
                         }
                         
                if (
    $_SESSION["enter"] == "false"header ("location: enter.php");
              }
              else 
    header ("location: enter.php");

              }

    print 
    $msg;

    $msg пустая

    как ее определенную внутри функции сделать видимой вне ее?
     
  2. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Для начала нужно инициировать функцию!
    А для вывода переменной из функции, объявление global внутри функции не нужно... global нужно только если необходимо в функцию ввести внешнюю переменную..
    PHP:
    function checkUser() 
                { 
                  if (isset (
    $_SESSION['login']) and $_SESSION['pass']) 
                  { 

                
    $q "SELECT * FROM ws_users WHERE mail = '$_SESSION[login]' and  pass = '$_SESSION[pass]'"
                
    $result mysql_query ($q); 
                
    $row mysql_fetch_array($result); 

                    if (
    $row==0// если данные с введенными $name и $pass в форму не нашлись в базе, то вырубаем сессию 
                        

                            
    $msg "Неверные логин или пароль!"
                             
                            
    $_SESSION["enter"] = "false"
                        } 

                    else { 
    // если введенные в форму данные нашлись в базе, т.е. $row!==0 
                      
                    
    $_SESSION["enter"] = "true"
                    
    $total_vots explode ("|"$row['votes']); 
                    
    $_SESSION["total_vots"] = $total_vots//Список всех голосований, в которых принимал участие юзер 
                    
    $_SESSION["id_user"] = $row['id']; //Список всех голосований, в которых принимал участие юзер 
                    
    $_SESSION["status"] = $row['status']; 
                    
    header ("location: index.php"); 
                         } 
                          
                if (
    $_SESSION["enter"] == "false"header ("location: enter.php"); 
              } 
              else 
    header ("location: enter.php"); 

              } 
    checkUser()
    print 
    $msg;  

    правда в вашем случае не поможет простой вызов функции ибо в ней в любом случае выполняется переадресация на другой файл... поэтому содержимое данной переменной лучше загонять в какой либо глобальный массив $_SESSION, $_COOKIE и др. и уже из них выводить собщение...
     
  3. zaxap83

    zaxap83 Постоялец

    Регистр.:
    6 дек 2010
    Сообщения:
    87
    Симпатии:
    28
    Для вывода вообще используется return.

    т.е. в конце функции прописать return $msg;
    и при вызове функции присвоить функцию к $msg, т.е.
    $msg = checkUser();
    print $msg;
     
  4. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Ну и зачем ее "выводить", если переменная глобальная?:D
    И для вывода обычно используется print или echo, а return возвращает значение из функции, но никак не выводит его.
     
  5. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    199
    Симпатии:
    55
    PHP:
    echo $msg//null
    x();
    echo 
    $msg//'Im alive'

    function x()
    {
     
    $GLOBALS['msg']='Im alive';
    }


    Просто в массиве GLOBALS создайте с соответсвующим ключом значение, и будет она видна за пределами функции и доступyна в других функциях через global $msg
     
  6. dimd5

    dimd5 Писатель

    Регистр.:
    9 окт 2008
    Сообщения:
    9
    Симпатии:
    1
    Можно использовать и global $var; и $GLOBALS['var'].
    Здесь дело в другом: просто условие if ($row==0) не выполняется. Напиши объявление global $msg = "япустая"; в начале ф-ции и всё поймёшь.
     
  7. satyra

    satyra Постоялец

    Регистр.:
    21 окт 2007
    Сообщения:
    73
    Симпатии:
    7
    думаю здесь можно использовать способ передавать переменные в функцию по ссылке

    в качестве примера
    PHP:
    <?php
    function foo(&$var)
    {
        
    $var++;
    }

    $a=5;
    foo($a);
    // $a здесь равно 6
    ?>