Partage
  • Partager sur Facebook
  • Partager sur Twitter

N'inscrit rien dans la database.

    20 janvier 2017 à 1:37:37

    Hello le mode.

    Je tente de créer un forum qui de vue, fonctionne mais n'inscrit rien dans la DB.

    J'aimerais des coups d'oeils pour me dire là où ça plante car après maintes relectures du code, je n'y parviens pas.

    Merci à vous.

    Les codes.

    config.php

    <?php
    $bdd = new PDO('mysql:host=localhost;dbname=forum', 'root', '');
    ?>

    nouveau_topic.php

    <?php
    session_start();
    require('php/config.php'); /* Connexion à la base de donnée */
    require('php/functions.php'); /* Mes fonctions */
    
    /* Traitement du formulaire de création de Topic */
    if(isset($_GET['categorie'])) {
       $get_categorie = htmlspecialchars($_GET['categorie']);
       $categorie = $bdd->prepare('SELECT * FROM f_categories WHERE id = ?');
       $categorie->execute(array($get_categorie));
       $cat_exist = $categorie->rowCount();
       if($cat_exist == 1) {
          $categorie = $categorie->fetch();
          $categorie = $categorie['nom'];
          $souscategories = $bdd->prepare('SELECT * FROM f_souscategories WHERE id_categorie = ? ORDER BY nom');
          $souscategories->execute(array($get_categorie));
          if(isset($_SESSION['id'])) {
             if(isset($_POST['tsubmit'])) {
                if(isset($_POST['tsujet'],$_POST['tcontenu'])) {
                   $sujet = htmlspecialchars($_POST['tsujet']);
                   $contenu = htmlspecialchars($_POST['tcontenu']);
                   $souscategorie = htmlspecialchars($_POST['souscategorie']);
                   $verify_sc = $bdd->prepare('SELECT id FROM f_souscategories WHERE id = ? AND id_categorie = ?');
                   $verify_sc->execute(array($souscategorie,$get_categorie));
                   $verify_sc = $verify_sc->rowCount();
                   if($verify_sc == 1) {
                      if(!empty($sujet) AND !empty($contenu)) {
                         if(strlen($sujet) <= 70) {
                            if(isset($_POST['tmail'])) {
                               $notif_mail = 1;
                            } else {
                               $notif_mail = 0;
                            }
                            $ins = $bdd->prepare('INSERT INTO f_topics (id_createur, sujet, contenu, notif_createur, date_heure_creation) VALUES(?,?,?,?,NOW())');
                            $ins->execute(array($_SESSION['id'],$sujet,$contenu,$notif_mail));
                            
                            $lt = $bdd->query('SELECT id FROM f_topics ORDER BY id DESC LIMIT 0,1');
                            $lt = $lt->fetch();
                            $id_topic = $lt['id'];
                            $ins = $bdd->prepare('INSERT INTO f_topics_categories (id_topic, id_categorie, id_souscategorie) VALUES (?,?,?)');
                            $ins->execute(array($id_topic, $get_categorie, $souscategorie));
                         } else {
                            $terror = "Votre sujet ne peut pas dépasser 70 caractères";
                         }
                      } else {
                         $terror = "Veuillez compléter tous les champs";
                      }
                   } else {
                      $terror = "Sous-catégorie invalide";
                   }
                }
             }
          } else {
             $terror = "Veuillez vous connecter pour poster un nouveau topic";
          }
       } else {
          die('Catégorie invalide...');
       }
    } else {
       die('Aucune catégorie définie...');
    }
    
    require('views/nouveau_topic.view.php'); /* Inclusion du fichier vue */
    ?>

    nouveau_topic.view.php

    <form class="fntopic" method="POST">
         <table class="forum ntopic">
          <tr class="header">
             <th class="main">Nouveau Topic</th>
             <th></th>
          </tr>
          <tr>
             <td>Sujet</td>
             <td><input type="text" name="tsujet" size="70" maxlength="70" /></td>
          </tr>
          <tr>
             <td>Catégorie</td>
             <td>
             <?= $categorie ?>
             </td>
          </tr>
          <tr>
             <td>Sous-Catégorie</td>
             <td>
                <select name="souscategorie">
                   <?php while($sc = $souscategories->fetch()) { ?>
                   <option value="<?= $sc['id'] ?>"><?= $sc['nom'] ?></option>
                   <?php } ?>
                </select>
             </td>
          </tr>
          <tr>
             <td>Message</td>
             <td><textarea name="tcontenu"></textarea></td>
          </tr>
          <tr>
             <td>Me notifier des réponses par mail</td>
             <td><input type="checkbox" name="tmail" /></td>
          </tr>
          <tr>
             <td colspan="2"><input type="submit" name="tsubmit" value="Poster le Topic" /></td>
          </tr>
          <?php if(isset($terror)) { ?>
          <tr>
             <td colspan="2"><?= $terror ?></td>
          </tr>
          <?php } ?>
       </table>
    </form>

    Et le SQL (forum.sql)

    -- phpMyAdmin SQL Dump
    -- version 4.6.4
    -- https://www.phpmyadmin.net/
    --
    -- Client :  127.0.0.1
    -- Généré le :  Jeu 19 Janvier 2017 à 19:46
    -- Version du serveur :  5.7.14
    -- Version de PHP :  5.6.25
    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
    
    --
    -- Base de données :  `forum`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `f_categories`
    --
    
    CREATE TABLE `f_categories` (
      `id` int(11) NOT NULL,
      `nom` varchar(255) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    --
    -- Contenu de la table `f_categories`
    --
    
    INSERT INTO `f_categories` (`id`, `nom`) VALUES
    (1, 'Programmation'),
    (2, 'CMS');
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `f_messages`
    --
    
    CREATE TABLE `f_messages` (
      `id` int(11) NOT NULL,
      `id_topic` int(11) NOT NULL,
      `id_posteur` int(11) NOT NULL,
      `date_heure_post` datetime NOT NULL,
      `date_heure_edition` datetime NOT NULL,
      `meilleure_reponse` tinyint(1) NOT NULL,
      `contenu` text NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `f_souscategories`
    --
    
    CREATE TABLE `f_souscategories` (
      `id` int(11) NOT NULL,
      `id_categorie` int(11) NOT NULL,
      `nom` varchar(255) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    --
    -- Contenu de la table `f_souscategories`
    --
    
    INSERT INTO `f_souscategories` (`id`, `id_categorie`, `nom`) VALUES
    (1, 1, 'HTML'),
    (2, 1, 'CSS'),
    (3, 1, 'Javascript'),
    (4, 1, 'jQuery'),
    (5, 1, 'php'),
    (6, 1, 'MySql'),
    (7, 1, 'ActionScript'),
    (8, 2, 'Wordpress'),
    (9, 2, 'Drupal'),
    (10, 2, 'Responsive'),
    (11, 3, 'App mobiles'),
    (12, 3, 'Androïde'),
    (13, 3, 'iOs'),
    (14, 3, 'Windows'),
    (15, 4, 'Smartphones'),
    (16, 5, 'Tutoriels'),
    (17, 1, 'Ajax'),
    (18, 6, '3DsMax'),
    (19, 6, 'Photoshop'),
    (20, 6, 'Illustrator');
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `f_suivis`
    --
    
    CREATE TABLE `f_suivis` (
      `id` int(11) NOT NULL,
      `id_user` int(11) NOT NULL,
      `id_topic` int(11) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `f_topics`
    --
    
    CREATE TABLE `f_topics` (
      `id` int(11) NOT NULL,
      `id_createur` int(11) NOT NULL,
      `sujet` text NOT NULL,
      `contenu` text NOT NULL,
      `date_heure_creation` datetime NOT NULL,
      `resolu` tinyint(1) NOT NULL,
      `notif_createur` tinyint(1) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `f_topics_categorie`
    --
    
    CREATE TABLE `f_topics_categorie` (
      `id` int(11) NOT NULL,
      `id_topic` int(11) NOT NULL,
      `id_categorie` int(11) NOT NULL,
      `id_souscategorie` int(11) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `membres`
    --
    
    CREATE TABLE `membres` (
      `id` int(11) NOT NULL,
      `pseudo` varchar(255) NOT NULL,
      `mail` varchar(255) NOT NULL,
      `motdepasse` text NOT NULL,
      `avatar` varchar(255) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    --
    -- Contenu de la table `membres`
    --
    
    INSERT INTO `membres` (`id`, `pseudo`, `mail`, `motdepasse`, `avatar`) VALUES
    (10, 'demo', 'demo@demo.demo', '89e495e7941cf9e40e6980d14a16bf023ccd4c91', '10.jpg');
    
    --
    -- Index pour les tables exportées
    --
    
    --
    -- Index pour la table `f_categories`
    --
    ALTER TABLE `f_categories`
      ADD PRIMARY KEY (`id`);
    
    --
    -- Index pour la table `f_messages`
    --
    ALTER TABLE `f_messages`
      ADD PRIMARY KEY (`id`);
    
    --
    -- Index pour la table `f_souscategories`
    --
    ALTER TABLE `f_souscategories`
      ADD PRIMARY KEY (`id`);
    
    --
    -- Index pour la table `f_suivis`
    --
    ALTER TABLE `f_suivis`
      ADD PRIMARY KEY (`id`);
    
    --
    -- Index pour la table `f_topics`
    --
    ALTER TABLE `f_topics`
      ADD PRIMARY KEY (`id`);
    
    --
    -- Index pour la table `f_topics_categorie`
    --
    ALTER TABLE `f_topics_categorie`
      ADD PRIMARY KEY (`id`);
    
    --
    -- Index pour la table `membres`
    --
    ALTER TABLE `membres`
      ADD PRIMARY KEY (`id`);
    
    --
    -- AUTO_INCREMENT pour les tables exportées
    --
    
    --
    -- AUTO_INCREMENT pour la table `f_categories`
    --
    ALTER TABLE `f_categories`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
    --
    -- AUTO_INCREMENT pour la table `f_messages`
    --
    ALTER TABLE `f_messages`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
    --
    -- AUTO_INCREMENT pour la table `f_souscategories`
    --
    ALTER TABLE `f_souscategories`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
    --
    -- AUTO_INCREMENT pour la table `f_suivis`
    --
    ALTER TABLE `f_suivis`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
    --
    -- AUTO_INCREMENT pour la table `f_topics`
    --
    ALTER TABLE `f_topics`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
    --
    -- AUTO_INCREMENT pour la table `f_topics_categorie`
    --
    ALTER TABLE `f_topics_categorie`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
    --
    -- AUTO_INCREMENT pour la table `membres`
    --
    ALTER TABLE `membres`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    


    Merci et désolé du pavé.



    -
    Edité par YaronWedner 20 janvier 2017 à 5:38:15

    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2017 à 5:00:03

      Trop de codes. Modifies ton post et mets juste la partie qui ne marche pas
      • Partager sur Facebook
      • Partager sur Twitter
        20 janvier 2017 à 5:39:18

        Voilà, je n'y ai inclue que les fichiers concernés.
        • Partager sur Facebook
        • Partager sur Twitter
          20 janvier 2017 à 6:03:32

          S'il n'y a pas d'erreurs mysql c'est que ton problème vient de tes if imbriqués, surement une des conditions est fausse mais tu n'affiches pas le message d'erreurs. Fais un écho des messages d'erreurs dans tes blocs else pour voir ce que ça donne
          • Partager sur Facebook
          • Partager sur Twitter
            20 janvier 2017 à 8:42:37

            Salut !

            ahmada1 a écrit:

            S'il n'y a pas d'erreurs mysql c'est que ton problème vient de tes if imbriqués

            Pas nécessairement, je ne vois pas ce qui devrait faire s'afficher les messages d'erreur MySQL – cf. la FAQ PHP pour les activer.

            • Partager sur Facebook
            • Partager sur Twitter
              20 janvier 2017 à 9:57:25

              Bah si. Tes requêtes d'insertions ont l'air correct, donc si tu n'as pas d'erreur php ni mysql, c'est que le programme n'entre pas dans le if ou tu insères dans la bdd. As tu essayé d'afficher les messages que tu récupéres dans $terror ?
              • Partager sur Facebook
              • Partager sur Twitter
                20 janvier 2017 à 11:45:31

                Non.

                Les erreurs MySQL ne sont par défaut pas affichées par PDO, alors à moins que quand il a simplifié son code présenté il ait enlevé ce qui active cet affichage, elles ne sortiront pas. Donc ne pas penser que "pas d'erreur MySQL" visible (ce qui est très probablement le cas ici), c'est exactement la même chose que "absolument aucune erreur MySQL, même si on demande de les afficher".

                • Partager sur Facebook
                • Partager sur Twitter
                  20 janvier 2017 à 11:55:08

                  Oups désolé Ymox, je pensais chatter avec la même personne, raison pour laquelle j'ai dit plus haut "Tes requêtes...". En effet il faut activer l'affichage des erreurs, chose que je trouve évident
                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 janvier 2017 à 12:30:22

                    J'ai implanté un $terror "ok"; dans le if contenant la requête et elle s'affiche quand je remplis bien tout les champs.

                    Le message OK s'affiche bien mais l'insertion dans la db reste toujours au même point qu'avant.

                    -
                    Edité par YaronWedner 20 janvier 2017 à 12:34:38

                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 janvier 2017 à 3:56:21

                      Bon... c'était une mauvaise liaison des tables dans la DB.

                      [Résolu] :soleil:

                      • Partager sur Facebook
                      • Partager sur Twitter

                      N'inscrit rien dans la database.

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown