NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
marasol
Člen
Avatar
marasol:28.2.2017 21:29

Zdravím, potřeboval bych poradit co mám v tomto scriptu chybně. Zkoušel jsem to s videi na YouTube, ale hází mi to chybu: Fatal error: Call to undefined function mysgl_real_es­cape_string() in C:\wamp64\www\re­gister.php on line 8

Data se nezapíšou do databáze. Jsem začátečník, takže tam bude určitě spoustu chyb, proto prosím o radu. Děkuji za odpovědi.

<?php
session_start();

// connect to database
$db = mysqli_connec­t("localhost", "root", "", "authentication");
if (isset($_POST['re­gister_btn'])) {
$username = mysgl_real_es­cape_string($_POS­T['username']);
$email = mysgl_real_es­cape_string($_POS­T['email']);
$password = mysgl_real_es­cape_string($_POS­T['password']);
$password2 = mysgl_real_es­cape_string($_POS­T['password2']);
$wallet = mysgl_real_es­cape_string($_POS­T['wallet']);
if ($password == password2) {
// create user
$password = md5($password); //hash password before storing for security purposes
$sgl = "INSERT INTO users(username, email, password, wallet) VALUES('$username', '$email', '$password')";
mysgli_query($db, $sgl);
mysqli_select_db("pro­fitableinvest_da­tabaze");
$_SESSION['mes­sage'] = "You are now logged in";
$_SESSION['user­name'] = $username;
header("location: home.php"); //redirect to home page
}else{
$_SESSION['mes­sage'] = "Tyto dvě hesla nejsou shodná";
}

}

?>

<!DOCTYPE html>
<html>
<head>
<title>Profita­bleinvest</ti­tle>
</head>
<body>
<div class="header">
<h1>Registrace, login a logout user php mysql</h1>
</div>

<form method="POST" action="regis­ter.php">
<table>
<tr>
<td>Username:</td>
<td><input type="text" name="username" class="textIn­put"</td>
</tr>
<tr>
<td>Email:</td>
<td><input type="email" name="email" class="textIn­put"</td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" class="textIn­put"</td>
</tr>
<tr>
<td>Password again:</td>
<td><input type="password" name="password2" class="textIn­put"</td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="register_btn" value="Register"</td>
</tr>
</table>
</form>
</body>
</html>

 
Odpovědět
28.2.2017 21:29
Avatar
Nahoru Odpovědět
28.2.2017 21:46
Neaktivní uživatelský účet
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na marasol
Jindřich Máca:28.2.2017 22:21

Zdravím, jak sám píšeš, v tom kódu je veliká spousta chyb, že snad ani nevím, kde bych začal... Každopádně, aby jsi neřekl, tak jsem se to pokusil nějak opravit a tady máš revizi:

<?php

session_start();

// Connect to database
$db = mysqli_connect("localhost", "root", "", "authentication");

if (isset($_POST['register_btn'])) {
        $username = mysql_real_escape_string($_POST['username']);
        $email = mysql_real_escape_string($_POST['email']);
        $password = mysql_real_escape_string($_POST['password']);
        $password2 = mysql_real_escape_string($_POST['password2']);
        $wallet = mysql_real_escape_string($_POST['wallet']);

        if ($password == password2) {
                // Create user
                $password = md5($password); // Hash password before storing for security purposes
                $sgl = "INSERT INTO users(username, email, password, wallet) VALUES('$username', '$email', '$password')";
                mysqli_query($db, $sgl);
                mysqli_select_db("profitableinvest_databaze");
                $_SESSION['message'] = "You are now logged in";
                $_SESSION['username'] = $username;
                header("location: home.php"); // Redirect to home page
        } else {
                $_SESSION['message'] = "Tyto dvě hesla nejsou shodná";
        }
}

mysqli_close($db);

?>

<!DOCTYPE html>
<html>
        <head>
                <title>Profitableinvest</title>
        </head>

        <body>
                <div class="header">
                        <h1>Registrace, login a logout user php mysql</h1>
                </div>

                <form method="POST" action="register.php">
                        <table>
                                <tr>
                                        <td>Username:</td>
                                        <td><input type="text" name="username" class="textInput"></td>
                                </tr>
                                <tr>
                                        <td>Email:</td>
                                        <td><input type="email" name="email" class="textInput"></td>
                                </tr>
                                <tr>
                                        <td>Password:</td>
                                        <td><input type="password" name="password" class="textInput"></td>
                                </tr>
                                <tr>
                                        <td>Password again:</td>
                                        <td><input type="password" name="password2" class="textInput"></td>
                                </tr>
                                <tr>
                                        <td></td>
                                        <td><input type="submit" name="register_btn" value="Register"></td>
                                </tr>
                        </table>
                </form>
        </body>
</html>

Tohle by mělo být napsané funkčně, ale už od pohledu to logicky dělá pravděpodobně něco jiného, než by jsi od toho chtěl, ale snad už by to teď mělo jít alespoň spustit.

Další věc, před kterou bych Tě měl varovat, je bezpečnost. I když tam máš nějaký náznak, tohle rozhodně není bezpečný kód. :)

Takže závěrem rozhodně doporučuji projít si zdejší tutoriály na PHP (http://www.itnetwork.cz/php) a nejlépe začít hezky od začátku - http://www.itnetwork.cz/php/zaklady ;)

Ostatně zde najdeš i tutoriály na práci s MySQL databází - http://www.itnetwork.cz/php/databaze

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
28.2.2017 22:21
Avatar
Odpovídá na marasol
Matúš Petrofčík:28.2.2017 22:29

Ahoj :) Na budúce prosím vkladaj kód do code tagov, aby sa zvýraznila syntax a podobne, ď.

Takže, chyba ktorú ti vyhadzuje je zjavne to, že funkcia mysgl_real_es­cape_string neexistuje. A ak sa pozrieš lepšie, je jasné že namiesto písmenka q tam máš písmenko g.

Okrem toho, ak používaš PHP vo verzii 5.5 a vyššej (čo ti mimochodom odporúčam, nemá zmysel obmedzovať sa staršími verziami), tak funkciu mysql_real_es­cape_string ani používať nemôžeš. Tá bola totiž s celým mysql_ odstránená ako zastaralá.

Ak používaš mysqli_ (všimni si toho písmenka i navyše), používaj funkciu mysqli_real_es­cape_string.

V kóde máš ale niekoľko podstatných nedostatkov, preto ti odporúčam preštudovať si lepšie materiály a neriadiť sa nejakými starými youtube videami. Pokračovať môžeš tu: http://www.itnetwork.cz/php

Ak by ťa zaujímalo čo robíš zle, tak napr.:

  • Hashovať heslá pomocou md5 je nedostatočné, najlepšie je na to použiť funkcie, ktoré sú na to priamo určené (password_hash a password_verify), prípadne používať silnejší algoritmus (sha512, viac o hash funkcii: http://php.net/…ion.hash.php).
  • Tvoj kód neukončuje skript pri presmerovaní, za redirect (header funkciu) musíš volať exit, aby sa kód zastavil a neodosielali nechtiac ďalšie, potencionálne citlivé dáta.
  • ...
Nahoru Odpovědět
28.2.2017 22:29
obsah kocky = r^2 ... a preto vlak drnká
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 4 zpráv z 4.