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

sunyang

Мастер
Регистрация
25 Апр 2009
Сообщения
440
Реакции
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 пустая

как ее определенную внутри функции сделать видимой вне ее?
 
Для начала нужно инициировать функцию!
А для вывода переменной из функции, объявление 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 и др. и уже из них выводить собщение...
 
Для вывода вообще используется return.

т.е. в конце функции прописать return $msg;
и при вызове функции присвоить функцию к $msg, т.е.
$msg = checkUser();
print $msg;
 
Для вывода вообще используется return.
т.е. в конце функции прописать return $msg;
и при вызове функции присвоить функцию к $msg, т.е.
$msg = checkUser();
print $msg;
Ну и зачем ее "выводить", если переменная глобальная?:D
И для вывода обычно используется print или echo, а return возвращает значение из функции, но никак не выводит его.
 
PHP:
echo $msg; //null
x();
echo $msg; //'Im alive'

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

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

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

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