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 |
#2 · Zasláno: 14. 11. 2010, 16:58:57
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 * |
#3 · Zasláno: 14. 11. 2010, 20:37:49
Ňefunguje ten skript...
|
||
AM_ Profil |
#4 · Zasláno: 14. 11. 2010, 20:43:03
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 * |
#5 · Zasláno: 14. 11. 2010, 21:35:14
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 |
#6 · Zasláno: 14. 11. 2010, 22:02:33
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 * |
#7 · Zasláno: 14. 11. 2010, 22:10:21
? 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 |
#8 · Zasláno: 14. 11. 2010, 22:15:01
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 * |
#9 · Zasláno: 14. 11. 2010, 22:58:43
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... |
||
Časová prodleva: 13 let
|
0