Problème d'insertion avec PDO

Résolu/Fermé
Rune188 Messages postés 67 Date d'inscription lundi 20 février 2017 Statut Membre Dernière intervention 29 janvier 2024 - 29 nov. 2020 à 02:16
Rune188 Messages postés 67 Date d'inscription lundi 20 février 2017 Statut Membre Dernière intervention 29 janvier 2024 - 6 déc. 2020 à 13:43
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");
     
     
}
A voir également:

2 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié le 29 nov. 2020 à 09:56
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://forums.commentcamarche.net/forum/affich-37584941-php-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');




1
Rune188 Messages postés 67 Date d'inscription lundi 20 février 2017 Statut Membre Dernière intervention 29 janvier 2024
6 déc. 2020 à 13:43
Merci j'ai trouvé d'où venait le problème.
0