Autor Zpráva
Viliam22
Profil *
Spravil som si php skript ktory chcem pouzit na overenie jednej stranky. Fungovat ma tak ze najprv hodi formular kde uzivatel hodi id a heslo potom ho odosle formou POST na stranku 2 kde otvori subor rozdeli si id a hesla a ulozi ich do premennych potom subor zavre a zacne cyklus kde premenne overuje ci sa nezhoduju a ak sa zhodouju hodi 1 a ukaze stranku ak sa nezhoduju necha 0 a zobrazi sa chybova hlaska :smt102

index.php
<?php    
$e = empty($_GET['e']) ? 1 : $_GET['e'];
        switch($e) {
            case 1: // Prihlasovaci formular
              echo "Musite sa prihlasit <br>";
              echo "<form action=\"index.php?e=2\" method=\"POST\">Id: <input type=\"text\" name=\"id\"> Heslo: <input type=\"password\" name=\"heslo\"> <input type=\"submit\" value=\"Prihlásiť\"></form>";
            break;
            case 2: 
            
    $subor = fopen("users.dat", "r");
    $i = 0;
    while (!feof($subor)) {
        $riadok = fgets($subor, 4096);
        list($id1[$i], $heslo2[$i]) = split(":", $riadok); 
        $i++;
    }

    fclose($subor);

    $prihlas=0;

    for ($i=0; $i<count($heslo2); $i++) {
            
        if ($_POST["id"] == $id1[$i] && $_POST["heslo"] == $heslo2[$i]) { 
        $prihlas=1;
        }

        }

    if ($prihlas == 1) {
        echo "<br>Ahoj " . $_POST["id"]; 
    }
    
    if ($prihlas == 0) { 
        echo "Zadali ste chybne heslo. Spat";  
    }    
            break;
        }
?>


users.dat
1:b
0:a
123:abc
456:aaa


Ale nefunguje ak zadam hociake id a heslo so suboru users.dat vzdy hodi chybnu hlasku teda premennu prihlas necha na 0 teoreticky je vsetko odbre a malo by to fungovat neviem v com je problem DAKUJEm za pomoc :wink:

Moderátor Majkl578: Tvůj projev je špatně srozumitelný, piš prosím česky/slovensky a s diakritikou.
AM_
Profil
Nerozumím jazyku tvého kmene. Možná, že když příště napises zpravu s diakritikou a interpunkci nekdo se bude obtezovat ti pomoct ale slovenstina bez hacku a carek a interpunkce to uz je na me moc velky hardcore
Viliam22
Profil *
Ňefunguje ten skript...
AM_
Profil
Používej diakritiku a interpunkci tam, kde být má.
A zkus třeba říct, co se v tom for cyklu děje v tom kroku, kdy se má proměnná $prihlas nastavit na 1 - kterou z podmínek to neprojde, zda na id, nebo na heslo (vyechuješ si v ten moment klíčové proměnné a zjišťuješ, co je špatně).
Viliam22
Profil *
Ten skript funguje pokiaľ je v súbore users.dat jeden riadok alebo keď je users.dat tak ako v predchádzajúcom príspevku 4 riadky tak funguje prihlásenie len pre posledný riadok (4.) v tomto prípade ID=456 a [b]HESLO=aaa[/b] vtedy vráti do premennej $prihlas = 1

count($heslo2) je pre 4 riadky users.dat hodnota 4 , to je asi v poriadku

ak dám do for echo s $id1[$i] a $heslo2[$i] výpiše všetky hodnoty postupne s users.dat pre $i patrí hodnota 0-3

vyzerá všetko v poriadku vôbec neviem prečo to funguje len na posledný riadok
AM_
Profil
gratuluji k naučení se s diakritikou, teď bych ještě poprosil interpunkci, pak už budou možná věty čitelné.
Problém je v tom, že ověření zda $prihlas je 0 nebo 1 máš nacpané už v tom cyklu, takže se provádí při každém průchodu cyklem (který bude vždy jenom jeden, protože na konci toho cyklu máš nepodmíněně break). Ověření má být až za cyklem a ten break vyhoď.
Viliam22
Profil *
? cyklus začína na riadku 22 a končí na riadku 28 a to overenie či je premenná $prihlas 1 alebo 0 je až za cyklom keď ten skončí na riadku 28 a to break; na riadku 37 patrí k switch riadok 3
AM_
Profil
Viliam22:
pardon, nevšiml jsem si (nechci rýpat, ale kdybys odsazoval podle nějakého coding-style a ne jak se ti zrovna zachce, bylo by to vidět hned).
snake.aas
Profil *
a) dávat jako action "index.php?e=2" mi přijde mírně řečeno nešikovné
b) split je od verze 5.3 oznacene jako deprecated. pouzij explode
c) celý skript je... podivný.... switch? proč? podmínka ==1 a druhá ==0? není jednodušší else?
d) chyba je v tom, že ty ze souboru načteš řádek dlouhý 4096. tzn. po rozdělení máš v hesle spoustu netisknutelných znaků a při porovnání to hodí false... uprava by mohla být, že dáš trim($heslo2[$i])

ale zamyslel bych se nad nějakým lepším řešením...

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