Bonjour ,
J'ai un problème avec ce tutoriel de Grafikart : http://www.grafikart.fr/tutoriels/php/gestion-membre-229

Voici mes problèmes :
<p></p>
<b>Erreur n°1 : </b>
<p></p>

  • Notice: Undefined variable: pdo in
    C:\wamp\www\SkyWaveModz\register.php on line 23

    <p></p>
    <b>Erreur n°2 : </b>
    <p></p>
  • Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\SkyWaveModz\register.php on line 23

<em><b>Voici mon code source de register.php : </b></em>
<p>
Disponible ici -> http://pastebin.com/sgWc8NyJ

</p>
<br/>

Merci ;)

12 réponses


Genki
Réponse acceptée

Ok donc, pour moi ça marche comme ça :

<?php require_once('includes/header-inscription.php'); ?>
<?php

if (!empty($_POST)) {
    require_once('includes/db.php'); // Je met db.php ici

    $errors = array();
    if (empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username'])) {
        $errors['username'] = "Vous n'avez pas bien renseigné votre pseudo ! (alphanumérique)";

    } else {
        $req = $pdo->prepare('SELECT id FROM users WHERE username = ?');
        $req->execute([$_POST['username']]);
        $user = $req->fetch();
        if ($user) {
            $errors['username'] = 'Ce pseudo est déja utilisé pour un autre compte';
        }
    }

    if (empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $errors['email'] = "Votre email n'est pas bien formatée (ex : example@example.com)";
    } else { // Tu fermais ton if du haut ici, ce qui veut dire que le reste s'executait si le formulaire n'était pas remplis
        $req = $pdo->prepare('SELECT id FROM articles WHERE titre = ?');
        $req->execute([$_POST['email']]); // d'ou le : "je ne connais pas $_POST['email']
        $email = $req->fetch();
        if ($email) {
            $errors['email'] = 'Cette email est déja utilisée pour un autre compte';
        }
    }

    if (empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm']) {
        $errors['password'] = "Vous devez entrer un mot de passe valide";
    }

    if (empty($errors)) {
        require_once('includes/db.php');
        $req = $pdo->prepare("INSERT INTO users SET username = ?, password = ?, email = ?");
        $password = password_hash($_POST['password'], PASSWORD_BCRYPT);
        $req->execute([$_POST['username'], $password, $_POST['email']]);
        die('Votre compte à bien été créé. Veuillez regarder vos mails ainsi que vos spams pour le valider.');
    }
} // Et je ferme ici le if
?>

Et vire moi cette ligne non de dieu :

echo'<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>';
Wave59
Auteur

personne?

Que contient db.php? Car si tu regardes l'erreur ligne 23 $pdo n'est pas reconnu ! Va sur ton fichier et regarde s'il affiche une erreur.

J'ai aidé une personne y a pas longtemps qui avait a peu près le même problème. Dans db.php, sa variable

$pdo = new PDO(...);

S'appellait en faite :

$bdd = new PDO(...);

Résultat, comme dans register.php il appelait $pdo et que cette variable n'existait pas, tout le reste déconnait.
Vérifie si c'est pas le meme problème, copie le code de db.php si ça fonctionne toujour pas

Le lien du topic en question : http://www.grafikart.fr/forum/topics/17684

Wave59
Auteur

merci pour vos réponses .
Voici mon fichier db.php

<?php
// CONNEXION BDD A CHANGER LORS DE LA PRISE D'hébergement
$pdo = new PDO('mysql:dbname=skywavemodz;host=localhost','root','');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

Ton problème vient de ton

        require_once('includes/db.php');

Tu le mets dans le premier if { }, mais au moment du else { }, il a disparu. Donc la classe PDO n'est jamais appelé.
Donc soit tu le déplace tout en haut, juste en dessous de ton header, soit tu l'ajoutes aussi dans ton else, juste au dessus de :

    $req = $pdo->prepare('SELECT id FROM users WHERE email = ?');
Wave59
Auteur

je lai mis tout en haut en dessous de mon require_once de mon header mais iĺ me remets une erreur :
( ! ) Notice: Undefined index: email in C:\wamp\www\SkyWaveModz\register.php on line 24

C'est parce que là il n'a pas reçu le $_POST['email']
J'ignore pour quel raison, mais c'est ce que le message veut dire

Wave59
Auteur

je pense avoir trouvé , j'essaie ce que jai en tête et je vous dis comment resoudre ce pb si sa marche :)

EDIT 12:15 : Cela ne marche pas en faisant le require_once('includes/db.php'); en dessous de mon if(!empty($_POST)){
Avez vous une réponse si oui ,
merci de m'indiquer la solution
Merci,
Wave59

Possible que tu zip le projet ? J'ai besoin de voir les fichiers, je retrouverai plus vite le problème
Là je navigue à l'aveugle :<

Wave59
Auteur

Ok je te file le lien de download par PV ;)