Bonjour,

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

Ce que je fais

je cherche a inserer des données dans la bd

<?php 

session_start();
                try {

                        $db = new PDO('mysql:host=localhost;dbname=blog','root','');
                        $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); # les noms des champs seront en caractères miniscules 
                        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); # les erreurs lanceront des exceptions

                        echo "connecté";
                    } catch (Exception $e) {
                        echo "Erreur: ".$e->getMessage();
                        #die();

                    }
 ?>
     <h1>bienvenue <?php echo $_SESSION['username']; ?></h1> <br>
 <?php

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

            if (isset($_POST['submit'])) {
                # code...

                $titre=$_POST['titre'];
                $description=$_POST['description'];
                $prix=$_POST['prix'];

                if ($titre&&$description&&$prix) {
                    # code...

                    $insert = $db -> prepare ("INSERT INTO article VALUES ('','$titre','$description','$prix')");
                    $insert->exec();

                }else{
                    echo "veuillez remplir tous les champs";
                }
            }

            ?>

            <form action="" method="POST">
                <h3>Titre: </h3><input type="text" name="titre"><br>
                <h3>Description: </h3><input type="text" name="description"><br>
                <h3>Prix: </h3><input type="number" name="prix"><br><br>
                <input type="submit" name="submit">

            </form>

            <?php
        }elseif ($_GET['action']=='modifier') {
            # code...

        }elseif ($_GET['action']=='supprimer') {
            # code...

        }else{

            die('une erreur s\'est produite');
        }
    }

}else{

    header('location: index.php');
}

 ?>
    <link rel="stylesheet" type="text/css" href="../style/bootstrap.css"/>

 <a href="?action=add">Ajouter un article</a>
 <a href="?action=modifier">Modifier un article</a>
 <a href="?action=supprimer">Supprimer un article</a>

Ce que je veux

Décrivez ici ce que vous cherchez à obtenir

Ce que j'obtiens

ET voilà ce que j obtiens
Notice: Undefined variable: db in C:\wamp64\www\site_final\admin\admin.php on line 40
( ! ) Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\wamp64\www\site_final\admin\admin.php on line 40
( ! ) Error: Call to a member function prepare() on null in C:\wamp64\www\site_final\admin\admin.php on line 40

aidez moi svp

2 réponses


Bonsoir,
je pense que ton problème vient des simples quotes autour de tes variables
essaie:

$insert = $db -> prepare ("INSERT INTO article VALUES ( '',$titre,$description, $prix)");
                    $insert->exec();
  // Ceci devrait marcher aussi sous mysql... ( où l'accent grave est le séprateur de colonne en lieu et place des simples quotes de ta requête initiale)
    $insert = $db -> prepare ("INSERT INTO article VALUES (  `''`,`$titre`,`$description`,` $prix`)");
                    $insert->exec();

Tu peux essayer en précisant les champs dans ta requête insert correspondant aux valeurs que tu souhaites ajouter : INSERT INTO Matable ( le_nom_du champs1, le nom du champs2 etc...) VALUES (ma_valeur1, ma_valeur2 etc... ) . Dans ton exemple, je ferais quelquechose comme :

$insert = $db->prepare('INSERT INTO article (titre, description, prix)
                                          VALUES (?, ?, ?)');
        $insert->execute([
          $_POST['titre'], $_POST['description'],$_POST['prix']

        ]);

Heu... "Undefined variable: db"
On peut guère faire plus claire... et donc comme "prepare()" est une méthode d'un objet, mais que la variable $db n'est pas un objet puisqu'elle n'existe pas... ben forcément çà fonctionne pas.

Je pense que tu devrais également prendre connaissance de la documentation de la class PDO pour bien l'utiliser : https://www.php.net/manual/fr/book.pdo.php

Bonne continuation