Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jakub Klindera:28.4.2018 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.4.2018 11:47
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Jakub Klindera
Jan Lupčík:28.4.2018 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.4.2018 12:38
Nahoru Odpovědět
28.4.2018 12:37
TruckersMP vývojář
Avatar
Kattii
Člen
Avatar
Kattii:28.4.2018 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
28.4.2018 15:49
Avatar
Odpovídá na Kattii
Jakub Klindera:28.4.2018 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.4.2018 16:59
Avatar
Kattii
Člen
Avatar
Odpovídá na Jakub Klindera
Kattii:28.4.2018 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
28.4.2018 17:08
Avatar
Odpovídá na Kattii
Jakub Klindera:28.4.2018 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.4.2018 17:14
Avatar
Kattii
Člen
Avatar
Odpovídá na Jakub Klindera
Kattii:28.4.2018 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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
28.4.2018 17:28
Avatar
Odpovídá na Kattii
Jakub Klindera:28.4.2018 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.4.2018 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.