Bonjour , j'ai 2 probleme au niveau de mon code mais je ne la trouve pas x)

Voici les erreurs :

Erreur n°1 :

( ! ) Notice: Undefined variable: db in C:\wamp\www\Site-de-vente-de-tout-et-nimporte-quoi\admin\admin.php on line 50

Erreur n°2 :

( ! ) Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\Site-de-vente-de-tout-et-nimporte-quoi\admin\admin.php on line 50

Voici le code de ma page concernée (ADMIN.PHP)

<?php

session_start();

if(isset($_SESSION['username'])){
if(isset($_GET['action'])){
 if($_GET['action']=='add'){

if(isset($_POST['submit'])){

$title=$_POST['title'];
$description=$_POST['description'];
$price=$_POST['price'];

if($title&&$description&&$price){

try{
$db = new PDO('mysql:host=localhost;dbname=bdd_e-commerce','root','');
$db->setAttribute(PDO::ATTR_CASE,PDO::CASE_LOWER); // les noms de champs seront en minuscule
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
}
catch(Exception $e){

echo'une erreur est survenue';
die();

}

$insert = $db->prepare("INSERT INTO products VALUES('','$title','$description','$price')");
$insert->execute();
}
else {

echo'Veuillez remplir tous les champs';

}
}
?>

<form action="" method="post">
<h3>Titre du produit :</h3><input type="text" name="title"/>
<h3>Description du produit :</h3><input type="text" name="description"/>
<h3>Prix du produit :</h3><input type="text" name="price"/><br/><br/>
<input type="submit" name="submit"/>
</form>
<?php

}elseif($_GET['action']=='modifyanddelete'){
$select = $db->prepare("SELECT = FROM products");
$insert->execute();

    while($s=$select->fetch("PDO::FETCH_OBJ")){

    echo $s->title;
}
}elseif($_GET['action']=='modify'){
}elseif($_GET['action']=='delete'){

}else{
die('Une Erreur s\'est produite.');

}
} else {

}
} else {
header('Location: ../index.php');

}
?>
<link href="../style/bootstrap.css" type="text/css" rel="stylesheet" />
<h1>Bienvenue, <?php echo $_SESSION['username']; ?></h1>
<br/>
<a href="?action=add">Ajouter un produit</a>
<a href="?action=modifyanddelete">Modifier / Supprimer un produit</a>

25 réponses


quenti77
Réponse acceptée

Le code ci dessus ne corrige aucune erreur !
Je l'ai juste indenté pour que tu puisse mieux voir ce qui ne va pas.
Sachant que les 3 erreurs que tu nous présentes sont toutes liés au même problème qui est que l'index action n'existe pas dans le tableau $_GET => ("Undefined index: action")

<?php
session_start();

try{
    $db = new PDO('mysql:host=localhost;dbname=bdd_e-commerce','root','');
    $db->setAttribute(PDO::ATTR_CASE,PDO::CASE_LOWER); // les noms de champs seront en minuscule
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
}
catch(Exception $e){

    echo "Erreur: ".$e->getMessage();
    die();
}

// SI une session avec un username
if(isset($_SESSION['username'])) {

    // Si une action est défini
    if(isset($_GET['action'])) {

        if($_GET['action']=='add') {
            if(isset($_POST['submit'])){

                $title=$_POST['title'];
                $description=$_POST['description'];
                $price=$_POST['price'];

                if($title&&$description&&$price){
                    // Pourquoi du vide ?
                }

                $insert = $db->prepare("INSERT INTO products VALUES('','$title','$description','$price')");
                $insert->execute();
            } else {
                echo'Veuillez remplir tous les champs';
            }
        }
?>
        <form action="" method="post">
        <h3>Titre du produit :</h3><input type="text" name="title"/>
        <h3>Description du produit :</h3><input type="text" name="description"/>
        <h3>Prix du produit :</h3><input type="text" name="price"/><br/><br/>
        <input type="submit" name="submit"/>
        </form>
<?php
    } elseif ($_GET['action'] == 'modifyanddelete') {
        $select = $db->prepare("SELECT * FROM products");
        $select->execute();

        while($s=$select->fetch("PDO::FETCH_OBJ")) {
            echo $s->title;
        }
    } elseif($_GET['action']=='modify') {
        // NOT Implemented
    } elseif($_GET['action']=='delete') {
        // NOT Implemented
    } else {
        die('Une Erreur s\'est produite.');
    }
} else {
    header('Location: ../index.php');
}
?>
<link href="../style/bootstrap.css" type="text/css" rel="stylesheet" />
<h1>Bienvenue, <?php echo $_SESSION['username']; ?></h1>
<br/>
<a href="?action=add">Ajouter un produit</a>
<a href="?action=modifyanddelete">Modifier / Supprimer un produit</a>

Bonjour

Ta variable db n'est tout simplement pas instancié.
Regarde, tu le fais dans le if ($_GET['action'] == 'add') {
mais si tu passes dans le elseif ($_GET['action'] == 'modifyanddelete') {
eh bien, comme tu n'es pas passé dans le if, là où tu instancies db, forcémement, dans ton elseif, $db = null
Ce qui entraine les deux erreurs

Wave59
Auteur

Donc peut tu m'editer le code avec ce que tu as dis stp ;)

Merci ,
Wave59

Bonjour,

Essayer ceci dans le catch de connexion pour afficher l'erreur s'il y en a une :

echo "Erreur: ".$e->getMessage();

Votre connexion à la BDD se fait seulement si êtes en mode "add" donc quand vous faites une autre action, vous n'avez plus cette connexion.
La connexion doit se faire au début de votre code.

Wave59
Auteur

Sa marche pas essaye de m'editer le code et poste le ici avec ce que tu as dis stp ;)

On ne vous refera pas votre code, à vous de comprendre ce qui ne veux pas grace à notre aide.

Petit aide:

<?php
session_start();

try{
    $db = new PDO('mysql:host=localhost;dbname=bdd_e-commerce','root','');
    $db->setAttribute(PDO::ATTR_CASE,PDO::CASE_LOWER); // les noms de champs seront en minuscule
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
}
catch(Exception $e){

    echo "Erreur: ".$e->getMessage();
    die();

}

if(isset($_SESSION['username'])){
Wave59
Auteur

J'ai cette erreur encore :

( ! ) Notice: Undefined variable: insert in C:\wamp\www\Site-de-vente-de-tout-et-nimporte-quoi\admin\admin.php on line 52

( ! ) Fatal error: Call to a member function execute() on a non-object in C:\wamp\www\Site-de-vente-de-tout-et-nimporte-quoi\admin\admin.php on line 52

Il n'y aucune utilité à te faire ton code. Si tu n'arrives pas à corriger les erreurs malgré nos aides, je t'invite à relire des documentations.
Pour tes nouvelles erreurs, c'est exactement la même chose que l'autre problème, sauf qu'ici c'est sûrement parce que t'utilises la mauvaise variable

Wave59
Auteur

Romain bah fais moi stp le bout ou il y a l'erreur stp x)

Wave59
Auteur

J'y arrive pas je suis un débutant en PHP

Poser vous ces questions à propose de la ligne en question:
1/ Qu'est ce que je veux faire ?
2/ N'ai-je pas fais une erreur dans le nom de ma variable ?
3/ Ai-je bien tout les éléments pour faire ce que je veux ?

Wave59
Auteur

j'ai essayer de tout verifier , mais je ne trouve pas cette erreur ;(

Merci ,
Wave59

Je vais te donner une réponse avec une explication qui je l'espère te permettra de savoir résoudre ces erreurs là à l'avenir.

Regardons le premier message d'erreur :

( ! ) Notice: Undefined variable: insert in C:\wamp\www\Site-de-vente-de-tout-et-nimporte-quoi\admin\admin.php on line 52

A ligne 52, on comprend donc que la variable insert n'existe pas. Allons voir cette ligne-là dans ton code :

$insert->execute();

Tu souhaites utiliser la variable insert, or elle est vide. Pourquoi ?
Si tu regardes ton code d'avant, tu peux trouver à un endroit :

$insert = $db->prepare("INSERT INTO products VALUES('','$title','$description','$price')");
$insert->execute();

On peut se dire alors que la variable insert ne devrait pas être à vide, car tu lui dis de récupérer la résultat de $db->prepare.
Le problème, c'est que si tu remontes dans ton code, on peut voir que cette assignatation n'est lancé que lorsque l'on rentre dans la condition suivante :

if ($_GET['action'] == 'add') {

Or, ton $insert->execute(); est executé quand ($_GET['action'] == 'modifyanddelete'), donc il faut comprendre que tu n'es passé passé dans ton if (... == 'add'). Du coup, la variable insert n'a pas de valeur.
Voilà déjà la première analyse que j'ai pu en tirer.

Concrétement, si je comprends bien ton code, tu aies en mode affichage/édition lorsque l'erreurse produit. Du coup, lorsque tu fais :
$insert->execute();
je pense que tu voulais plutôt mettre : $select->execute();

Wave59
Auteur

Je viens de faire ce que vous m'avais dis mais j'ai encore une erreur :/

ERREUR :
Parse error: syntax error, unexpected 'else' (T_ELSE) in C:\wamp\www\Site-de-vente-de-tout-et-nimporte-quoi\admin\admin.php on line 72

CODE SOURCE :

<?php
session_start();

try{
    $db = new PDO('mysql:host=localhost;dbname=bdd_e-commerce','root','');
    $db->setAttribute(PDO::ATTR_CASE,PDO::CASE_LOWER); // les noms de champs seront en minuscule
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
}
catch(Exception $e){

    echo "Erreur: ".$e->getMessage();
    die();

}

if(isset($_SESSION['username'])){
if(isset($_GET['action'])){
 if($_GET['action']=='add'){

if(isset($_POST['submit'])){

$title=$_POST['title'];
$description=$_POST['description'];
$price=$_POST['price'];

if($title&&$description&&$price){

}

$insert = $db->prepare("INSERT INTO products VALUES('','$title','$description','$price')");
$insert->execute();
}
else {

echo'Veuillez remplir tous les champs';

}
}
?>

<form action="" method="post">
<h3>Titre du produit :</h3><input type="text" name="title"/>
<h3>Description du produit :</h3><input type="text" name="description"/>
<h3>Prix du produit :</h3><input type="text" name="price"/><br/><br/>
<input type="submit" name="submit"/>
</form>
<?php

}elseif($_GET['action']=='modifyanddelete'){
$select = $db->prepare("SELECT = FROM products");
$select->execute();

    while($s=$select->fetch("PDO::FETCH_OBJ")){

    echo $s->title;
}
}elseif($_GET['action']=='modify'){
}elseif($_GET['action']=='delete'){

}else{
die('Une Erreur s\'est produite.');

}
} else {

} else {
header('Location: ../index.php');

}
?>
<link href="../style/bootstrap.css" type="text/css" rel="stylesheet" />
<h1>Bienvenue, <?php echo $_SESSION['username']; ?></h1>
<br/>
<a href="?action=add">Ajouter un produit</a>
<a href="?action=modifyanddelete">Modifier / Supprimer un produit</a>

Il vous dit que le dernier "else" est tout seul, c'est à dire qu'il n'a pas de if.
Vous utilisez quel logiciel pour faire votre code ?

Wave59
Auteur

J'utilise Notepad++ pour faire mon code

Je vous conseil d'utiliser un logiciel un peu plus perfectionner comme netbeans ou Sublime Texte qui vous aiderons en marquant vos erreurs de syntaxe.

Wave59
Auteur

Ok donc avec Sublime TEXT 3 il va me dire ou est l'erreur ?

Oui cela vous aidera.

Wave59
Auteur

sa m'indique aucune erreur sur sublime text 3 :/

Note Wave59 que si tu indentes ton code t'y verra déjà plus claire !!

SublimeText va pas te cracher les erreurs non plus tu vas devoir chercher (c'est ce qu'on appelle apprendre) si on te donne la réponse c'est mort pour toi et je ne compteai plus les sujets que tu va créer sur les forum à demander de l'aide !!

Le langage web a une logique et tu pourras t'en sortir avec de simple copier coller sans doute mais à chaque fois que tu auras un soucis c'est retour à la case départ !!

Fais tes test et vois pourquoi ta un else qui n'a pas de if.

La bonne synthaxe c'est comme ça !

<?php 
if(une condition){
     //si la condition est respecté on applique le code dans l'accolade
}else{
     //Sinon on fait ce qu'il y a dans cette accolade
}

?>
Wave59
Auteur

Bonjour Underscreen ,
Je suis débutant en PHP ducoup je ne suis pas un génie x)

Mais dans le site j'ai des erreurs qui se forment , mais je ne sais pas d'où elles viennent dans mon code .

Normalement La page Forum est une PAGE D'ENTRAIDE .

Pour compléter ce message j'ai encore plusieurs erreurs :

Erreur N°1 :

Undefined index: action in C:\wamp\www\Site-de-vente-de-tout-et-nimporte-quoi\admin\admin.php on line 54

Erreur N°2 :

Undefined index: action in C:\wamp\www\Site-de-vente-de-tout-et-nimporte-quoi\admin\admin.php on line 62

Erreur N°3 :

Undefined index: action in C:\wamp\www\Site-de-vente-de-tout-et-nimporte-quoi\admin\admin.php on line 63

Je sais que c'est des actions qui ne sont pas définies mais Je ne sais pas comment les déclarer donc si vous pouvez m'aider SVP .

VOICI MON CODE :

<?php
session_start();

try{
    $db = new PDO('mysql:host=localhost;dbname=bdd_e-commerce','root','');
    $db->setAttribute(PDO::ATTR_CASE,PDO::CASE_LOWER); // les noms de champs seront en minuscule
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
}
catch(Exception $e){

    echo "Erreur: ".$e->getMessage();
    die();

}

if(isset($_SESSION['username'])){
if(isset($_GET['action'])){
 if($_GET['action']=='add'){

if(isset($_POST['submit'])){

$title=$_POST['title'];
$description=$_POST['description'];
$price=$_POST['price'];

if($title&&$description&&$price){

}

$insert = $db->prepare("INSERT INTO products VALUES('','$title','$description','$price')");
$insert->execute();
}
else {

echo'Veuillez remplir tous les champs';

}
}
?>

<form action="" method="post">
<h3>Titre du produit :</h3><input type="text" name="title"/>
<h3>Description du produit :</h3><input type="text" name="description"/>
<h3>Prix du produit :</h3><input type="text" name="price"/><br/><br/>
<input type="submit" name="submit"/>
</form>
<?php

}elseif($_GET['action'] == 'modifyanddelete'){
$select = $db->prepare("SELECT * FROM products");
$select->execute();

    while($s=$select->fetch("PDO::FETCH_OBJ")){

    echo $s->title;
}
}elseif($_GET['action']=='modify'){   
}elseif($_GET['action']=='delete'){   

}else{
die('Une Erreur s\'est produite.');

}}else{

header('Location: ../index.php');

}
?>
<link href="../style/bootstrap.css" type="text/css" rel="stylesheet" />
<h1>Bienvenue, <?php echo $_SESSION['username']; ?></h1>
<br/>
<a href="?action=add">Ajouter un produit</a>
<a href="?action=modifyanddelete">Modifier / Supprimer un produit</a>

try{
$db = new PDO('mysql:host=localhost;dbname=bdd_e-commerce','root','');
}
catch(Exception $e){
echo "Erreur: ".$e->getMessage();
die();
}

remplace ton code donnexion par celui ci dessus, et ca doit marche

Wave59
Auteur

merci mais tu as pas vu que le post date de 2mois javais deja trouve tkt pas

@Wave56 : Dans ce cas pense à valider la/les réponses qui t'ont aidées, sinon on ne peut pas savori que le problème est résolu.