Autor Zpráva
Neas
Profil
Ahoj.
Už dřív jsem sem posílal script, který měl přihlašovat a odhlašovat uživatele, v případě nezadání nějaké hodnoty vypsat určitou hlášku a v případě zadání špatných hodnot, vypsat zase jinou hlášku:
<?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 ("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{
          echo "cokoli, proměnná, řetězec...";
          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 ("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");
      } ?>

...a pak v HTML:
<?php 
    echo $_SESSION['zprava_o_prihlaseni'];
    $_SESSION['zprava_o_prihlaseni'] = ""; ?>

Původní problém byl v tom, že se hlášky nevypisovaly. Pokud však před podmínku cokoli vypíši (kromě prázdného řetězce, jinak vážně cokoli - jako příklad jsem na ono místo zvýraznil echo), pak script do puntíku funguje > hlášky se vypisují jak mají a login i logout jsou funkční. Můžu se zeptat, jak to to echo může ovlivňovat? Vůbec mi to totiž nejde do hlavy, a pokud to někdo víte, nevíte taky, prosím, jak se toho zbavit? aby to fungovalo i bez toho echa. Díky moc :)
Joker
Profil
Neas:
Můžu se zeptat, jak to to echo může ovlivňovat?
Ovlivní to tak, že s tím echem nejspíš přestane fungovat header- skončí tím známým varováním "headers already sent"- což ovšem při určitém nastavení chybových výpisů nemusí být ve výstupu vidět. Skript ale pokračuje dál, text v session je, takže ho zase vypíše.
Neas
Profil
aha. a dá se to nějak udělat tak, aby tam to přesměrování mohlo zůstat a hláška se přesto vypsala?
mattyZEM
Profil
Neas:
aha. a dá se to nějak udělat tak, aby tam to přesměrování mohlo zůstat a hláška se přesto vypsala?
Jistě, nepoužij echo, dívej:
        }else{
          ?>cokoli, proměnná, řetězec...<?php
          if($jmeno == "" OR $heslo == ""){  
nightfish
Profil
mattyZEM:
Jistě, nepoužij echo, dívej:
ne, to bude mít stejný efekt, jak kdyby tam to echo bylo

Neas:
aby tam to přesměrování mohlo zůstat a hláška se přesto vypsala?
a kam by se vypsala? pokud na stránku před přesměrováním, tak kdy (za jak dlouho po vypsání hlášky) by se přesměrovalo?
pokud na nové stránce, tak hlášku ulož do session a v nové stránce vypiš
Joker
Profil
nightfish:
hlášku ulož do session a v nové stránce vypiš
Však to tak dělá, viz skript v prvním příspěvku.
Jestli se ale při echu nezobrazí to "headers already sent" varování, nejspíš bude povypínané zobrazování mnoha dalších hlášek. Zkusil bych, pro účely testování, buď nastavit error_reporting aby to zobrazovalo všechny chyby, nebo si chyby najít v logu.
Neas
Profil
Zkusil jsem error_reporting vložit místo toho zbytečného echa před tou podmínkou:
...}else{
          ini_set("display_errors"); 
          error_reporting(E_ERROR | E_WARNING);
          if($jmeno == "" OR $heslo == ""){
               ...

když zadám chybné údaje, nebo nějaký vynechám, vypíše se na začátku stránky:
Warning: Wrong parameter count for ini_set() in D:\ComplexWebServer\http_docs\neas.cz\index.php on line 14

Warning: Cannot modify header information - headers already sent by (output started at D:\ComplexWebServer\http_docs\neas.cz\index.php:14) in D:\ComplexWebServer\http_docs\neas.cz\index.php on line 22
Joker
Profil
Neas:
ini_set má dva parametry, konfigurační volbu a hodnotu.
Čili si to stěžuje, že chybí druhý parametr.
Ta druhá hláška je jen následek té první, protože to vypíše varování, což je taky výstup, nejdou pak už měnit hlavičky.

Jelikož se chyby zobrazují i takhle, to ini_set by nemělo být potřeba a error_reporting bych po dobu ladění nastavil na E_ALL.
Neas
Profil
...}else{
          error_reporting(E_ALL);
          if($jmeno == "" OR $heslo == ""){
               ...

takhle nevypisuje vůbec nic, ať zadám chybné, správné, nebo žádné hodnoty.

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:

0