Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Voici mon code

<?php
    session_start();
$hote = "localhost";
    $user = "root";
    $password = "";
    global $pdo;
    try {
        $pdo = new pdo('mysql:host='.$hote.';dbname=base', $user,$password);
    } catch (Exception $e) {
        $e->getMessage();
    }

  $err = 0;
  $err1 = 0;
  $err2 = 0;
  $err3 = 0;

    if(isset($_POST['username']) && !empty($_POST['username'])) {
        $username   = $_POST['username'];
    }else {
        $username       = '';   
        $err++;         
    }

    if(isset($_POST['mdp']) && !empty($_POST['mdp'])) {
        $mdp    = $_POST['mdp'];
    }else {
        $mdp        = '';   
        $err++;         
    }

    if (!empty($username) and !empty($mdp)) {

            $user = $pdo->prepare('SELECT * FROM personne WHERE NOM_PER = ? AND pass = ?');
            $user->execute(array($username,$mdp));
            $userexist = $user->rowCount();
            if ($userexist == 1) {

                $userdata = $user->fetch();
                $_SESSION['u_id'] = $userdata['ID_PER'];
                $u_id = $_SESSION['u_id'] ;
                $statut =  $userdata['STATUT'];
                if ($statut == 'DG') {
                header('location: ../pages/index.php?user='.$u_id.'');
                }else{
                    header('location: ../page/index.php?user='.$u_id.'');
                }

        }else {
            if ($userdata == 0) {
                header('location: ../login.php?cu=1');
            }else if($err != 0) {
                        header('location: ../login.php?cu=2');
                    }

            }
        }

?>

Ce que je veux

Je voudrais me connecter via un compte utilisateur créé manuellement dans la bdd.

Ce que j'obtiens

et je recois comme message d'erreur : PHP Fatal error: Uncaught Error: Call to a member function prepare() on null in................................ on line 34.
Merci pour votre aide
Cordiallement

akkomah

18 réponses


Bonsoir,
Activation des erreurs PDO (cf la doc de php) et $e-getmessage c'est bien mais il faut aussi l'afficher
Etonnant d'avoir un nom de champs en majuscules et un en minuscule. (enfin ça ne viens pas de là)
Et c'est Location et non location (fonctionne en local mais en fois en ligne c'est moins sur)

akkomah
Auteur

Merci pour ta réponse Courage10. je me penche la-dessus et je te reviens

akkomah
Auteur

Toutes mes excuses pour le dérangement mais je n'y arrive toujours pas. Même après avoir corrigé (location et passé le nom du champs pass en PASS) je reçois toujours la même erreur.
Je débute à peine avec php et mysql ; aidez moi s'il vous plait
Merci une fois encore à la communauté

je disais aussi qu'il faut faire un écho de $e-> getmessage

akkomah
Auteur

Je viens de corriger mon code côté "erreur" et par surprise le message que je recois maintenant a changé.
Échec de la connexion : SQLSTATE[28000] [1045] Access denied for user 'wwwdomaine_root'@'46.4.210.192' (using password: YES) alors que les informations sont correctes !!! pfffff je sais que je commence par déranger un peu mais.... svp
Voici mon nouveau code:

<?php
    session_start();
$hote = "www.mondomaine.com";
    $user = "wwwdomaine_root";
    $password = "90045889652";
    global $pdo;
    try {
        $pdo = new pdo('mysql:host='.$hote.';dbname=wwwzonepro_base', $user,$password);
    } catch (PDOException $e) {
        echo 'Échec de la connexion : ' . $e->getMessage();
    exit;
    }

  $err = 0;
  $err1 = 0;
  $err2 = 0;
  $err3 = 0;

    if(isset($_POST['username']) && !empty($_POST['username'])) {
        $username   = $_POST['username'];
    }else {
        $username       = '';   
        $err++;         
    }

    if(isset($_POST['mdp']) && !empty($_POST['mdp'])) {
        $mdp    = $_POST['mdp'];
    }else {
        $mdp        = '';   
        $err++;         
    }

    if (!empty($username) and !empty($mdp)) {

            $user = $pdo->prepare('SELECT * FROM personne WHERE NOM_PER = ? AND PASS = ?');
            $user->execute(array($username,$mdp));
            $userexist = $user->rowCount();
            if ($userexist == 1) {

                $userdata = $user->fetch();
                $_SESSION['u_id'] = $userdata['ID_PER'];
                $u_id = $_SESSION['u_id'] ;
                $statut =  $userdata['STATUT'];
                if ($statut == 'DG') {
                header('Location: ../pages/index.php?user='.$u_id.'');
                }else{
                    header('Location: ../page/index.php?user='.$u_id.'');
                }

        }else {
            if ($userdata == 0) {
                header('Location: ../login.php?cu=1');
            }else if($err != 0) {
                        header('Location: ../login.php?cu=2');
                    }

            }
        }

