Autor Zpráva
Neas
Profil
Ahoj.
Udělal jsem si PHP script na přihlašování uživatelů. Ten proběhne v pořádku, uživatel se přihlásí, ale hlášky, uložené v proměnné $zprava_o_prihlaseni se nezobrazí.
Ríkal jsem si, že to snad nějak vydržim bez hlášek, ale objevil se další problém, tak jsem si řekl, že se rovnou zeptám na oboje.
Hlavní problém je, že nefunguje odhlášení.
<?php
  include("neas.no.mysq.dbse.conf.inc.php");
    if($_GET['form']==true){
      $sql_dotaz1 = mysql_query("SELECT user_id,jmeno FROM uzivatele WHERE jmeno='$jmeno' and heslo='$heslo' LIMIT 1");
      $uspech_dotazu = mysql_num_rows($sql_dotaz1);
        if($uspech_dotazu==1){                                                                                                                            
          $pole = MySQL_Fetch_Row($sql_dotaz1);
          setcookie ("user_id", $pole[0], time() + 60*60*24*365 );                           
          setcookie ("user_nick", $pole[1], time() + 60*60*24*365 );
        }else{
          if($jmeno == null OR $heslo == null){                                                                                  
            $zprava_o_prihlaseni = "Je nutné vyplnit všchny údaje";
            }else{
              $zprava_o_prihlaseni = "Neplatné uživatelské jméno nebo heslo";
              }
         }
      header("Location: http://localhost/neas.cz");
      }
    if($_GET['action']==logout){
      setcookie ("user_id", null, 0);
      setcookie ("user_nick", null, 0);
      header("Location: http://localhost/neas.cz");
      } ?>

a v menu v HTML:
<a href="?action=logout">Odhlásit</a>

Pls nevíte, co je tam špatně? díky
dan55
Profil
A kde prosimťe vypisuješ zprava_o_prihlaseni?. Někde ji musíš vypsat.
Oprav řádek 19 na
if($_GET['action']=="logout"){

Nejsem si jistý, ale řekl bych, že se cookies mažou jinak
Neas
Profil
tu zprávu vypisuju takto:
<?php echo $zprava_o_prihlaseni; ?>

což pokud vím, je správně, takže jsem spíš myslel, že je chyba někde ve výše uvedeném scriptu. Místo zobrazení zprávy se mi vypíše chyba, že proměnná není definována.
A to s tim odhlášenim, jsem opravil, jak jsi mi poradil, ale pořád to nefunguje :(
dan55
Profil
Jo už to vidím, ty vypisuješ tu proměnou na jiné stránce, po přesměrování proměná zaniká. Doporučím sessions.
dan55
Profil
Zkusil jste to mazání cookies?
http://sablony.hyps.cz/php-skripty/nastaveni-cookies.php
edit//
napadlo mě,zkus řádky 20,21 zaměnit za tyto:
setcookie ("user_id", "", time()-60);
setcookie ("user_nick", "", time()-60);
Martin011
Profil
A nechceš raději udělat celou registraci v sessions, já se odhlašuji takhle:
<?php
ob_start();

if(IsSet($_GET['logout']) and $_GET['logout']=="neco") {   
  Session_Start();       
  Session_Destroy(); 
}
header ("location: index.php?nějaká hláška");
ob_end_flush();
?>


a v indexu tenhle skript:

<a href='logout.php?logout=neco'> Odhlásit se</a>";
        
Neas
Profil
zkoušel jsem tu hlášku uložit do session a pořád to nic nevypisuje.
A s tim registrovánim: jakej je rozdíl mezi tím, když to udělám v cookies nebo v sessions? Vím, že session se ukládají na server a cookies v počítači klienta, ale myslím v praxi, která varianta a proč je lepší? Já to dělám v cookies, protože jsem si všiml, že to tak dělá většina serverů, kde jsem registrovaný (když vymažu cookies, odevšad mě to odhlásí)
dan55
Profil
Neas:
Nevím. Já osobně všechny loginy řeším přes sessions.
Pozn.:
Máš na začátku souboru napsané session_start(); ?
Ukládáš to jako $_SESSION["neco"]="neco"; ?
Vypisuješ to jako echo $_SESSION["neco"]; ?
Máš na začátku souboru kde hlášku vypisuješ session_start(); ?

OT: ty mezery před otazníkama jsou úmyslně. Aby neskopíroval kód i s otazníkem
ps: Už jdu spát. Zítra mám brzo ráno školu, ale pokusím sem napsat ráno.
Neas
Profil
mno teď mi došlo, že jsi to asi špatně pochopil.
<?php
  session_start();
  $_SESSION['zprava_o_prihlaseni'] = "";                     // nastaveno na nic, aby se hláška nezobrazovala při každé návštěvě stránky, ale jen při špatném zadání údajů. Tohle tam s původní proměnnou nebylo, ale taky to nefungovalo..
  include("neas.no.mysq.dbse.conf.inc.php");
    if($_GET['form']==true){
      $sql_dotaz1 = mysql_query("SELECT user_id,jmeno FROM uzivatele WHERE jmeno='$jmeno' and heslo='$heslo' LIMIT 1");
      $uspech_dotazu = mysql_num_rows($sql_dotaz1);
        if($uspech_dotazu==1){                                                                                                                            
          $pole = MySQL_Fetch_Row($sql_dotaz1);
          setcookie ("user_id", $pole[0], time() + 60*60*24*365 );                          
          setcookie ("user_nick", $pole[1], time() + 60*60*24*365 );
        }else{
          if($jmeno == null OR $heslo == null){                                                                                  
            $_SESSION['zprava_o_prihlaseni'] = "Je nutné vyplnit všchny údaje";
            }else{
              $_SESSION['zprava_o_prihlaseni'] = "Neplatné uživatelské jméno nebo heslo";
              }
         }
      header("Location: http://localhost/neas.cz");
      }
    if($_GET['action']=="logout"){
      setcookie ("user_id", "", - 60);
      setcookie ("user_nick", "", - 60);
      header("Location: http://localhost/neas.cz");
      } ?>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- 
          ***  CREATED BY JAN "NEAS LOPATA" VEGRICHT  ***   
                   ####  Neas-san@email.cz  ####
                     ##  http://neas.ic.cz  ##
                         >>  (C) 2010   <<         
-->
<head>
<meta http-equiv="content-type" content="text/html; charset=Windows-1250" />
<meta http-equiv="content-language" content="cs-cz" />
<meta name="copyright" content="Jan 'Neas Lopata' Vegricht" />
  <title>Neas.cz</title>
  <link rel="shortcut icon" href="icon_.png" />
<script type="text/javascript" src="javascripts/jquery-1.4.js"></script>                                                                          
<script type="text/javascript" src="javascripts/MojeZona.open.js"></script>
<script type="text/javascript" src="javascripts/Objednavky.close.js"></script>
<script type="text/javascript" src="javascripts/Programovani.close.js"></script>
<script type="text/javascript" src="javascripts/Japonstina.close.js"></script>
<script type="text/javascript" src="javascripts/Odkazy.js"></script>
bla bla bla další a další kódy, to teď neni důležitý..
<div id="unvisible1">
    <?php
    if($_COOKIE['user_id'] > 0){ ?>
      <h3>Jste přihlášen jako <?php echo $_COOKIE['user_nick']; ?></h3>
      <div class="volby">
       <ul>
        <li class="volbatype1" >
         <h3><a href="?action=logout">Odhlásit</a></h3>                      
        </li>
       </ul>
      </div> 
    <?php }else{
    echo $_SESSION['zprava_o_prihlaseni']; ?>
      <form class="menupadding" action="?form=true" method="post">
       <div class="login">Jméno:</div>
       <input style="width:120px;" type="text" name="jmeno" /><br />
       <div class="login">Heslo:</div>
       <input style="width:120px;" type="password" name="heslo" /><br />
       <input type="submit" value="Přihlásit" />
      </form>
      <div class="volby">
       <ul>
        <li class="volbatype2" >
         <h3>Registrovat se</h3>
          </li>
       </ul>
      </div>
    <?php } ?>
  </div>
  zase bla bla bla a konec.

a to celý je jeden soubor. to přesměrování je tam proto, že jsem po odeslání formuláře musel stránku ještě jednou aktualizovat, aby se to menu změnilo. Nechápu, proč ty hlášky nefungují, ale větší starost mi teď dělá ten logout..
Step
Profil
jestli je to celý jeden soubor, tak tim řádkem 3 $_SESSION['zprava_o_prihlaseni'] = ""; si tu hlášku smažeš, tohle bych dal hned za to echo ve kterym se to vypisuje
dan55
Profil
Neas:
Jo takhle... i tak musíš použít session. A jak říkal Step, $_SESSION["zprava_o_prihlaseni"] = ""; dej za to echo
dan55
Profil
[#5] dan55 zkusil jsi to?
Neas
Profil
<?php echo $_SESSION['zprava_o_prihlaseni'];
    $_SESSION['zprava_o_prihlaseni'] = ""; ?>
      <form class="menupadding" action="?form=true" method="post">
       <div class="login">Jméno:</div>
       <input style="width:120px;" type="text" name="jmeno" /><br />
       <div class="login">Heslo:</div>
       <input style="width:120px;" type="password" name="heslo" /><br />
       <input type="submit" value="Přihlásit" />
      </form>

Pořád se nic nevypisuje :(
Neas
Profil
Trochu sem si pohrál a teď hlášky fungují, ale nejde login. Musim teď pryč, pak se na to ještě podívám, ale když najdete chybu, pls napiště, díky moc.
<?php
  session_start();
  include("neas.no.mysq.dbse.conf.inc.php");
    if(IsSet($_GET['action']) AND $_GET['action']=='login'){
      $sql_dotaz1 = mysql_query("SELECT user_id,jmeno FROM uzivatele WHERE jmeno=$jmeno and heslo=$heslo LIMIT 1");
      $uspech_dotazu = mysql_num_rows($sql_dotaz1);
        if($uspech_dotazu==1){                                                                                                                            
          $pole = MySQL_Fetch_Row($sql_dotaz1);
          setcookie ("neas_cz_user_is_log_on_with_user_id", $pole[0], time() + 60*60*24*365 );                              // časovač na 1 rok
          setcookie ("neas_cz_user_s_nick", $pole[1], time() + 60*60*24*365 );
        }else{
          if($_POST['jmeno'] == "" OR $_POST['heslo'] == ""){                                                                                  
            $_SESSION['zprava_o_prihlaseni'] = "Je nutné vyplnit všchny údaje";
            }else{
              $_SESSION['zprava_o_prihlaseni'] = "Neplatné uživatelské jméno nebo heslo";
              }
          header("Location: http://localhost/neas.cz");     
         }
      header("Location: http://localhost/neas.cz");
      }
    if(IsSet($_GET['action']) AND $_GET['action']=='logout'){
      setcookie ("neas_cz_user_is_log_on_with_user_id", "", time()-60);
      setcookie ("neas_cz_user_s_nick", "", time()-60);
      header("Location: http://localhost/neas.cz");
      } ?> 
Neas
Profil
jednu chybu jsem našel, ale problém přetrvává.
<?php
  session_start();
  include("neas.no.mysq.dbse.conf.inc.php");
    if(IsSet($_GET['form']) AND $_GET['form']==true){
      $jmeno = $_POST['jmeno'];
      $heslo = $_POST['heslo'];
      $sql_dotaz1 = mysql_query("SELECT user_id,jmeno FROM uzivatele WHERE jmeno='$jmeno' and heslo='$heslo' LIMIT 1");
      $uspech_dotazu = mysql_num_rows($sql_dotaz1);
        if($uspech_dotazu==1){                                                                                                                            
          $pole = MySQL_Fetch_Row($sql_dotaz1);
          setcookie ("user_id", $pole[0], time() + 60*60*24*365 );                             
          setcookie ("user_nick", $pole[1], time() + 60*60*24*365 );
        }else{
          if($jmeno == "" OR $heslo == ""){                                                                                  
            $_SESSION['zprava_o_prihlaseni'] = "Je nutné vyplnit všchny údaje";
            }else{
              $_SESSION['zprava_o_prihlaseni'] = "Neplatné uživatelské jméno nebo heslo";
              }
         }
      header("Location: http://localhost/neas.cz");
      }
    if(IsSet($_GET['action']) AND $_GET['action']=='logout'){
      setcookie ("user_id", "", time()-60);
      setcookie ("user_nick", "", time()-60);
      header("Location: http://localhost/neas.cz");
      } ?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: