Problème d'insertion avec PDO [Résolu]

Signaler
Messages postés
29
Date d'inscription
lundi 20 février 2017
Statut
Membre
Dernière intervention
13 janvier 2021
-
Messages postés
29
Date d'inscription
lundi 20 février 2017
Statut
Membre
Dernière intervention
13 janvier 2021
-
Bonjour,

je tente de créé une méthode qui permet d'insérer les réponse d'un formulaire dans une base de donnée en utilisant PDO.

J'ai déjà créé une méthode de suppression qui fonctionne donc j'arrive à interagir avec la DB mais ma méthode d'insertion ne semble pas s'exécuter.

Et je n'ai aucun message d'erreur et donc je n'arrive pas à déterminer d'où viens le problème :(

mon formulaire:
<?php
require ('C:\xampp\htdocs\PhpProject1\model\AreaDAO.php');
require ('C:\xampp\htdocs\PhpProject1\model\AnimalDAO.php');
require ('C:\xampp\htdocs\PhpProject1\model\EatBehavior.php');
require ('C:\xampp\htdocs\PhpProject1\model\AccessBehavior.php');
require ('C:\xampp\htdocs\PhpProject1\model\Animal.php');
require ('C:\xampp\htdocs\PhpProject1\model\Area.php');
 
$animalDAO = new AnimalDAO();
$areaDAO = new AreaDAO();
$animals = $animalDAO->fetch_all();
$areas = $areaDAO->fetch_all();
?>
<h2>Ajouter un animal:</h2>
 
<form method="post" action="../controller/IndexController.php">
  <label for="nm">Nom:</label><br>
  <input type="text" id="nm" name="nm"><br>
   
  <label for="rc">Race:</label><br>
  <input type="text" id="rc" name="rc">
   
  <p>Genre:</p>
  <input type="radio" id="male" name="gender" value="male">
  <label for="male">Male</label><br>
  <input type="radio" id="female" name="gender" value="female">
  <label for="female">Female</label>
   
  <p>Alimentation:</p>
  <input type="radio" id="car" name="alim" value="Carnivore">
  <label for="car">Carnivore</label><br>
  <input type="radio" id="herb" name="alim" value="Herbivore">
  <label for="herb">Herbivore</label><br>
  <input type="radio" id="omni" name="alim" value="Omnivore">
  <label for="herb">Omnivore</label><br>
   
  <p>Zone:</p>
  <?php foreach($areas as $area): ?>
    <input type="radio" id="ar" name="ar" value="<?php echo $area->getPk(); ?>">
    <label for="ar"><?= $area->get_name(); ?></label><br>
  <?php endforeach; ?>
   
  <input type="submit" value="Ajouter">
</form>


Ma méthode d'ajout:
public function addAnimal($rc,$nm,$gender,$diet,$area){
    try{
        $statement = $this->connection->prepare("INSERT INTO {$this->table} (race, name, gender, diet,area) VALUES (?,?,?,?,?)");
        $statement->bindParam(1, $rc);
        $statement->bindParam(2, $nm);
        $statement->bindParam(3, $gender);
        if ($diet instanceof CarnivoreEatBehavior) {
            $eat="Carnivore";
        }
        if ($diet instanceof HerbivoreEatBehavior) {
            $eat="Herbivore";
        }
        if ($diet instanceof OmnivoreEatBehavior) {
            $eat="Omnivore";
        }
        $statement->bindParam(4, $eat);
        $statement->bindParam(5, $area);
        $statement->execute();
         
    } catch (Exception $e) {
        print $e->getMessage();
 
    }
}


l'appel de la fonction d'ajout dans mon contrôleur:
//Ajout d'animal:
if((isset($_POST["nm"])&&($_POST["nm"]!=""))&&(isset($_POST["rc"])&&($_POST["rc"]!=""))
        &&(isset($_POST["gender"])&&($_POST["gender"]!=""))&&(isset($_POST["alim"])
                &&($_POST["alim"]!=""))&&(isset($_POST["ar"])&&($_POST["ar"]!="")))
{
     
    $nm=($_POST["nm"]);
    $rc=($_POST["rc"]);
    $gd=($_POST["gender"]);
    if($_POST["alim"]=="Carnivore")
    {
        $eat = new CarnivoreEatBehavior();
    }
    if($_POST["alim"]=="Herbivore")
    {
        $eat = new HerbivoreEatBehavior();
    }
    if($_POST["alim"]=="Omnivore")
    {
        $eat = new OmnivoreEatBehavior();
    }
    $area=$_POST["ar"];
     
    $anDAO = new AnimalDAO();
    $anDAO->addAnimal($nm, $rc,$gd, $eat, $area);
    header("Location: http://localhost/PhpProject1/index.php");
     
     
}

2 réponses

Messages postés
31121
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 janvier 2021
3 201
Bonjour,

Tu ne vois pas d'erreur, car tu as une redirections dans ton code....
Il faut la mettre en commentaire le temps de déterminer le souci.
//header("Location: http://localhost/PhpProject1/index.php");


Il faut également que tu aies activé l'affichage des erreurs dans la connexion à ta bdd
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs


Ensuite, quelques remarques sur ton code....
Lorsque tu fais
isset($_POST["nm"])&&($_POST["nm"]!="")

ça peut plus simplement s'écrire :
!empty($_POST["nm"])


Il ne faut pas mettre le chemin ( dans tes require) à partir du C: de ton ordi .. car lorsque tu vas héberger ton site sur un serveur, le chemin ne sera plus du tout le même......
Il faut utiliser les chemins relatifs... ou éventuellement absolus ( mais à partir de la racine de ton site ( la racine étant dans le dossier PhpProject1 ))
par exemple
require ('C:\xampp\htdocs\PhpProject1\model\AreaDAO.php');

devient un truc du genre
//Si tu as défini un virtualhost pointant à la racine de ton site PhpProject1
require ('model/AreaDAO.php');

ou
// Si ton formulaire se trouve à la racine de PhpProject1
require (__DIR__ . '/model/AreaDAO.php');

// Si ton formulaire se trouve dans un sous dossier à la racine de PhpProject1
require (__DIR__ . '/../model/AreaDAO.php');




Cordialement,
Jordane
Messages postés
29
Date d'inscription
lundi 20 février 2017
Statut
Membre
Dernière intervention
13 janvier 2021

Merci j'ai trouvé d'où venait le problème.