Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème ajout d'articles dans ma BDD

    29 mars 2018 à 17:45:18

    Alors voici mon bout de code pour ajouter des articles (je l'étoffe au fur et a mesure).

    <?php 
    
    $bdd = new PDO("mysql:host=127.0.0.1;dbname=articles;charset=utf8", "root", "");
    
    if(isset($_POST['article_titre'], $_POST['article_autheur'], $_POST['article_description'], $_POST['article_contenu'], $_POST['article_contenu2']))   
      {
      if(!empty($_POST['article_titre']) AND  !empty($_POST['article_autheur']) AND  !empty($_POST['article_description']) AND  !empty($_POST['article_contenu']) AND  !empty($_POST['article_contenu2']))
        { 
         $article_titre  = htmlspecialchars($_POST['article_titre']);
         $article_autheur = htmlspecialchars($_POST['article_autheur']);
         $article_description = htmlspecialchars($_POST['article_description']);
         $article_contenu  = htmlspecialchars($_POST['article_contenu']);
         $article_contenu2  = htmlspecialchars($_POST['article_contenu2']);
    
         $ins = $bdd->prepare('INSERT INTO articles (titre, autheur,  desciption, contenu, contenu2, date_time_publication)
         VALUES (?, ?, ?, ?, ?, NOW())');
         $ins->execute(array($article_titre, $article_autheur, $article_description, $article_contenu, $article_contenu2));
         $message = 'Votre article a bien été posté !';
        }   
      
      else
        {      
          $message = 'Veuillez remplir tous les champs !';
        }
    }
    ?>
    Malheureusement, mon code n'ajoute rien a ma bdd... Je veux formater mon code en InnoDB mais des queje le fais ma table est bien en InnoDB mais mySQL veut la formater a tout prix en MyISAM une solution ? 




    • Partager sur Facebook
    • Partager sur Twitter
      29 mars 2018 à 17:50:44

      Salut,

      Deux - trois choses avant ton problème MyIsam:

      • Vire les HTMSPECIALCHARS car on ne l'utilise QUE POUR L'AFFICHAGE, pas pour l'entrée en DB (voir la doc)
      • Utilise directement les données $_POST dans ton bind => vire moi ces vairables intermédiaires inutiles. Elles sont utiles QUE dans le cas où tu veux garder la donnée originelle inchangée pour un test plus loin dans le script.
      • Utilise bindValue => lisibilité flexibilité (voir la doc)
      • Tu ne testes pas le retour de execute() et tu n'utilises pas try/catch => tu ne sais pas ce que fais ton script

      Voilà ;) au travail maintenant.

      • Partager sur Facebook
      • Partager sur Twitter
        29 mars 2018 à 17:57:18

        SALUT !

        Edit

        Bon, c'est ça que d'ouvrir une série d'onglets et de ne pas y répondre dans le même ordre  :lol:

        -
        Edité par Ymox 29 mars 2018 à 17:58:06

        • Partager sur Facebook
        • Partager sur Twitter
          29 mars 2018 à 18:09:19

          Ymox a écrit:

          Edit

          Bon, c'est ça que d'ouvrir une série d'onglets et de ne pas y répondre dans le même ordre  :lol:

          -
          Edité par Ymox il y a 10 minutes


          :lol::lol::lol::lol::lol::lol:
          • Partager sur Facebook
          • Partager sur Twitter
            29 mars 2018 à 18:14:22

            Bah en fait mon code fonctionnait parfaitement bien avec une table de 4 colonnes.
            Le htmlspecialchars() est pour empecher les injections SQL depuis le formulaire (qui sera accessible) donc on peut facilement faire joujou avec et detruire une BDD.

            Mon htmlspecialchars() fonctionne très bien comme ça et mon code est également très bien conçu, car mon code peut très bien utiliser htmlspecialchars en entrée et de ce fait protège mon site de l'utilisateur (faille xss dans le formulaire), ensuite j'ai testé le code avec moins d'entrées et ça fonctionnait parfaitement, et enfin ma bdd interprètera le htmlspecialchars sans avoir a le déclarer dans l'affichage. J'ai tenté moins même de casser le code et il fonctionne parfaitement.
            ensuite pour le le _POST, c'est juste obligatoire avec mon formulaire utilisant la méthode _POST essaye de mettre un titre sans methode post dans un formulaire la BDD ne reconnaitra rien et ne voudra rien rajouter.

            Ce que tu me réponds c'est juste des détails (qui n’empêche pas mon code de fonctionner en soit).

            Alors outre les défaults de mon code que tu n'a spas l'air d'apprécie, tu n'as absolument pas repondu a ma question premiere qui était un problèmle de BDD mais merci pour ton intervention : SALUT !

            • Partager sur Facebook
            • Partager sur Twitter
              29 mars 2018 à 18:20:44

              SébastienFAUCHER a écrit:

              Bah en fait mon code fonctionnait parfaitement bien avec une table de 4 colonnes.
              Le htmlspecialchars() est pour empecher les injections SQL depuis le formulaire (qui sera accessible) donc on peut facilement faire joujou avec et detruire une BDD.

              Mon htmlspecialchars() fonctionne très bien comme ça et mon code est également très bien conçu, car mon code peut très bien utiliser htmlspecialchars en entrée et de ce fait protège mon site de l'utilisateur (faille xss dans le formulaire), ensuite j'ai testé le code avec moins d'entrées et ça fonctionnait parfaitement, et enfin ma bdd interprètera le htmlspecialchars sans avoir a le déclarer dans l'affichage. J'ai tenté moins même de casser le code et il fonctionne parfaitement.
              ensuite pour le le _POST, c'est juste obligatoire avec mon formulaire utilisant la méthode _POST essaye de mettre un titre sans methode post dans un formulaire la BDD ne reconnaitra rien et ne voudra rien rajouter.

              Ce que tu me réponds c'est juste des détails (qui n’empêche pas mon code de fonctionner en soit).

              Alors outre les défaults de mon code que tu n'a spas l'air d'apprécie, tu n'as absolument pas repondu a ma question premiere qui était un problèmle de BDD mais merci pour ton intervention : SALUT !

              Champion du monde ! Pourquoi venir demander de l'aide alors :lol:

              • Partager sur Facebook
              • Partager sur Twitter
              Comar
                29 mars 2018 à 18:21:38

                SébastienFAUCHER a écrit:

                Comar91 a écrit:

                SébastienFAUCHER a écrit:

                Bah en fait mon code fonctionnait parfaitement bien avec une table de 4 colonnes.
                Le htmlspecialchars() est pour empecher les injections SQL depuis le formulaire (qui sera accessible) donc on peut facilement faire joujou avec et detruire une BDD.

                Mon htmlspecialchars() fonctionne très bien comme ça et mon code est également très bien conçu, car mon code peut très bien utiliser htmlspecialchars en entrée et de ce fait protège mon site de l'utilisateur (faille xss dans le formulaire), ensuite j'ai testé le code avec moins d'entrées et ça fonctionnait parfaitement, et enfin ma bdd interprètera le htmlspecialchars sans avoir a le déclarer dans l'affichage. J'ai tenté moins même de casser le code et il fonctionne parfaitement.
                ensuite pour le le _POST, c'est juste obligatoire avec mon formulaire utilisant la méthode _POST essaye de mettre un titre sans methode post dans un formulaire la BDD ne reconnaitra rien et ne voudra rien rajouter.

                Ce que tu me réponds c'est juste des détails (qui n’empêche pas mon code de fonctionner en soit).

                Alors outre les défaults de mon code que tu n'a spas l'air d'apprécie, tu n'as absolument pas repondu a ma question premiere qui était un problèmle de BDD mais merci pour ton intervention : SALUT !

                Champion du monde ! Pourquoi venir demander de l'aide alors :lol:


                Bah si tu sais lire, j'ai pas demandé de l'aide sur mon code (si tu savais lire)  CQFD :D

                -
                Edité par SébastienFAUCHER il y a moins de 5s



                -
                Edité par SébastienFAUCHER 29 mars 2018 à 18:27:03

                • Partager sur Facebook
                • Partager sur Twitter
                  29 mars 2018 à 18:39:40

                  Bonjour,

                  Désolé, mais les commentaires qui t'ont été fait seront partagés par quasiment tout ceux qui seront capables de t'aider. Ce n'est pas pour t'embêter, mais on a tendance à vouloir faire prendre de bonnes habitudes aux débutants pour qu'ils ne s'embarquent pas avec des codes pollués qu"ils n'arriveront pas à débugger eux-mêmes.

                  Au cas particulier, tu aurais pu résoudre ton problème simplement en activant les erreurs PDO.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 mars 2018 à 18:39:49

                    Bon on va reprendre:

                    • ton code n'est pas bon (et je suis poli avec la réponse que tu nous donnes ^^ )
                    • MySQL ne veut pas reformater ta table
                    • Tu ne sais pas la différence entre MyIsam et InnoDB (sinon tu ne parlerais pas de ton code mais de la structure de la table)
                    • Donc tu as encore du temps à passer sur les doc MySQL et les base de développement / sécurité.
                    • Pour ton information, htmlspecialchar va créer un biais avec les données que tu entres et celle que tu va contrôler  par la suite

                    Bonne soirée

                    -
                    Edité par christouphe 29 mars 2018 à 18:41:01

                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 mars 2018 à 19:50:16

                      Slt tu as un champ dans le insert nommé desciption? au lieu de description....

                      Cordialement

                      André



                      • Partager sur Facebook
                      • Partager sur Twitter
                        29 mars 2018 à 21:03:07

                        bonsoir je viens vous de demander  l'aide car je n'arrive pas a inserer dans ma bdd des elements je vous laisse la function panier qui me pose probleme et pourtant j'arrive bien jusqu'au header('location') sans problème je vous remercie.

                        {
                          if (isset($_GET['id'])) {
                            $db = database();
                            $adresse_ip = get_ip();
                            $produit_panier = $_GET['id'];
                            // ici on fait une requete qui verifie que l'adresse ip de l'ulisateur est le même
                            $requete_ckeck = $db->prepare("SELECT * FROM panier WHERE ip_adresse='{$adresse_ip}' AND product_id='{$produit_panier}'");
                            $requete_ckeck->execute(array());
                              $count = $requete_ckeck->rowCount();
                            if ($count > 0) {

                            }
                            else
                            {
                              $insertion = $db->prepare('INSERT INTO panier(prod_id,ip_adresse) VALUES(:prod_id,:ip_adresse)');
                              $insertion->execute(array(
                                    'prod_id' => $produit_panier,
                                    'ip_adresse' => $adresse_ip
                              ));

                              header('location:tous_produits.php');

                            }
                          }

                        }

                        -
                        Edité par DanielPassy 29 mars 2018 à 21:07:07

                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 mars 2018 à 22:53:26

                          :p

                          Alors :

                          1) moins gros, on est pas aveugle (et sourd)

                          2) ouvre un topic pour ton cas

                          3) utilise les balises de code (bouton </> + PHP dans la liste)

                          • Partager sur Facebook
                          • Partager sur Twitter
                            29 mars 2018 à 23:44:43

                            je ne comprends ce que tu veux dire  a quel niveau  je dois l'utiliser

                            -
                            Edité par DanielPassy 29 mars 2018 à 23:45:29

                            • Partager sur Facebook
                            • Partager sur Twitter
                              30 mars 2018 à 0:15:33

                              Le htmlspecialchars() est pour empecher les injections SQL depuis le formulaire (qui sera accessible) donc on peut facilement faire joujou avec et detruire une BDD.

                              Tiens, il faudra que quelqu'un m'explique pourquoi il y a html, special et chars dans le nom de la fonction. La documentation m'indique qu'elle agit sur des caractères spéciaux du HTML… Je ne vois vraiment pas où il est fait mention de SQL… Ils ont dû oublier depuis le temps. Ou c'est comme sur Wikipedia, n'importe-qui peut aller enlever. Mais alors, n'importe-qui peut aller remettre ?

                              Et suite à ce sujet, on aurait banni un membre pour avoir dit une vérité cachée trop dérangeante ?

                              SInon, c'est bien connu, on vient ici pour apprendre à faire comme on veut.
                              Euh, attends, si c'est pour faire comme on veut, pourquoi on apprend alors ?  o_O


                              A part ça, il y a ici des éléments qui devraient sinon faire, au moins aider à comprendre les injections SQL. Et un brin de réflexion supplémentaire, avec éventuellement quelques tests, devrait mettre en évidence que non, quoi qu'en pensent certains,

                              htmlspecialchars() n'est vraiment pas une protection contre les injections SQL

                              -
                              Edité par Ymox 31 mars 2018 à 0:48:12

                              • Partager sur Facebook
                              • Partager sur Twitter
                                19 novembre 2019 à 18:54:19

                                Bon 1 an je n'étais pas revenu le problème a été resolu, je comprenais pas ce exactement tout ce que je faisais a ce moment, qu'est-ce qu'on peut être bête quand on apprend merci a tous s pour vos retour 

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Problème ajout d'articles dans ma BDD

                                × 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