Diskuze: Přihlášení uživatele z databáze

PHP PHP Přihlášení uživatele z databáze American English version English version

Aktivity (1)
Avatar
Jakub Klindera:28. dubna 11:47

Zdravíčko,
mám problém s příhlášením uživatele z databáze. Prý by mohl být problém z verzí PHP.

Vyhazuje mi to chybu:

Fatal error: Uncaught Error: Call to undefined function mysql_real_escape_string() in C:\xampp\htdocs\sablona\sign.php:40 Stack trace: #0 {main} thrown in C:\xampp\htdocs\sablona\sign.php on line 40

_____________­_____________________

<html>
<head>

        <meta charset="utf-8">
        <title>Responsible web</title>
        <link rel="stylesheet" type="text/css" href="style.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>




</head>

<body>

        <header>
                Přihlásit se
        </header>


    <div id="prihlasovani">

                <form method="post">
                        Jméno:<br />
                        <input type="text" name="jmeno" /><br />
                       Heslo:<br />
                        <input type="password" name="heslo" /><br />

                        <input type="submit" value="Přihlásit se" />
                </form>




            <?php

            $pripojeni = mysqli_connect('localhost', 'root', '', 'sablona');


            $login = mysql_real_escape_string($pripojeni,$_POST["jmeno"]);
            $heslo = mysql_real_escape_string($pripojeni,$_POST["heslo"]);
            $dotaz ="(SELECT * FROM uzivatele WHERE jmeno = ".$_POST["jmeno"]."','".$_POST["heslo"]."')";
            $result = mysql_query($pripojeni, $dotaz);
            $overeni = mysql_num_rows($dotaz);
            if($overeni == 1) {
             session_start();
             $_SESSION['jmeno'] = stripslashes($login);

             header("Location: administrace.php");
             die();
            } else {
             echo"Zadal jsi špatný login nebo heslo!";
            }
            ?>


</body>

</html>

Děkuji

 
Odpovědět 28. dubna 11:47
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Jakub Klindera
IT Man:28. dubna 12:37

The mysql extension has been deprecated since PHP 5.5. The mysqli or PDO extension should be used instead. The deprecation has been decided in mysql_deprecation, where a discussion of the reasons behind this decision can be found.

Od verze PHP 7.0 jsou funkce mysql_ odstraněny.

Můžeš se podívat na následující seriál, používá se tam PDO.
https://www.itnetwork.cz/php/databaze

Editováno 28. dubna 12:38
Nahoru Odpovědět  +1 28. dubna 12:37
Cokoliv a kdokoliv může jednou uspět.
Avatar
Kattii
Člen
Avatar
Kattii:28. dubna 15:49

Zdravím,
místo

$pripojeni = mysqli_connect('localhost', 'root', '', 'sablona');

zadej

$pripojeni = mysqli_connect('127.0.0.1', 'root', '', 'sablona');

dále přepiš všechny mysql_real_es­cape_string na mysqli_real_es­cape_string
a u mysql_num_rows:

$query = "SELECT * ....";
$dotaz = mysqli_query($con, $query);
$overeni = mysqli_num_rows($dotaz);

píšu z hlavy, kdyby to házelo další chybu, napiš

 
Nahoru Odpovědět  +1 28. dubna 15:49
Avatar
Odpovídá na Kattii
Jakub Klindera:28. dubna 16:59

Děkuji, ale každopádně to háže warning a po zadání jména a hesla mě to nepřepojí na další stránku.

Warning:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\sablona\sign.php on line 44
Zadal jsi špatný login nebo heslo!
<?php

           $pripojeni = mysqli_connect('127.0.0.1', 'root', '', 'sablona');


           $login = mysqli_real_escape_string($pripojeni,$_POST["jmeno"]);
           $heslo = mysqli_real_escape_string($pripojeni,$_POST["heslo"]);
           $query ="(SELECT * FROM uzivatele WHERE jmeno = ".$_POST["jmeno"]."','".$_POST["heslo"]."')";
           $dotaz = mysqli_query($pripojeni, $query);
           $overeni = mysqli_num_rows($dotaz);
           if($overeni == 1) {
            session_start();
            $_SESSION['jmeno'] = stripslashes($login);

            header("Location: administrace.php");
            die();
           } else {
            echo"Zadal jsi špatný login nebo heslo!";
           }
           ?>
 
Nahoru Odpovědět 28. dubna 16:59
Avatar
Kattii
Člen
Avatar
Odpovídá na Jakub Klindera
Kattii:28. dubna 17:08

s touhle hláškou mám pořád problém, vždy na to zapomenu. Řešení zde:

$dotaz = mysqli_query($pripojeni, $query) or die(mysqli_error($pripojeni));
 
Nahoru Odpovědět  +1 28. dubna 17:08
Avatar
Odpovídá na Kattii
Jakub Klindera:28. dubna 17:14

Děkuji moc :) Hláška zmizla, ale naskočila hned další :D

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '','123456')' at line 1

Chyba bude nejspíše zde

$query ="(SELECT * FROM uzivatele WHERE jmeno = ".$_POST["jmeno"]."','".$_POST["heslo"]."')";
 
Nahoru Odpovědět 28. dubna 17:14
Avatar
Kattii
Člen
Avatar
Odpovídá na Jakub Klindera
Kattii:28. dubna 17:28

Tentokrát zkus smazat ty závorky, nevím, jestli to k něčemu bude, ale já je tam nepoužívám. Taky, jak se dívám, máš tam napsané, že hledáš jméno, které odpovídá odeslaným datům, ale zároveň i heslu. Nemělo by tam spíš být jmeno="..." AND heslo="..."? Jak máš v db název položky pro heslo?
Taky může být chyba v syntaxi spojování řezezce $_POST, dej je do proměnné a následně zapiš jmeno='$promenna'

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 28. dubna 17:28
Avatar
Odpovídá na Kattii
Jakub Klindera:28. dubna 17:37

Funkční.

Chyba byla v tom spojování řetězce. Napsal jsem to takto a funguje.

$promenalogin = $_POST["jmeno"];
$promenaheslo = $_POST["heslo"];
$query ="SELECT * FROM uzivatele WHERE jmeno = '$promenalogin' AND heslo='$promenaheslo'";

Mockrát děkuji :)

 
Nahoru Odpovědět 28. dubna 17:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.