Autor Zpráva
nyllo
Profil
Zdravím mohl by mi prosím někdo zkontrolovat a opravit tento script jsem nováček.


index.php
<?php require_once('autentizace.php'); //Velice důležité (kdyby to tu nebylo, mohl by sem nepřihlášený uživatel) ?>
<h1>Stránka, kam se dostanou jen přihlášení uživatelé</h1>
<p>Vítej <b><?echo $_SESSION['NICK']?></b></p>
A tady dále pokračuje stránka....
<a href="odhlasit.php">Odhlásit</a>

registrace.php
<?php
    session_start();
    //Pokud uživatel nějaké políčko nevyplnil, sdělíme mu to
    if( isset($_SESSION['ERROR_ZPRAVA']) && is_array($_SESSION['ERROR_ZPRAVA']) && count($_SESSION['ERROR_ZPRAVA']) >0 ) {
        echo '<ul type="I">';
        foreach($_SESSION['ERROR_ZPRAVA'] as $zpr) {
            echo '<li>',$zpr,'</li>'; 
        }
        echo '</ul>';
        unset($_SESSION['ERROR_ZPRAVA']);
    }
?>
<form action="zregistrace.php" method="post">
<table>
<tr>
  <td>Nick: </td><td><input type="text" name="nick"></td>
</tr>
<tr>
  <td>Heslo: </td><td><input type="password" name="heslo"></td>
</tr>
<tr>
  <td>Heslo znovu: </td><td><input type="password" name="zheslo"></td>
</tr>
<tr>
  <td>&nbsp;</td><td align="right"><input type="submit" name="Submit" value="Registrovat"></td>
</tr>
</table>
</form>

zregistrace.php
<?php
    //Nastartování session
    session_start();
    //Vložení config.php
    require_once('config.php');
    $error_zprava = array();
    //Validace pro errory
    $error = false;
    //Připojení k mysql serveru
    $link = mysql_connect(SQL_HOST, SQL_UZIVATEL, SQL_HESLO);
    if(!$link) {
        die('Nelze se připojit: ' . mysql_error());
    }
    //Zvolíme databázi
    $db = mysql_select_db(SQL_DATABAZE);
    if(!$db) {
        die("Databáze nenalezena");
    }
    //Zabráníme sql injekci
    function clean($str) {
        $str = @trim($str);
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }
        return mysql_real_escape_string($str);
    }
    //Vyčistíme přijaté hodnoty
    $nick = htmlspecialchars(clean($_POST['nick']));
    $heslo = htmlspecialchars(clean($_POST['heslo']));
    $zheslo = clean($_POST['zheslo']);
    $ip = $_SERVER["REMOTE_ADDR"];
    //Kontrolujeme, zda uživatel vyplnil všechna pole
      //Kontrola nicku
    if($nick == '') {
        $error_zprava[] = 'Vyplň nick!';
        $error = true;
    }
      //Kontrola hesla
    if($heslo == '') {
        $error_zprava[] = 'Vyplň heslo!';
        $error = true;
    }
      //Kontrola zopakovaného hesla
    if($zheslo == '') {
        $error_zprava[] = 'Vyplň kontrolu hesla!';
        $error = true;
    }
      //Porovnání zadatných hesel
    if( strcmp($heslo, $zheslo) != 0 ) {
        $error_zprava[] = 'Hesla nesouhlasí!';
        $error = true;
    }
    //Zkontrolujeme, zda již někdo pod tímto nickem není zaregistrován
    if($nick != '') {
        $dotaz = "SELECT * FROM uzivatele WHERE nick='$nick'";
        $pdotaz = mysql_query($dotaz);
        if($pdotaz) {
            if(mysql_num_rows($pdotaz) > 0) {
                $error_zprava[] = 'Nick je již zabrán!';
                $error = true;
            }
            @mysql_free_result($pdotaz);
        }
        else {
            die("Selhání dotazu č1");
        }
    }
    //Pokud je chyba v políčkách, vrátíme uživatele zpět a sdělíme co neměl vyplněno
    if($error) {
        $_SESSION['ERROR_ZPRAVA'] = $error_zprava;
        session_write_close();
        header("location: registrace.php");
        exit();
    }
    //Vytvoříme sql dotaz
    $dotaz = "INSERT INTO uzivatele(nick, heslo, ip) VALUES('$nick','".md5($_POST['heslo'])."','$ip')";
    mysql_query("SET character_set_client=utf8");
    mysql_query("SET character_set_connection=utf8");
    mysql_query("SET character_set_results=utf8");
    //Provedeme sql dotaz
    $pdotaz = @mysql_query($dotaz);
    //Při úspěšné registraci hodíme uživatele na prihlaseni.php?z=registrace-uspesna
    if($pdotaz) {
        header("location: prihlaseni.php?z=registrace-uspesna");
        exit();
    }else {
        die("Selhání dotazu č2");
    }
