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
Co vypisuje funkce mysql_error(), když ji použiješ po neúspěšném vložení?
Alphard
Profil
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()";
}
Bez tohoto těžko zjistíš proč se neukládá ;)
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

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: