Pergunta

Estou tentando usar o global em um arquivo que é usado apenas para dados post.O global não está sendo registrado na página.Como posso obter o globals acessível na página.

EDITAR talvez eu não era muito clara então deixe-me limpa-lo.Eu tenho esses arquivos

index.php

global $user;
echo $user->uid;

post.php

global $user;
echo $user->uid;

a partir de agora index.php estou postando para post.php através de jquery.No entanto, quando eu echo $user->uid do post.php não é ecoando mas quando eu eco-lo a partir de index.php ele está mostrando.Como posso obter essa $user->uid acessível a partir de post.php.

Foi útil?

Solução

Outra maneira de acessar variáveis de escopo global é usar o especial PHP-definidos $GLOBALS matriz.

Exemplo de php.net

<?php
$a = 1;
$b = 2;

function Sum() {
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
} 

Sum();
echo $b;
?>

Outras dicas

Eu acho que você deveria estar procurando sessões e não globais. Pelo que parece, você está registrando uma variável em uma página e, quando o usuário se move para outra página, você deseja que essa variável seja utilizável.

As sessões permitirão você fazer isso. Basta usar este código:

<?php
session_start();
$_SESSION['my_var'] = 'foo';

E nas páginas subsequentes ...

<?php
session_start();
echo $_SESSION['my_var'];

Que será lançado foo.

http://www.php.net/manual/en/book.session.php

Você tem que lembrar que quando o usuário submete o formulário e redirecionar para post.php, as variáveis em index.php estão muito longe.PHP execuções são de curta duração, ao contrário do normal aplicativos da área de trabalho.

O que você faz em index.php para obter o $user objeto deve ser repetido em post.php.Se você não deseja replicar o código, basta colocá-lo em algum arquivo init_user.php e tem tanto index.php e post.php incluir o arquivo usando include_once('init_user.php');

Se você precisar de um global dentro de uma função, faça isso

function phpFoobarFunction(){
  global $my_global;
}

referência sobre escopo

por Superglobals Curti $_POST, $_GET (etc ...) Eles estão disponíveis qualquer lugar.


A partir da sua pergunta atualizada, você não pode compartilhar variável entre duas chamadas diferentes de PHP. você teria :

  • Para recriar sua classe de usuário $ realoading do banco de dados (ou sua fonte)
  • armazenar o objeto na $ _Session
  • Passe o objeto do usuário via JavaScript (mas isso é perigoso porque o usuário pode editar isso) e adicioná -lo com parâmetros à sua chamada AJAX.

Mais referência sobre como o PHP é jogado com a sessão

Eu concordo com Mattbasta, os globais foram desativados por razões de segurança. Você pode usá -lo de qualquer maneira, mas o caminho certo é usar a sessão.

Outra coisa é que você disse: "Agora, do index.php, estou postando para postar.php através do jQuery". Você está usando alguma chamada de Ajax? Caso contrário, não entendo por que usar o JS para fazer isso ... se você estiver enviando os dados através do Ajax e só deseja enviar este parâmetro, tente o seguinte:

<input style="display:none" type="hidden" id="uid" name="uid" value="<?= $user->uid ?>" />

E então lide com isso da sua chamada de Ajax como:

$.ajax({
    type: "POST",
    url: "/post.php",
    data: "uid=" + uid + "&otherVar=" + otherVar, //and so on..
    success: function() {
        //Here you can notify the user that the script ran successfully 
        }
});//end of ajax

Espero que isso ajude você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top