?>

prihlaseni.php
<?php
    //Pokud uživatel nějaké políčko nevyplnil, sdělíme mu to
    if( isset($_SESSION['ERROR_ZPRAVA']) && is_array($_SESSION['ERROR_ZPRAVA']) && count($_SESSION['ERROR_ZPRAVA']) >0 ) {
        echo '<ul type="I">';
        foreach($_SESSION['ERROR_ZPRAVA'] as $zpr) {
            echo '<li>',$zpr,'</li>'; 
        }
        echo '</ul>';
        unset($_SESSION['ERROR_ZPRAVA']);
    }
    
    
    //Registrace úspěšná a ostatní
    $zpr = array('registrace-uspesna' => 'Byl/a jsi úspěšně zaregisrován/a. Nyní se můžeš pihlásit.',
    'prihlaseni-selhalo' => 'Přihlášení selhalo. Prosím, zkontroluj zadané údaje.',
    'automaticke-odhlaseni' => 'Byl/a jsi neaktivní déle jak 30 minut. Byl/a jsi automaticky odhlášen/a.',);
    //Jestliže jseme dostali "z" tak řekneme obsah arraye
    if($_GET['z']){
     echo "".$zpr[$_GET['z']]."";
    }else{
     echo "";
    }
?>
<form action="zprihlaseni.php" method="post">
<table>
<tr>
  <td>Nick: </td><td><input type="text" name="nick"></td>
</tr>
<tr>
  <td>Heslo: </td><td><input type="password" name="heslo"></td>
</tr>
<tr>
  <td>&nbsp;</td><td align="right"><input type="submit" name="Submit" value="Přihlásit se"></td>
</tr>
</table>
</form>

zprihlaseni.php
<?php
    //Nastartování session
    session_start();
    //Vložení config.php
    require_once('config.php');
    $error_zprava = array();
    //Validace pro errory
    $error = false;
    //Připojení k mysql serveru
    $link = mysql_connect(SQL_HOST, SQL_UZIVATEL, SQL_HESLO);
    if(!$link) {
        die('Nelze se připojit: ' . mysql_error());
    }
    //Zvolíme databázi
    $db = mysql_select_db(SQL_DATABAZE);
    if(!$db) {
        die("Databáze nenalezena");
    }
    //Zabráníme sql injekci
    function clean($str) {
        $str = @trim($str);
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }
        return mysql_real_escape_string($str);
    }
    //Vyčistíme přijaté hodnoty
    $nick = clean($_POST['nick']);
    $heslo = clean($_POST['heslo']);
    //Kontrolujeme, zda uživatel vyplnil všechna pole
      //Kontrola nicku
    if($nick == '') {
        $error_zprava[] = 'Vlož nick!';
        $error = true;
    }
      //Kontrola hesla
    if($heslo == '') {
        $error_zprava[] = 'Vlož heslo!';
        $error = true;
    }
    //Pokud je chyba v políčkách, vrátíme uživatele zpět a sdělíme co neměl vyplněno
    if($error) {
        $_SESSION['ERROR_ZPRAVA'] = $error_zprava;
        session_write_close();
        header("location: prihlaseni.php?z=prihlaseni-selhalo");
        exit();
    }
    //Vytvoříme sql dotaz
    $dotaz="SELECT * FROM uzivatele WHERE nick='$nick' AND heslo='".md5($_POST['heslo'])."'";
    mysql_query("SET character_set_client=utf8");
    mysql_query("SET character_set_connection=utf8");
    mysql_query("SET character_set_results=utf8");
    //Provedeme sql dotaz
    $pdotaz=mysql_query($dotaz);
    
    //Pokud dosud bylo vše úspěšné, zapíšeme údaje do session
    if($pdotaz) {
        if(mysql_num_rows($pdotaz) == 1) {
            session_regenerate_id();
            $uzivatel = mysql_fetch_assoc($pdotaz);
            //Zapisování údajů do session
            $_SESSION['ID'] = $uzivatel['id'];
            $_SESSION['NICK'] = $uzivatel['nick'];
            $_SESSION['HESLO'] = $uzivatel['heslo'];
            session_write_close();
            header("location: ".WEB_START."");
            exit();
        }else {
            //Vše bylo neůspěšné. Přihlášení se nezdařilo
            header("location: prihlaseni.php?z=prihlaseni-selhalo");
            exit();
        }
    }else {
        die("Selhání dotazu");
    }
?>     

authentizace.php
<?php
    //Nastartování session
    session_start();
    //Jestliže není zadaný v session id hodí vás to na prihlaseni.php 
    if(!isset($_SESSION['ID']) || (trim($_SESSION['ID']) == '')) {
        header("location: prihlaseni.php?z=automaticke-odhlaseni");
        exit();
    }
?>

odhlasit.php
<?php
    //Nastartování session
    session_start();
    //Zničení (unsetnutí) všech dat co jsme uložili do session
    unset($_SESSION['ID']);
    unset($_SESSION['NICK']);
    unset($_SESSION['HESLO']);
    echo "Byl/a jsi úspěšně odhlášen/a";
?>
<a href="prihlaseni.php">příhlášení</a> | | | <a href="">hlavní stránka</a>



Hosting - Wedos
PHP v5.3
shaggy
Profil
Ahoj mohol by si napísať čo ti nefunguje keď už chceš poradiť som pokročilý.
(však sa to zle číta bez interpunkcie)

Ale aby som nebol taký zlý, tak jedna chyba pre začiatok, v index.php máš:
require_once('autentizace.php');
a tu uvádzaš, že sa súbor volá authentizace.php.
nyllo
Profil
zprihlaseni.php - tyto chyby


Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /data/web/virtuals/53982/virtual/www/subdom/p11/zprihlaseni.php:2) in /data/web/virtuals/53982/virtual/www/subdom/p11/zprihlaseni.php on line 4

Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in /data/web/virtuals/53982/virtual/www/subdom/p11/zprihlaseni.php on line 60

Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/53982/virtual/www/subdom/p11/zprihlaseni.php:2) in /data/web/virtuals/53982/virtual/www/subdom/p11/zprihlaseni.php on line 67


registrace.php - tyto chyby

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /data/web/virtuals/53982/virtual/www/subdom/p11/registrace.php:2) in /data/web/virtuals/53982/virtual/www/subdom/p11/registrace.php on line 3


registrace.php - tyto chyby
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /data/web/virtuals/53982/virtual/www/subdom/p11/zregistrace.php:2) in /data/web/virtuals/53982/virtual/www/subdom/p11/zregistrace.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/53982/virtual/www/subdom/p11/zregistrace.php:2) in /data/web/virtuals/53982/virtual/www/subdom/p11/zregistrace.php on line 73

index.php - tyto chyby
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /data/web/virtuals/53982/virtual/www/subdom/p11/index.php:1) in /data/web/virtuals/53982/virtual/www/subdom/p11/autentizace.php on line 4

přepsal jsem se v názvu... autentizace
adresář je pojmenován správně
Rfilip
Profil
Skoro ve vsech souborech je BOM.
nyllo
Profil
Rfilip:
trochu jsem nepochopil možno rozvinout?
Amunak
Profil
Přečti si Nejčastější potíže s PHP (FAQ) » headers already sent…
nyllo
Profil
píšu v Adobe Dreamweaver 6 ten BOM nevytváří.
okolojsoucí
Profil *
A to máš podložené jak? Mohu poprosit relevantní odkaz kde se to píše? (Nejlépe na Adobe). Navíc bych řekl že nelegální software se zde netoleruje! (Nevěřím tomu že by si někdo koupil Adobe Dreamweaver 6 za 10 tis. když existuje IDE zdarma - např. NetBeans, ...)
nyllo
Profil
původ je zde vedlejší pouze jsem se zmínil.
i kdybych to pral přes google který to umožňuje mám menší pravděpodobnost že mi vznikne BOM než u PSPadu
okolojsoucí
Profil *
Tak že v 99% případu se jedná o BOM viz Forum Nette, Zdejší fórum #1, #2, #3, atd.

Neznamená když si myslíš že tam BOM není tak tam opravdu není! Tak že pokud chceš aby ti někdo kouknul na tvůj BOM tak vlož někam soubory na internet ke stažení, nebo použij hexadeditor.
nyllo
Profil
problém je se session na hostingu...


to samá se stalo i při kódování cp1250 a iso-8859-2
Amunak
Profil
nyllo:
píšu v Adobe Dreamweaver 6
Tak to radši piš v něčem, kde máš nad výstupem úplnou kontrolu.

A znova si přečti co jsem posílal v [#6] - je to tam popsané. Jedna z těch chyb to prostě být musí. Nemáš třeba na výstupu ještě nějakou chybovou hlášku? Neincluduješ náhodou tyhle soubory ještě do něčeho? Skutečně nemáš před <?php nějaký bálý znak nebo escape sekvenci?

Nepoužívej ?> pokud to skutečně nepotřebuješ.
nyllo
Profil
includuji na první řídek head.php a ten poté do každé další stránky.


Amunak:
jaký editor doporučuješ ne PSPad
han5vk
Profil
A čo je v head.php? Skús si tú session_start() dať pred ten include. Editor napríklad Notepad++, prečo nechceš PSPad?
nyllo
Profil
head.php je hlavička stránky.


tak jsem stáhl login script z netu a nainstaloval jsem ho na Endoru a na Wedos..

Endora > vše běží bez jakých koliv problémů
Wedos > Warning: session_start() [function.session-start]


Trochu zvláštní
okolojsoucí
Profil *
Ani ne. Teď jsem zkusil na Wedos webhostingu spustit následující script, a bez problému.

<?php
   session_start();
   $_SESSION['test'] = time();
   echo $_SESSION['test'];
?>
Jan Tvrdík
Profil
nyllo:
Trochu zvláštní
Servery se pravděpodobně lepší konfigurací PHP. Zkus output detector od Davida Grudla.
nyllo
Profil
index.php

Output started here:
#0 /data/web/virtuals/53982/virtual/www/subdom/test/index.php(11): {closure}('
?Warni...', 3)
#1 /data/web/virtuals/53982/virtual/www/subdom/test/index.php(11): require_once()
#2 {main}


Warning: require_once(autentizace.php) [function.require-once]: failed to open stream: No such file or directory in /data/web/virtuals/53982/virtual/www/subdom/test/index.php on line 11

Fatal error: require_once() [function.require]: Failed opening required 'autentizace.php' (include_path='.:/data/web/virtuals/53982/virtual') in /data/web/virtuals/53982/virtual/www/subdom/test/index.php on line 11


<?php
 
ob_start(function($s, $flag) {
    if ($flag & PHP_OUTPUT_HANDLER_START) {
        $e = new \Exception;
        $s = nl2br("Output started here:\n{$e->getTraceAsString()}\n\n") . $s;
    }
    return $s;
}, 2);

require_once('autentizace.php'); //Velice důležité (kdyby to tu nebylo, mohl by sem nepřihlášený uživatel) ?>
<h1>Stránka, kam se dostanou jen přihlášení uživatelé</h1>
<p>Vítej <b><?echo $_SESSION['NICK']?></b></p>
A tady dále pokračuje stránka....
<a href="odhlasit.php">Odhlásit</a>
Rfilip
Profil
Chyba na 11 řádku index.php: máš require_once('autentizace.php'); ale soubor se dle [#1] nyllo jmenuje authentizace.php.
Takže 11 řádek index.php má být require_once('authentizace.php');
Ale to ti už radil v [#2] shaggy.
Adam16
Profil
chlapče ty si komplikuješ život... to kde si splašil tieto skripty ??? keď aspoň kus vieš PHP a maš rozum tak si to uprav tak aby to bolo čo najjednoduchšie !!
Amunak
Profil
nyllo:
Notepad++

head.php je hlavička stránky.
To bude asi to, co dělá problém.
nyllo
Profil
Rfilip:
jak už jsem výše udal upsal jsem se v názvu jinak názvy odpovídají.


Adam16
Pokud víš o lepším scriptu pro login tak budu rád.
V psaní php jsem celkem lama a teprve se učím.
Adam16
Profil
nyllo:

jasne že viem... ty píšeš že si lama tak potom prečo používaš tak komplikované skripty ???
nyllo
Profil
Adam16:
tak poskytni návod prosím.
Amunak
Profil
nyllo:
tak poskytni návod prosím.
Nejčastější potíže s PHP (FAQ) » Registrace uživatelů

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: