web-dev-qa-db-fra.com

Y compris le fichier de connexion de base de données dans php

Je crée une fonction de connexion simple en php pour mon site Web, maintenant j’essayais tout avant et cela fonctionnait bien, puis j’ai décidé de réorganiser mes fichiers en regroupant toutes mes fonctions dans un fichier, les paramètres de ma base de données et ma connexion dans un autre configuration de la session (pour une exécution sur mon hôte local) dans encore un autre fichier. 

Pour moi, le but est simplement de garder mon code propre, organisé et facile à comprendre pour moi à l'avenir.

Ceci est ma page de connexion:

<?php
    include('session-config.php');
    include('dbconnection.php');
    include('functions.php');
    include('password_hash_lib/password.php');

    if (isset($_POST['data']))
    {
        $data = $_POST['data'];
        $auth = json_decode($data);
        $user_email = $auth->Email;
        $user_pass = $auth->Password;
        authenticate($user_email, $user_pass);
    }

    function authenticate($Email, $Password)
    {   
        $HashedPassword = password_hash($Password, PASSWORD_DEFAULT);        
        $sql = "SELECT * FROM app_users WHERE user_email='$Email'"; 
        $result = $db->query($sql);
        $User = $result->fetch_object();

        if ($User->user_email == '')
        {
            header("Location: login-page.html?msg=failed");
        }

        if (password_verify($Password, $User->user_password_hash))
        {
            $_SESSION["user_auth_details"] = $User->user_id . "+" . $User->user_email . '+' . $User->user_name . "+" . $User->user_display_image . "+" . $User->user_display_name;
            header("Location:" . $_SESSION['page_url']);
        }
         else {
            header("Location: login-page.html?msg=failed");

         }
    }

?>

Et voici mon fichier de connexion à la base de données:

<?php
    $db = new mysqli("xxxxxxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxx", "xxxxxxxxxxxxx", "xxxxxxxxxxx");
    if($db->connect_errno > 0){
        die('Unable to connect to database [' . $db->connect_error . ']');
    }
?>

Comme vous pouvez le constater, j'ai inclus le fichier dbconnection.php dans mon login.php, mais chaque fois que j'essaie d'appeler la fonction authenticate(), cette erreur est renvoyée:

Remarque: Variable non définie: db dans C:\xampp\htdocs\xxxxxxxx\login.php à la ligne 27

Erreur fatale: appel à une fonction membre query () sur un non-objet dans C:\xampp\htdocs\xxxxxxx\login.php à la ligne 27

Maintenant, je suis un peu confus à ce sujet, puisque j'ai $db défini dans mon fichier dbconnection.php et que j'ai inclus ce fichier dans ma page login.php, je pensais que cela fonctionnerait ou est-ce que je me trompe?

5
Blank EDjok

Vous devez globaliser la variable avant de l'utiliser dans une fonction.
Ajoutez simplement cette ligne en haut de votre fonction:

function authenticate($Email, $Password)
    {   
         global $db;
         $HashedPassword = password_hash($Password, PASSWORD_DEFAULT);        
         $sql = "SELECT * FROM app_users WHERE user_email='$Email'"; 
         $result = $db->query($sql);
         $User = $result->fetch_object();
    ...
5
Ahmad

Ajoutez global $db; au début de votre fonction d’authentification.

Cependant, je vous recommande fortement de vous familiariser avec PDO: http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

Votre code est actuellement dangereux

4
Nathan H

vérifiez si votre base de données est connectée ou non. utilisez le code de connexion comme ceci:

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>
1
Priya jain