Autor Zpráva
soul
Profil *
Dobrý den, zde mám skript na registraci. Bohužel ho mám nejspíš špatně a za boha nemohu najít chybu. (Pokud zadám Registrovat, vyjede mi že mám chybu na řádku 9 ale tu potom v php.ini zakážu. Mohl by mi prosím někdo poradit kde mám chybu?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Dokument bez názvu</title>
    </head>
    <body>
        <?php 
        $kontrola_registrace = $_POST["potvrd_registraci"];
        if ($kontrola_registrace) {
        $nick = $_POST["nick"];
        $password = $_POST["password"];
        $potvrd_password = $_POST["potvrd_password"];
        $email = $_POST["email"];
        if ($password == $potvrd_password){
            if ($nick AND $email){
                md5(md5($password));  
            }    
        mysql_connect("localhost", "root", "7s1u1ff3");
        mysql_select_db("vojtuvblog");
        $zapis = mysql_query("INSERT INTO uzivatele SET nick='$nick', password='$password', email='$email', opravneni='1';");
        echo "Registrace proběhla v pořádku";}
                else {echo "Hesla nejsou shodná.";}
            }
        ?>
        <form method="POST" action="<?php $PHP_SELF; ?>">
            <table>
                <td><tr>Nick: <input type="text" name="nick" /> </tr></td><br>
                <td><tr>Email: <input type="text" name="email" /> </tr></td><br>
                <td><tr>Heslo: <input type="password" name="potvrd_password" /> </tr></td><br>
                <td><tr>Potvrd heslo: <input type="password" name="password" /> </tr></td><br>
                    <td><tr><input type="submit" name="potvrd_registraci" value="Registrovat"</tr></td><br>
            </table>
        </form>
        
    </body>
</html>
juriad
Profil
To je tedy bastl neskutečný; snad na každém řádku je nějaká chyba. 9. řádek způsobí jen varování, ale skript pokračuje dál.
Mě tvůj skript beze změny funguje.


<!doctype html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Dokument bez názvu</title>
    </head>
    <body>
        <?php
        if (isset($_POST['registrace'])) { # pokud byl odeslán formulář odesílacím tlačítkem
            if (empty($_POST['nick']) || empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email'])) {
                echo "Některá pole nejsou vyplněná!";
            } else if ($_POST['password'] != $_POST['password2']) {
                echo "Kontrola hesla neodpovídá heslu!";
            } else {
                $pass = sha1($_POST['password']); # použití bezpečnější funkce, jen jednou(!) a uložit výsledek
                $db = mysqli_connect("localhost", "root", "TVOJE_TAJNE_HESLO", "vojtuvblog"); # použití mysqli_* místo zastaralého mysql_*; doufám, že tvé přihlašovací údaje nejsou reálné
                $sql = "INSERT INTO uzivatele SET nick='"
                    . mysqli_real_escape_string($db, $_POST['nick']) # escapování vkládaných dat
                    . "', password='$pass', email='" # heslo není vyloženě třeba escapovat protože sha1 vrací jen znaky 0-9 a a-f
                    . mysqli_real_escape_string($db, $_POST['email']) . "', opravneni=1"; # na konci dotazu nemá být středník, číslo se nepíše do apostofů
                if (!mysqli_query($db, $sql)) { # proveď dotaz a pokud nastala chyba v dotazu
                    echo "Registrace se nezdařila: ". mysqli_error($db); # vypiš problém, na produkci ho nevypisuj; útočník se dozví informace o databázi 
                } else {
                    echo "Registrace proběhla v pořádku";
                }
            }
        }
        ?>
        <form method="POST" action="#"> <!-- sám na sebe-->
            <table> <!-- nauč se psát tabulky; je to vždy table -> tr -> td -->
                <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="password"></td></tr>
                <tr><td>Potvrd heslo:</td><td><input type="password" name="password2"></td></tr>
                <tr><td></td><td><input type="submit" name="registrace" value="Registrovat"></td></tr>
            </table>
        </form>
    </body>
</html>
Rockstar
Profil *
Jak vyřešit tyto chyby?
<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Přihlášení</title>
    </head>
    <body>
        <?php
        if (isset($_POST['potvrd_prihlaseni'])){
            if(empty($_POST['nick']) || empty($_POST['password'])){
                echo 'Nick nebo heslo nebylo zadáno. Zadejte prosím všechny položky.';
            } else {
             $pass = sha1($_POST['password']);
             $nick = $_POST['nick'];
             $db = mysqli_connect("localhost", "root", "idonthave", "Mordsmordre");
             $dotaz = mysqli_query("SELECT * FROM uzivatele WHERE nick='".mysql_real_escape_string($nick)."' AND password='$pass'");
             while ($vystup = mysqli_fetch_object($dotaz))
             {
                 $id = $vystup->id;
                 $nickDB = $vystup->nick;
                 $passwordDB = $vystup->password;
                 $email = $vystup->email;
                 $opravneni = $vystup->opravneni;
             }
             if($nick != $nickDB || $heslo != $passwordDB){
                 echo 'Heslo nebo nick se neshoduje.';
             } else {
                 $_SESSION["id"] = $id;
                 $_SESSION["nick"] = $nick;
                 $_SESSION["email"] = $email;
                 $_SESSION["opravneni"] = $opravneni;
                 echo "Byl jsi přihlášen jako $nick";
             }
            }
            }
        ?>
        <form method="POST" action="#">
            <table>
                <tr><td>Nick:</td> <td><input type="text" name="nick" /> </td></tr>
                <tr><td>Heslo:</td><td> <input type="password" name="password" /></td></tr>
                <tr><td></td><td><input type="submit" name="potvrd_prihlaseni" value="Příhlásit"></td></tr>
            </table>
        </form>
        
    </body>
</html>



Chyby:
Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\Complex-Web-Server-2\www\VojtuvBlog\prihlaseni.php on line 17

Warning: mysqli_fetch_object() expects parameter 1 to be mysqli_result, null given in C:\Complex-Web-Server-2\www\VojtuvBlog\prihlaseni.php on line 18

Notice: Undefined variable: nickDB in C:\Complex-Web-Server-2\www\VojtuvBlog\prihlaseni.php on line 26
Micruss
Profil
když používáš mysqli tak musíš dát i proměnou s db

$db = # db connect
$query = mysqli_query($db, "QUERY");
a pak to poběží oboje :)
Alphard
Profil
Rockstar:
Přesunul jsem do původního vlákna, vaše problémy částečně souvisí s tím, co vám juriad radil. mysql_ extenze je zastaralá, proto použil mysqli_, kterou lze používat velmi podobně, ale ne stejně. Viz např. nutnost předávat parametr na spojení jak psal [#4] Micruss. Další chyby vypadají na selhání dotazu, vypište si sql chybu. Tady vlastně ne, omlouvám se. Když doplníte parametr na spojení, je možné, že to bude hned fungovat.

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: