1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Sessões em PHP

Discussão em 'Programação' iniciada por eXcept, 28 de Junho de 2005. (Respostas: 22; Visualizações: 2748)

  1. eXcept

    eXcept Power Member

    Viva.

    Estou a programar um software que tem um sistema de login e Password, e estou a usar sessões para manter os dados. No entanto, a sessão funciona-me correctamente, mas só ao segundo login que faço. Ou seja, eu pus um campo na pagina após o login que me vai mostrar o nome associado ao login, mas tenho de fazer login - logout e depois login outra vez para que esse nome me apareça. Da primeira vez não aparece nada.

    Segue-se o código

    login.php ( Script para autenticação )

    Código:
    ...
    session_start();
    $bla = $_POST[login];
    $_SESSION['nome']=$bla;
    ...
    
    main.php ( Página onde aparece o nome correspondente )

    Código:
    session_start();
    $login = $_SESSION['nome'];
    ...
    $req1 = "SELECT tipo FROM users WHERE login = '$login'";
    $teste = mysql_fetch_array(mysql_query($req1,$connection));
    $req2 = "SELECT nome FROM users WHERE login = '$login'";
    $tipo = $teste['tipo'];
    $getnome = mysql_fetch_array(mysql_query($req2,$connection));
    $nome = $getnome['nome'];
    echo   '<p align="center"><font face="Verdana" size="4"><b>Benvindo ';
    echo $nome;
    echo '</p></font></b>';
    
    aqui o echo $nome só me funciona à segunda.

    Alguem saberá qual o problema?

    EDIT: Faltava uma linha de código
     
    Última edição: 28 de Junho de 2005
  2. Nazgulled

    Nazgulled Power Member

    Hum..
    1) a acção do form de autênticação (tag action="") aponta para o login.php certo? ou aponta para o main.php? se apontar para o login.php como tas a fazer o redirecionamento para o main.php?

    2) $bla = $_POST[login]; - n sei se haver aproblema ou n aki, mas epxrimenta por ' ' entre o login, ou seja: $bla = $_POST['login'];

    3) comenta akeles 3 echos k tens no main.php e substitui por var_dump($getnome); e dps diz ai o reultado k te apareceu no ecra (quando fazes o 1º login)

    ms n sei pk, xeira-me k o problema será tao simples como corrgiri o que explico no ponto 2), ou talvez n, n sei bem... exprimenta...
     
  3. eXcept

    eXcept Power Member

    1. Aponta para o login.php , o redirect é feito por um javascript

    2. Já descobri qual era o problema.. o session_start() no login.php era feito abaixo do início do código. foi só mudar para logo a seguir ao <?php e passou a funcionar.

    realmente problemas simples e de estupida distracção... bha

    tks anyway :)
     
  4. eXcept

    eXcept Power Member

    Já agora outro problema, nada a ver com sessions, mas que tenho agora. Sou completamente n00b em php, preciso de fazer isto para o work, e tenho estado a ler algumas coisas e é assim que tenho feito.

    Código:
    $verquaissaodia = mysql_query("SELECT dia FROM edicoes WHERE activo = '0'");
    $verquaissaomes = mysql_query("SELECT mes FROM edicoes WHERE activo = '0'");
    $verquaissaoano = mysql_query("SELECT ano FROM edicoes WHERE activo = '0'");
    while ( $sacado = mysql_fetch_row($verquaissaodia)) {
        foreach ($sacado as $field)
        echo '<font face="Verdana" size="2">';
        echo $field;
    	echo " de ";
    }
      while ($sacado2 = mysql_fetch_row($verquaissaomes)) {
      foreach ($sacado2 as $field2)
      echo '<font face="Verdana" size="2">';
      echo $field2;
      echo " de ";
      }
      while ($sacado3 = mysql_fetch_row($verquaissaoano)) {
      foreach ($sacado3 as $field3)
      echo '<font face="Verdana" size="2">';
      echo $field3;
      echo "                   ";
      }
      echo '<font face="Verdana" size="2"><a href=activaactual.php>Activar</a></font></p>';
    
    Isto funciona bem, mas os resultados são, quando tenho mais que um registo:

    Código:
    Edições por activar
    
    1 de 2 de Janeiro de Janeiro de 2005 2005 Activar
    
    O que pretendia era que aparecesse
    Código:
    1 de Janeiro de 2005 [u]activar[/u]
    2 de janeiro de 2005[u]activar[/u]
     ou seja, fazer um ciclo que repetisse as três variáveis da forma como apresento aqui. Alguem me pode dar uma ajuda?
     
  5. NoMercy

    NoMercy Power Member

    wtf?!
    Pelo menos olha para o segundo exemplo (Example 2. Valid Query) aqui: http://pt.php.net/mysql_query ,que, para alem de aquilo que estás a fazer ser "esquesito", provavelmente, a lógica, ainda te vai ajudar a resolver o teu problema: "1 de 2 de Janeiro de Janeiro de 2005 2005 Activar".

    Aposto que se tiveres 3 registos na tabela, da forma como estás a fazer actualmente, isto vai-te aparecer em triplicado :P
     
  6. eXcept

    eXcept Power Member

    as query's são válidas e retornam o devido valor. a leitura e impressão destes é correcta, exceptuando na forma como são apresentados.

    suponho que falte um ciclo para ele correr isso, por cada linha três query's ( dia, mes, ano ) que encontre, faça a quebra de linha, mostre o registo 2, dia, mes ano, activar, quebra de linha, registo 3 e por aí adiante.

    Não sei como fazer isto :s ando praki ah volta de ciclos, mas nenhum que me funcione
     
  7. mcog_blaster

    mcog_blaster Power Member

    já tentaste fazer tudo numa só querie:
    mysql_query("SELECT dia, mes, ano FROM edicoes WHERE activo = '0'") ?
     
  8. NoMercy

    NoMercy Power Member

    O que é esquesito (apenas sobre a parte do código que citei) é fazer 3 querys diferentes para apanhares 3 colunas da mesma tabela pertencentes á mesma linha, quando podias fazer algo como:
    Código:
    mysql_query("SELECT dia, mes, ano FROM edicoes WHERE activo = '0'");
    
    o que te retornaria uma linha (row) com três valores: "dia, mes, ano".
    Se tens mais que uma linha na tabela, põe o fetch num ciclo e vai printando cada linha retornada no fetch.

    Tenho quase a certeza de que depois de perceberes o que se passa aqui, acabavas por resolver o teu problema sem teres que complicar tanto com tantos whiles e for eachs encadeados.
     
  9. eXcept

    eXcept Power Member

    reformulei de acordo com as vossas indicações, e está assim:

    Código:
    $verquaissao = mysql_query("SELECT dia,mes,ano FROM edicoes WHERE activo = '0'");
    $tlines = mysql_num_rows($verquaissao);
    $ver2 = mysql_fetch_array($verquaissao);
    for ( $i == 1 ; $i <= $tlines ; $i++ ) {
      echo '<font face="Verdana" size="2">';
      echo $ver2['dia'];
      echo " de ";
      echo $ver2['mes'];
      echo " de ";
      echo $ver2['ano'];
      echo ".";
      echo '<p>';
      }
    
    mas agora retorna-me
    Código:
    1 de Janeiro de 2005.
    
    1 de Janeiro de 2005.
    
    1 de Janeiro de 2005.
    
    qd devia retornar duas linhas apenas, com 2 dados diferentes ( 1 Jan 2005 e 2 Jan 2005 ) , que é o que está na DB.

    pk?
     
  10. mcog_blaster

    mcog_blaster Power Member

    em vez de teres esse ciclo "for" mete um while.

    while($ver2 = mysql_fetch_array($verquaissao))
    {
    echo $ver2['dia'].$ver2['mes'].$ver2['ano'].'<br>';
    }
     
  11. NoMercy

    NoMercy Power Member

    Tens que fazer um fetch á tabela por cada linha que queres puxar.
    Por exemplo, no http://pt.php.net/mysql_query está assim:

    Código:
    $result = mysql_query($query);
    ....
    
    // Use result
    // Attempting to print $result won't allow access to information in the resource
    // One of the mysql result functions must be used
    // See also mysql_result(), mysql_fetch_array(), mysql_fetch_row(), etc.
    while ($row = mysql_fetch_assoc($result)) {
       echo $row['firstname'];
       echo $row['lastname'];
       echo $row['address'];
       echo $row['age'];
    }
    
    O que faz com que só saia do while quando já não houver mais linhas no result set.

    No teu código experimenta algo parecido com isto:
    Código:
    $verquaissao = mysql_query("SELECT dia,mes,ano FROM edicoes WHERE activo = '0'");
    
    while( $ver2 = mysql_fetch_array($verquaissao) ) {
      echo '<font face="Verdana" size="2">';
      echo $ver2['dia'];
      echo " de ";
      echo $ver2['mes'];
      echo " de ";
      echo $ver2['ano'];
      echo ".";
      echo '<p>';
      }
    
     
  12. eXcept

    eXcept Power Member

    só me mostra o segundo registo :'(
     
  13. mcog_blaster

    mcog_blaster Power Member

    isso é muito estranho...mas tenta substituir o codigo todo pelo codigo que o NoMercy colocou.

    PS: se calhar tinhas $ver2 = mysql_fetch_array($verquaissao);
    e a seguir meteste o codigo que disse para substituir...por isso deve so ter mostrado o ultimo registo, nao sei se se foi o que se passou...
     
    Última edição: 29 de Junho de 2005
  14. eXcept

    eXcept Power Member

    com o code do NoMercy funcionou... tks :)
     
  15. NoMercy

    NoMercy Power Member

    Ah, quase me esquecia:
    RTFM!!! :D


    ps: Acabei de resolver um problema sem nunca ter programado em php.
    ps2: Ok, menti, uma vez fiz um "hello world" :P
     
  16. eXcept

    eXcept Power Member

    Mais uma dúvida, sou chato eu sei, qual a sntaxe correcta disto?

    Código:
      echo '<a href=activaact.php?ed='$ver2['edid']'>Activar</a>';
     
  17. NoMercy

    NoMercy Power Member

    http://pt.php.net/echo
    experimenta lá:
    Código:
    echo "<a href=activaact.php?ed={$ver2['edid']}>Activar</a>";
    
     
  18. mcog_blaster

    mcog_blaster Power Member

    echo '<a href=activaact.php?ed='.$ver2['edid'].'>Activar</a>';

    Usa o "." para concatenar strings.
    Ou tb podes usar como o NoMercy fez...mas as vezes é necessario usar " nas strings, ás quais é necessario colocar um "\" antes.
     
    Última edição: 29 de Junho de 2005
  19. eXcept

    eXcept Power Member

  20. inginheiiro

    inginheiiro Power Member

    funcionou.

    com o teu não funcionou devido ao teu ciclo for...next...
    embora o codigo do noMercy esteja numa abordagem mais "limpa".


    quando escreves-te :

    Código:
    for ( $i == 1 ; $i <= $tlines ; $i++ ) {
    talvez quisesses escrever
    Código:
    for ( $i = 1 ; $i <= $tlines ; $i++ ) {
    descubra as diferenças...
    Onde está o wally?
     

Partilhar esta Página