Autor | Zpráva | ||
---|---|---|---|
larakyn Profil |
Ahoj,
vytvořil jsem si soubor pro registraci, ale nechce za žádnou cenu zapisovat :-( Zápis do db jsem dělal stokrát a nevim, proč to teď nejde :-( Samozřejmě v header.php má připojení do db atd. Chci se zeptat, kde dělám chybu. Díky za odpověď. Tady kod: Připojení (v header.php) <?php mysql_connect("localhost", "NECHAL BYCH V SOUKROMÍ :-)", "TAKÉ"); mysql_select_db("DB"); mysql_error(); ?> Samotná registrace: <?php include "header.php"; ?> <div class="np">Registrace:</div> <div class="reg"> <?php $ok = $_POST["ok"]; if(isset($ok)){ $nick = $_POST["nick"]; $email = $_POST["email"]; $heslo1 = $_POST["heslo1"]; $heslo2 = $_POST["heslo2"]; $ip = $_SERVER["REMOTE_ADDR"]; $heslo = md5(md5($heslo1)); if($heslo1==$heslo2){ $zapis = mysql_query("INSERT INTO uzivatele SET nick='$nick', heslo='$heslotady má být ' a už jsem si toho všiml :), ip='$ip', email='$email'; "); echo "<div style='color: red'><b>Vše proběhlo v pořádku :-)</b></div><br>"; }else { echo "<div style='color: red'><b>Hesla nesedí :-(</b></div><br>"; } } ?> <form action="<?php $PHP_SELF; ?>" method="post"> <table> <tr><td>Nick:</td><td><input type="text" name="nick"></td></tr> <tr><td>Email:</td><td><input type="text" name="email"></td></tr> <tr><td>Heslo:</td><td><input type="password" name="heslo1"></td></tr> <tr><td>Heslo znovu:</td><td><input type="password" name="heslo2"></td></tr> <tr><td></td><td><input type="submit" name="ok" value="Odeslat"></td></tr> </table> </form> </div> <?php include "footer.php"; ?> larakyn: Vyřešeno... |
||
jenikkozak Profil |
#2 · Zasláno: 5. 3. 2014, 23:44:14
Co vypisuje funkce mysql_error(), když ji použiješ po neúspěšném vložení?
|
||
Alphard Profil |
#3 · Zasláno: 5. 3. 2014, 23:44:20
Například za $heslo chybí apostrof. Data nejsou escapovaná.
Řádek 7 a 8 není domyšlený, do isset dejte přímo $_POST["ok"]; stejně tak dále nevidím smysl v tom kopírování, ale tam to nevadí. |
||
Enko Profil |
ověřování platnosti odeslání formuláře máš lepší dělat takto:
if($_SERVER["REQUEST_METHOD"] == "POST"){ //formular byl odeslan //cele toto muzes nahradit tim tvym $ok } Už ti někdo řekl, že MD5 není vhodná pro ukládání hesel? Hlavně ta funkce na to nebyla ani navržená. A tím, že to uděláš dvojnásobně, tak tím bezpečnost nezvýšíš a naopak si tím můžeš přidělat více starostí? Ukládat hesla v MD5 je dnesk v podstatě stejné jako ukládat je v plaintextu. Ošetři si všechny vstupy do databátze na SQL Injection. Např. čísla převeď na čísla. a veškerý text prožeň přes mysql_real_escape_string(). Ale to už zmiňoval Alphard. Pokud necháš parametr action v tagu form prázdný, je to stejné jako $_SERVER["PHP_SELF"]. Příklad: <form action="" method="POST"> Vypiš si mysql_error v případě, že selže uložení do databáze. Například takto: $sql_insert = "INSERT INTO tabulka SET něco..."; if(mysql_query($sql_insert)){ header("Location: /ok.php]/ok.php]http://$_SERVER[SERVER_NAME]/ok.php", true, 303); //přesměrování na info stránku, že je vše OK ... Dotaz na adminy: Nechápu, proč mi to tu nejde opravit, vždy se tam doplní chybně "/ok.php]" i když to smažu a uložím exit; } else{ echo "data nebyla ulozena"; echo "Chyba:" . mysql_errno() . " - " . mysql_error()"; } Samozřejmě si ještě ověřuj, zda ti uživatel vyplnil, to co očekáváš a když ne, tak mu to vrať, ať se polepší :-) To jen tak ve stručnosti. Snad tam není překlep, psal jsem to rovnou sem bez kontroly syntaxe. Pokud potřebuješ více info, dej vědět |
||
Časová prodleva: 10 let
|
0