Bonjour !
Je reviens sur un projet que j'ai délaisser il y as un moment (le temps qu'il faut pour oublier comment le réparer)
La dernière fois que je l'ai toucher, il fonctionnait, en localhost avec wamp, mais depuis, j'ai perdu les fichier mis à jour
Donc je repart d'un backup, pour exporter ça en ligne.
Il y as eu quelques erreures que j'ai corrigé, mais je pense que cela en as crée d'autres

Je débutait à peine en backend, donc c'est pire maintenant (il était temps que je m'y remette ^^')

Donc, j'ai une page de connexion, une d'inscription et une de profil
Et derrière il y as un php pour le traitement de la connexion, de l'inscription, et un fichier config
Il est rattaché à une bdd sur phpMyAdmin, (où j'ai eu du mal à lier depuis la mise en ligne plutot qu'en local)

Le problème survient quand je tente une connexion ou inscription, j'obtient en retour le message d'erreur :

Fatal error: Uncaught Error: Call to a member function prepare() on null in /home/PROJET/www/inscription_traitement.php:14 Stack trace: #0 {main} thrown in /home/PROJET/www/inscription_traitement.php on line 14

Qui fait référence au fichier inscription_traitement.php suivant :

<?php 
    require_once 'config.php'; 

    if(!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype']))
    {

        $pseudo = htmlspecialchars($_POST['pseudo']);
        $email = htmlspecialchars($_POST['email']);
        $password = htmlspecialchars($_POST['password']);
        $password_retype = htmlspecialchars($_POST['password_retype']);

        $check = $bdd->prepare('SELECT pseudo, email, password FROM utilisateurs WHERE email = ?');
        $check->execute(array($email));
        $data = $check->fetch();
        $row = $check->rowCount();

        $email = strtolower($email);

Le fichier config.php qui complète le début, sert à la connexion à la bdd
(Les champs de connexions sont remplis, je les ais retirer car confidentiel ^^' )

<?php

try {
    $bbd = new PDO("mysql:host=mysql-Confidentiel.net;dbname=Confidentiel_ddb", "Confidentiel", "Confidentiel");
} catch(PDOException $e) {
    die("Connection failed: " . $e->getMessage());
}

Je ne comprend pas bien ce qu'il ne vas pas avec cette ligne
Pouvez-vous m'éclairer ?

Demandez si besoin d'info complémentaire, du code des autres pages ou autre

Merci pour vôtre aide !

4 réponses


Hello :)

La variable $bdd n'existe pas dans ton fichier d'inscription

dans ton fichier config il faudrait créer une function puius le récupérer dans la page d'inscription

// config.php
function getPDO() {
    return new PDO("mysql:host=mysql-Confidentiel.net;dbname=Confidentiel_ddb", "Confidentiel", "Confidentiel");
}

// inscription_traitement.php
require_once 'config.php'; 

$bdd = getPDO();

...
pparora
Auteur

Merci pour ça c'est bien ce fait la que je n'arrivait pas à comprendre entre les pdo et bdd ^^'
Cela à l'air de fonctionner (plus ou moin, je suis de nouveau bloqué ^^' )
Je l'ai plu d'erreur,
L'ors d'une inscription elle réussi, seulement, il ne se passe rien du côté de phpMyAdmin
L'utilisateur n'y est pas enregistré, et je ne peux donc pas me connecter avec ("compte inexistant")

Une idée de pourquoi le formulaire ne repporte pas les entrée dans la bdd ?

dasn totn inscrition tu fais une requete SELECT, à la suite de l'inscription tu fais bien une requete INSERT?

pparora
Auteur

Je voulais pas copier/coller trop long, mais il y as bien une partie qui est sensé 'insert' le tout dans la bdd :

        if($row == 0){ 
            if(strlen($pseudo) <= 100){ 
                if(strlen($email) <= 100){ 
                    if(filter_var($email, FILTER_VALIDATE_EMAIL)){ 
                        if($password === $password_retype){ 

                            $cost = ['cost' => 12];
                            $password = password_hash($password, PASSWORD_BCRYPT, $cost);

                            $ip = $_SERVER['REMOTE_ADDR']; 

                            $insert = $bdd->prepare('INSERT INTO Confidentiel_ddb(pseudo, email, password, ip, token) VALUES(:pseudo, :email, :password, :ip, :token)');
                            $insert->execute(array(
                                'pseudo' => $pseudo,
                                'email' => $email,
                                'password' => $password,
                                'ip' => $ip,
                                'token' => bin2hex(openssl_random_pseudo_bytes(64))
                            ));

                            header('Location:inscription.php?reg_err=success');
                            die();
                        }else{ header('Location: inscription.php?reg_err=password'); die();}
                    }else{ header('Location: inscription.php?reg_err=email'); die();}
                }else{ header('Location: inscription.php?reg_err=email_length'); die();}
            }else{ header('Location: inscription.php?reg_err=pseudo_length'); die();}
        }else{ header('Location: inscription.php?reg_err=already'); die();}
    }

où suis-je sensé mettre une requette 'select' ? Et ce que je selectionne c'est le mail ? pour la page de connexion ducoup ?