?>

entre l'erreur et ton code, le user n'est pas le même

Bonjour.
L'utilisation de global ne se fait qu'à l'intérieur d'une fonction pour accéder à la variable qui en est externe, tu peux donc commencer par supprimer son utilisation dans ce fichier.
Tu peux également supprimer l'utilisation de la fonction isset si tu utilises la fonction empty par la suite pour la même variable.
Remplaces donc par exemple:

if (isset($_POST['username']) && !empty($_POST['username']))
// Par
if (!empty($_POST['username']))

Car la fonction empty ne fais pas que vérifier la valeur de la variable, mais également son existence.

akkomah
Auteur

bonsoir
Courage10 stp j'ai pas compris.

akkomah
Auteur

Lartak merci pour ton aide mais lorsque je supprime la fonction global du fichier, je recois comme message d'erreur : class pdo not found !

akkomah
Auteur

SVP les amis, pouvez vous me corriger le code pour que je puisse avancer un peu? ça fait quasiment une semaine que suis coincé là.
merci d'avance

autant pour moi, j'ai confondus $user et $dbname.
Es-tu de te connecter à la bonne BDD ? il y a surement le port à ajouter dans la connexion. Tu te connectes à mariaDB alors que tu utilises mysql

akkomah
Auteur

ok je vais ajouter le port voir ce que ça donne

akkomah
Auteur

Bonjour
toujours besoin de votre aide les pro. j'ai ajouté le port mais l'erreur persiste : Failed to connect to MySQL: Access denied for user 'wwwdomaine_root'@'46.4.210.192' (using password: YES)

montre nous le code avant les modification demandé

akkomah
Auteur

Suite à de nombreux test infructueux, j'ai jugé bon de tester la connexion vers ma base de données sql pour voir si tout allait bien et à ma grande surprise, même avec mon fichier de test, la connexion est impossible. Toujours le même message d'erreur : Failed to connect to MySQL: Access denied for user 'wwwdomaine_root'@'46.4.210.192' (using password: YES)
voici le code de ma page de test (testconnexion.php)

 <!DOCTYPE html>
<html>
    <head>

        <title>TEST</title>
        <meta charset="utf-8">
    </head>
    <body>
        <h1>Test bases de données MySQL</h1>  
        <?php
            $servername = 'www.mondomaine.com';
            $username = 'wwwdomaine_root';
            $password = 'monmotdepasse';

            $conn = new mysqli($servername, $username, $password);

            if($conn->connect_error){
                die('Erreur : ' .$conn->connect_error);
            }
            echo 'Connexion réussie';
        ?>
    </body>
</html>

le port est absent comme indiqué et en plus passer de PDO à mysqli ne vas rien changé
est-ce que ton serveur de BDD accepte les connexion extérieur ?

akkomah
Auteur

Merci courage10. Comme mentionné tout haut, je débute en php et je n'est pas encore une grande connaissance en la matière. Alors dis moi stp, comment faire pour savoir si mon serveur de BDD accepte les connexions extérieur ?

Bonjour.

comment faire pour savoir si mon serveur de BDD accepte les connexions extérieur ?

Si le serveur de la base de données est chez un hébergeur et que tu tentes de t'y connecter à distance, il te faut vérifier auprès de l'aide de l'hébergeur en question et selon l'offre que tu détient, afin de savoir si tu peux y accéder à distance ou non.