Bonjour,

Voila je rencontre un petit problème avec mon code, je n'arrive pas inserer les données de mon formulaire dans ma base de données.
Mon formulaire :

<form action="" method="POST">
                    <div class="form-group">
                        <label>Nom du produit</label>
                        <input type="text" name="produit" id="produit" class="form-control">
                    </div>
                    <div class="form-group">
                        <label>Description du produit</label>
                        <textarea name="description" id="description" class="form-control" rows="3"></textarea>
                    </div>

                    <div class="form-group">
                        <label>Prix du produit</label>
                        <input type="text" name="prix" id="prix" class="form-control"><br>
                    </div>

                    <input type="submit" name="submit" value="Ajouter">
                </form>

Mon PHP placé juste après mon formulaire :

<?php 

                    $bdd = new PDO('mysql:host=localhost;dbname=ecommerce','root','root');

                    //Vérification des champs 
                        if (isset($_POST['produit']) AND isset($_POST['description']) AND isset($_POST['prix'])) {

                        //On prépare la requête
                        $requete = $bdd->prepare("INSERT INTO produits(produit, description, prix) VALUES(?, ?, ?)");
                        //On exécute la requête
                        $requete->execute(array($_POST['produit'], $_POST['description'], $_POST['prix']));

                        }

                     ?>

Ma base se prénome ecommerce et le table produits.

merci

11 réponses


JeremieMeunier
Réponse acceptée

Qu'est ce que ça donne quand tu fait un var_dump($_POST) ?

Je souhaiterais ajouter un champ image qui me permettrais de charger une image qui correspondrait au produit, j'ai trouvé des tuto pour inserer une image dans une base de données mais sans le formulaire.
Comment puis je intégrer cela ?

merci

Bonjour.
Pour la première partie, tu devrais activer les erreurs qui pourraient être retournées par PDO, de cette manière tu pourras savoir s'il y a un problème lors de l'insertion en base de données, pour se faire, après avoir instancié la classe PDO, tu peux jouter ceci :

$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

Car par défaut les erreurs provenant de PDO ne sont pas retournées, le mieux est d'entourer la connexion à la base de données par un try catch, exemple :

try {
    $bdd = new PDO('mysql:host=localhost;dbname=ecommerce', 'root', 'root');
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
} catch (PDO::Exception $e) {
    die($e->getMessage);
}

Pour la seconde partie, tu peux par exemple suivre le tutoriel d'Openclassrooms intitulé Concevez votre site web avec PHP et MySQL et plus précisément la partie L'envoi de fichiers.

Bonjour macinsteph,

Pourquoi ne pas tenter de remplacer ta condition :

if (isset($_POST['produit']) AND isset($_POST['description']) AND isset($_POST['prix'])) {
}

Par celle-ci par exemple :

if (!empty($_POST['produit']) AND !empty($_POST['description']) AND !empty($_POST['prix'])) {
}

Peace !

Bonjour,
Voici le code pour le traitement de l'image à télécharger mais ça ne fonctionne pas. Pas d'entrée en BDD ni d'image dans mon dossier Image ????

