| 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: 12 let
|
|||
0