Autor | Zpráva | ||
---|---|---|---|
gogy27 Profil |
#1 · Zasláno: 1. 3. 2009, 22:16:10
Dobry vecer prajem,
Toto je moj script n prihlasenie ale neviem preco ak $db_aktivovany = 0 sa nevykona ten dany prikaz ale vykona sa header("Location: main.php"); budem rad za kazdu radu btw: $query1=mysql_query("SELECT * FROM uzivatelia WHERE nick='$login'"); while ($fetch=mysql_fetch_array($query1)) { $db_aktivovany = $fetch['aktivovany']; tato cast kodu je spravna co sa tyka tych udajov tahanych z databazy ale nwm kde sa to zastavy. <?php include_once ('config.php'); session_cache_expire(2); $cache_expire = session_cache_expire(); session_start(); $login=$_POST['login']; $passw=$_POST['heslo']; $md5_passw=MD5("$passw"); if ($login!="Login" && $passw!="Password" && $login!="" && $passw!="") { $query=mysql_query("SELECT * FROM uzivatelia WHERE nick='$login'"); while ($qfetch=mysql_fetch_array($query)) { $db_login = $qfetch['nick']; $db_pass = $qfetch['heslo']; $db_id = $qfetch['id']; } if ($db_login==$login && $db_pass==$md5_passw) { $_SESSION['login'] = 1; $_SESSION['nick'] = $db_login; $_SESSION['id'] = $db_id; } if ($login =="" && $passw=="") { echo '<script>alert("Zadali ste zlé meno alebo heslo!")</script>'; echo '<script>window.location.replace("index.php");</script>'; } else { echo '<script>alert("Zadali ste zle heslo!")</script>'; echo '<script>window.location.replace("index.php");</script>'; } $query1=mysql_query("SELECT * FROM uzivatelia WHERE nick='$login'"); while ($fetch=mysql_fetch_array($query1)) { $db_aktivovany = $fetch['aktivovany']; } if ($db_aktivovany = 0) { echo '<script>alert("Aktivacia nebola vykonana!")</script>'; echo '<script>window.location.replace("aktiv.php");</script>'; } else { header("Location: main.php"); } } ?> |
||
Mastodont Profil |
#2 · Zasláno: 1. 3. 2009, 22:19:00
No protože neporovnáváš, ale přiřazuješ. Musíš tam mít dvě rovnítka.
if ($db_aktivovany == 0) { |
||
gogy27 Profil |
#3 · Zasláno: 2. 3. 2009, 14:27:49
mno ale teraz mi pre zmenu vypise zadali ste zle heslo a pritom zadavm spravne
|
||
SwimX Profil |
#4 · Zasláno: 2. 3. 2009, 14:47:12
gogy27
ža by tato podmínka?: if ($login =="" && $passw=="") { echo '<script>alert("Zadali ste zlé meno alebo heslo!")</script>'; echo '<script>window.location.replace("index.php");</script>'; } else { echo '<script>alert("Zadali ste zle heslo!")</script>'; echo '<script>window.location.replace("index.php");</script>'; } |
||
gogy27 Profil |
#5 · Zasláno: 2. 3. 2009, 15:05:43
Dakujem a este posledny problem
<?php include_once ('config.php'); session_start(); if (isset($_POST['odoslat'])) { $query1=mysql_query("SELECT * FROM uzivatelia WHERE nick='".$_SESSION['nick']."'"); while ($fetch=mysql_fetch_array($query1)) { $db_aktivovany = $fetch['aktivovany']; } if ($db_aktivovany == 1) { echo '<script>alert("Aktivacia uz bola vykonana!")</script>'; echo '<script>window.location.replace("index.php");</script>'; } else { $aktiv = $_POST['aktiv']; $query=mysql_query("SELECT * FROM uzivatelia WHERE nick='".$_SESSION['nick']."'"); while ($qfetch=mysql_fetch_array($query)) { $db_aktiv = $qfetch['aktiv']; } if ($db_aktiv==$aktiv) { mysql_query("UPDATE clenovia SET aktivovany = 1 WHERE nick = '".$_SESSION['nick']."'"); echo '<script>alert("Teraz sa mozete prihlasit!")</script>'; echo '<script>window.location.replace("index.php");</script>'; } else { echo '<script>alert("Zadali ste zle aktivacne heslo!")</script>'; echo '<script>window.location.replace("index.php?clanek=aktiv");</script>'; } if ($aktiv=="") { echo '<script>alert("Zadali ste zle aktivacne heslo!")</script>'; echo '<script>window.location.replace("index.php?clanek=aktiv");</script>'; } } } echo "<b>ZADAJTE AKTIVACNE HESLO, KTORE VAM PRISLO V E-MAILy</b><br>"; ?> <form name="form" method="post"><br> <input type="text" size="10" maxlength="5" name="aktiv" class="tmave" <?php if(isset($_POST['odoslat'])) {echo "value=\"$aktiv\"";} ?>> <input type="submit" name="odoslat" class="tmave" value="Overit"> </form> </body> </html> vypise sice Teraz sa mozete prihlasit! ale nevykona sa prikaz mysql_query("UPDATE clenovia SET aktivovany = 1 WHERE nick = '".$_SESSION['nick']."'"); |
||
SwimX Profil |
#6 · Zasláno: 2. 3. 2009, 15:07:57
gogy27
neprocházel jsem to celý ale zkus: mysql_query() or die (mysql_error()); |
||
Joker Profil |
#7 · Zasláno: 2. 3. 2009, 15:11:11
gogy27
Zkuste si vypsat, co to najde v databázi. Pár poznámek ke kódu: 1. $md5_passw=MD5("$passw"); - proč si tu proměnnou dáváte ještě do řetězce? Krom toho proměnná $passw je tam celkem zbytečná. 2. Zbytečně několikrát opisujete stejný kód, ve kterém se mění jen chybová hláška. Bylo by lepší dát hlášku do proměnné a pak to vypsat jen jednou. 3. if ($login!="Login" && $passw!="Password" && $login!="" && $passw!="") Jednak bych testoval nejen prázdný řetězec, ale obecně jestli není proměnná prázdná, jednak obecnější podmínky dávejte před konkrétnější. Vyhodnocování podmínek && skončí na první, která je false (trochu zjednodušuju), takže je lepší obecnější podmínky (na kterých to skončí častěji) nacpat dopředu. No a krom toho, například: if(($_POST["login"] != "něco") && !empty($_POST["login"])) v případě, že $_POST["login"] bude prázdné vyhodí poznámku, zatímco: if(!empty($_POST["login"]) && ($_POST["login"] != "něco")) projde v pořádku, protože skončí už na té první podmínce a druhou ani nezkusí vyhodnotit. 4. Posílat data do databáze bez escapování je dost nebezpečné, s dotazem: SELECT * FROM uzivatelia WHERE nick='$login' když zadám jméno: ' OR 1=1-- a nějaké heslo, přihlásím se na prvního uživatele, který má to heslo. 5. Jednodušší než vybrat uživatele a zkontrolovat jeho heslo je kontrolovat jeho heslo rovnou v SQL dotazu: $login = mysql_real_escape_string($_POST["login"]); $heslo = md5($_POST["heslo"]); $sql = "SELECT * FROM uzivatelia WHERE nick='$login' AND heslo='$heslo' AND aktivovany=1" -> pokud mi ten dotaz něco najde, je to správný uživatel. Pokud nic nenajde, je špatné jméno nebo heslo, nebo není aktivovaný. |
||
gogy27 Profil |
#8 · Zasláno: 2. 3. 2009, 15:30:05 · Upravil/a: gogy27
Joker
Dakujem za ochotu ucim sa to a preto taketo rady mi su vzdy napomocne :) 1. toto md5 neni moja vyroba tahal som to z nejakeho free prihlasenia kde je metoda zahashovania hesla prave takato 2. To mas pravdu ale uz to radsej nebudem menit :P 3. jednak bych testoval nejen prázdný řetězec, ale obecně jestli není proměnná prázdná myslis if (!$login)? if(($_POST["login"] != "něco") && !empty($_POST["login"])) v případě, že $_POST["login"] bude prázdné vyhodí poznámku, zatímco: if(!empty($_POST["login"]) && ($_POST["login"] != "něco")) projde v pořádku, protože skončí už na té první podmínce a druhou ani nezkusí vyhodnotit. co si chcel tymto povedat? 4. moze byt aj $nick = htmlspecialchars(addslashes($_POST['nick'])); ? 5. ttymto by si nahradil $login = mysql_real_escape_string($_POST["login"]); $heslo = md5($_POST["heslo"]); $sql = "SELECT * FROM uzivatelia WHERE nick='$login' AND heslo='$heslo' AND aktivovany=1" toto? $login=$_POST['login']; $passw=$_POST['heslo']; $md5_passw=MD5("$passw"); |
||
SwimX Profil |
#9 · Zasláno: 2. 3. 2009, 15:51:29
gogy27
1, stačí vyhodit ty uvozovky v md5("$prom") => md5($prom) 3, ne if not login ale if emtpy login „co si chcel tymto povedat?“ myslel tím, že „if(!empty($_POST["login"]) && ($_POST["login"] != "něco"))“ pokud proměnná neexistuje - tak podmínka !empty bude false -> na to pokračování PHP kašle a rovno vyhodnotí celou podmínku false, čili nebude se snažit porovnávat neexistující proměnnou s řetězcem což by mělo vyhodit nějaký warning, notice (naštěstí se většinou nezobrazují takže je to tak trochu jedno, ale správné to není) 4, jo přesně to. 5, ano |
||
Joker Profil |
#10 · Zasláno: 2. 3. 2009, 15:59:37
gogy27
1. Když chcete hashovat jen obsah proměnné, nemají okolo být uvozovky. Ty jsou naopak správně, když chcete zadat nějaký konkrétní text. 3. Pokud chcete vědět, zda proměnná byla nastavena a něco se v ní nachází, použijte funkci empty() (ta vrátí zda je proměnná prázdná, takže !empty() je zda není prázdná). Pozor, empty() bere jako prázdnou třeba i číselnou proměnnou, ve které je 0. Pokud chcete vědět, zda je proměnná nastavená, ale přitom je povolená hodnota třeba i 0, použijte isset() 4. Částečně správně- htmlspecialchars slouží k výpisu do stránky, addslashes k zápisu do databáze. Možná lepší než addslashes by bylo použít mysql_real_escape_string, jako jsem to udělal já ve svém příkladu. |
||
gogy27 Profil |
#11 · Zasláno: 2. 3. 2009, 16:05:56
oka oka dakujem, ale stale mam nieco v tomto scripte zle preotze ak dam zle heslo ma normalne prihlasi :D a ked tam spravne heslo tak napise aktivacia este nebola vykonana vobec tomu nechapem
<?php include_once ('config.php'); session_cache_expire(2); $cache_expire = session_cache_expire(); session_start(); $login=$_POST['login']; $passw=$_POST['heslo']; $md5_passw=MD5($passw); if ($login!="Login" && $passw!="Password" && $login!="" && $passw!="") { $query=mysql_query("SELECT * FROM uzivatelia WHERE nick='$login'"); while ($qfetch=mysql_fetch_array($query)) { $db_login = $qfetch['nick']; $db_pass = $qfetch['heslo']; $db_id = $qfetch['id']; } if ($db_login==$login && $db_pass==$md5_passw) { $_SESSION['login'] = 1; $_SESSION['nick'] = $db_login; $_SESSION['id'] = $db_id; } else { echo '<script>alert("Zadali ste zle heslo!")</script>'; echo '<script>window.location.replace("index.php");</script>'; } if ($login =="" && $passw=="") { echo '<script>alert("Zadali ste zlé meno alebo heslo!")</script>'; echo '<script>window.location.replace("index.php");</script>'; } $query1=mysql_query("SELECT * FROM uzivatelia WHERE nick='$login'") or die (mysql_error()); while ($fetch=mysql_fetch_array($query1)) { $db_aktivovany = $fetch['aktivovany']; } if ($db_aktivovany == 0) { echo '<script>alert("Aktivacia nebola vykonana!")</script>'; echo '<script>window.location.replace("index.php?clanek=aktiv");</script>'; } else { header("Location: main.php"); } } ?> |
||
SwimX Profil |
#12 · Zasláno: 2. 3. 2009, 16:12:54 · Upravil/a: SwimX
gogy27
nepoučitelný :)) takle by to šlo? <?php include_once ('config.php'); session_cache_expire(2); $cache_expire = session_cache_expire(); session_start(); $login = mysql_real_escape_string($_POST["login"]); $heslo = md5($_POST["heslo"]); if (!empty($login) && !empty($heslo)) { $sql = "SELECT * FROM uzivatelia WHERE nick='$login' AND heslo='$heslo' AND aktivovany=1"; //edit středník $query=mysql_query($sql); $qfetch=mysql_fetch_array($query) $db_login = $qfetch['nick']; $db_pass = $qfetch['heslo']; $db_id = $qfetch['id']; if (!empty($db_login)) { // edit: překlep $_SESSION['login'] = 1; $_SESSION['nick'] = $db_login; $_SESSION['id'] = $db_id; } else { echo '<script>alert("Zadali ste zle heslo!")</script>'; echo '<script>window.location.replace("index.php");</script>'; } } ?> |
||
gogy27 Profil |
#13 · Zasláno: 2. 3. 2009, 16:19:38
mno trosku jj nepoucitelny ;)
3 chybycky sa tam nasli ale newa opravil som :) btw: kde mam dat header("Location: main.php"); tam jak je if (!epmty($db_login)) { $_SESSION['login'] = 1; $_SESSION['nick'] = $db_login; $_SESSION['id'] = $db_id; } toto? |
||
SwimX Profil |
#14 · Zasláno: 2. 3. 2009, 16:26:37
gogy27
„3 chybycky sa tam nasli ale newa opravil som :) “ 2 sem našel, třetí nevidím. „ if (!epmty($db_login)) { $_SESSION['login'] = 1; $_SESSION['nick'] = $db_login; $_SESSION['id'] = $db_id; } todle se stane pokud to najde nějaký záznam => pokud jedobře zadané heslo a zároveň aktivovaný uživatel. kdy ho chceš přesměrovat na main.php? |
||
gogy27 Profil |
#15 · Zasláno: 2. 3. 2009, 16:35:58
takze ak aktivacia nebola vykonana hodit ho do Aktivacia nebola vykonana "index.php?clanek=aktiv" a ak je spravny nick heslo a aktivacia bola vykonana hodit ho na main.php
|
||
SwimX Profil |
#16 · Zasláno: 2. 3. 2009, 16:41:19 · Upravil/a: SwimX
gogy27
tak to bude chtít úpravu: <?php include_once ('config.php'); session_cache_expire(2); $cache_expire = session_cache_expire(); session_start(); $login = mysql_real_escape_string($_POST["login"]); $heslo = md5($_POST["heslo"]); if (!empty($login) && !empty($heslo)) { $sql = "SELECT * FROM uzivatelia WHERE nick='$login' AND heslo='$heslo'"; //edit středník $query=mysql_query($sql); $qfetch=mysql_fetch_array($query); // středníky škaredý $db_login = $qfetch['nick']; $db_pass = $qfetch['heslo']; $db_id = $qfetch['id']; $db_akt = $qfetch['aktivovany']; if (!empty($db_login) && $db_akt == 1) { // správné heslo a aktivovaný $_SESSION['login'] = 1; $_SESSION['nick'] = $db_login; $_SESSION['id'] = $db_id; } elseif (!empty($db_login) && $db_akt == 0) { // správné heslo NEaktivovaný header("location: "); } else { //špatné heslo header("location: "); } } ?> |
||
gogy27 Profil |
#17 · Zasláno: 2. 3. 2009, 16:56:03
mno uz mi to fachci :) som rad inac ta chyba je tu $qfetch=mysql_fetch_array($query) taktiez chyba ;
|
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0