<?php 
                                            if(!empty($_POST['produit']) AND !empty($_POST['description']) AND !empty($_POST['prix']) AND !empty($_POST['UrlImg']))
                                              {

                                                $error =  'Merci de remplir tous les champs.';

                                              }else{

                                              $img = $_FILES['imgUpload']; 
                                              $dossier = 'image/';
                                              $fichier = basename($_FILES['imgUpload']['name']);
                                              $taille_maxi = 250000;
                                              $taille = filesize($_FILES['imgUpload']['tmp_name']);
                                              $extensions = array('.png', '.gif', '.jpg', '.jpeg');
                                              $extension = strrchr($_FILES['imgUpload']['name'], '.');
                                              require("imgClass.php");

                                              //Début des vérifications de sécurité...
                                              if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
                                              {
                                                $info = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg...';
                                              }
                                              if($taille>$taille_maxi)
                                              {
                                                $info = 'Le fichier est trop gros...';
                                              }
                                              if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
                                              {
                                                //formatage du nom (suppression des accents, remplacements des espaces par "-")
                                                $fichier = strtr($fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
                                                $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
                                                if(move_uploaded_file($_FILES['imgUpload']['tmp_name'], $dossier . $fichier)) //correct si la fonction renvoie TRUE
                                                {
                                                      Img::creerMin("image/".$img['name'],"image/min",$img['name'],351,220);
                                                      Img::convertirJPG("image/".$img['name']);

                                                  $success =  'Upload effectué avec succès !';

                                                  $produit = $_POST['produit'];
                                                  $dexcription = $_POST['description'];
                                                  $prix = $_POST['prix'];
                                                  $urlImage =  $dossier . $fichier;
                                                  $photo = $fichier;

                                                $requete = $bdd->prepare('INSERT INTO produits(produit, description, prix, UrlImg) VALUES (:produit, :description, :prix, :UrlImg)');
                                                $requete->execute(array(
                                                  "produit" => $produit,
                                                  "description" => $description,
                                                  "prix" => $prix,
                                                  "UrlImg" => $UrlImg
                                                ));
                                                }
                                                else //sinon, cas où la fonction renvoie FALSE
                                                {
                                                  $error = 'Echec de l\'upload !';
                                                  }
                                              }
                                              else
                                              {
                                                echo $erreur;
                                              }
                                             }
                                             ?>

merci

j'ai modifié mon code mais ça ne fonctionne pas ??

<?php 

include('bdd.php');

     if(isset($_POST['produit']) AND isset($_POST['description']) AND isset($_POST['prix']) AND isset($_POST['imgUpload']))
        {
        $dossier = "image/";
        $fichier = $target_dir . basename($_FILES["imgUpload"]["name"]);
        $uploadOk = 1;
        $imageFileType = pathinfo($fichier,PATHINFO_EXTENSION);

        var_dump($fichier);
        // Check if image file is a actual image or fake image
        if(isset($_POST["submit"])) {
            $check = getimagesize($_FILES["imgUpload"]["tmp_name"]);
            if($check !== false) {
                echo "le fichier est une image - " . $check["mime"] . ".";
                $uploadOk = 1;
            } else {
                echo "Le fichier n'est pas une image.";
                $uploadOk = 0;
            }
        }
        // Check file size
        if ($_FILES["imgUpload"]["size"] > 500000) {
            echo "Désolé, mais l'image est trop lourde.";
            $uploadOk = 0;
        }
        // Allow certain file formats
        if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) {
            echo "Désolé, les extensions acceptées sont : JPG, JPEG, PNG et GIF.";
            $uploadOk = 0;
        }
        // Check if $uploadOk is set to 0 by an error
        if ($uploadOk == 0) {
            echo "Désolé mais le téléchargement à rencontré un problème.";
        // if everything is ok, try to upload file
        }else 
            {
            if (move_uploaded_file($_FILES["imgUpload"]["tmp_name"], $dossier .$fichier)) {
                echo "Le fichier ". basename( $_FILES["imgUpload"]["name"]). " a bien été téléchargé.";
            } else 
            {
                echo "Désolé, mais le téléchargement n'a pas eu lieux.";
            }
        }   

        $requete = $bdd->prepare('INSERT INTO produits(produit, description, prix, imgUpload) VALUES (?, ?, ?, ?)');
        $requete->execute(array($_POST['produit'],$_POST['description'],$_POST['prix'],$_POST['imgUpload']));

        }else{

        $error =  'Merci de remplir tous les champs.';
        }
?>

comprends pas

merci

Essaie d'activer les erreurs sur ton script avec ces lignes, à placer sous la ligne <?php

error_reporting(E_ALL);
ini_set('display_errors', 1);

Ensuite, comme mentionné par @macinsteph remplace ton if par

if (!empty($_POST['produit']) AND !empty($_POST['description']) AND !empty($_POST['prix'])) {
}

Aussi, au dessus de ton IF tu devrais débugger $_POST avec un var_dump pour voir ce que tu récupères.

De plus, pour plus de clarté, tu devrais remplacer cette ligne :

if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) {

par

if(!in_array($imageFileType, ['jpg', 'png', 'jpeg', 'gif'] ) {

Enfin tu devrais remplacer $uploadOk par un boolean plutôt qu'un entier

Bonjour,

J'ai mofifié mon code comme tu l'as fais mais ça ne fonctionne pas, en remettant ce qu'il y avait déjà pas de soucis et l'image est bien uploadé.
Par contre ce que je n'arrive pas est l'insertion des données des champs dans la table produits de la base de données ecommerce.

Alors aprés différent test :

dans le formulaire j'ai mis ça :

<form action="" method="POST" >

en à la fin de mon formulaire :

<?php 

                    include ('bdd.php');

                        if(isset($_POST['produit']) AND isset($_POST['description']) AND isset($_POST['prix']) AND isset($_POST['image']))
                        {

                        $requete = $bdd->prepare('INSERT INTO produits(produit, description, prix, image) VALUES (?, ?, ?, ?)');
                        $requete->execute(array($_POST['produit'],$_POST['description'],$_POST['prix'],$_POST['image']));

                        }
?>

l'insertion de tous les champs ce fait correctement !!
par contre quand je mets :

<form action="upload.php" method="POST" enctype="multipart/form-data">

avec un système d'upload dans le fichier upload.php, le système d'upload fonctionne et j'ai bien l'image dans mon dossier, mais pas d'insertion dans ma base.

là je bloque !!
merci

ben j'ai tellement fais de modif que maintenant voici le code php le formulaire appel le fichier upload.php qui traite le téléchargement et normalement l'insertion des données dans la base, mais l'upload se fait correctement mais pas l'insertion :

<?php
require 'bdd.php';

        if(isset($_POST['produit']) AND isset($_POST['description']) AND isset($_POST['prix']) AND isset($_POST['image']))
        {

$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["image"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["image"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
// Check file size
if ($_FILES["image"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["image"]["name"]). " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }

}

        $requete = $bdd->prepare('INSERT INTO produits(produit, description, prix, image) VALUES (?, ?, ?, ?)');
        $requete->execute(array($_POST['produit'],$_POST['description'],$_POST['prix'],$_POST['image']));

        }
?>

merci

Salut
Du coup j'ai réussi à faire ce que je voulais.
merci