IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

INSERT BDD étrange


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2019
    Messages : 2
    Par défaut INSERT BDD étrange
    Bonsoir les gens je viens suite à un problème vraiment je ne comprends pas...
    Pour mon projet j'ai une zone de commentaires à la suite des articles. Encore hier je taffais dessus et j'arrivais sans problèmes à poster de nouveaux commentaires mais tout à l'heure j'ai décidé de réessayer pour vérifier parce que j'allais vider ma table dans ma base de données et étrangement aucuns commentaires n'étaient postés or l'action fonctionne et je reçois bien mon message "Votre commentaire a bien été posté". En gros le code s'effectue normalement et quand j'essaye de le tester avec des zones vides pour retourner une réponse "Veuillez remplir tous les champs!" ça fonctionne. Je suis donc allé voir dans ma BDD et aucun nouveau commentaire inséré, je ne comprends pas si vous pouviez m'aider...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    <?php
    session_start();
    ?>
    <?php
    $bdd = new PDO("mysql:host=127.0.0.1;dbname=inscription;charset=utf8", "root", "");
    $bdd = new PDO("mysql:host=127.0.0.1;dbname=articles;charset=utf8", "root", "");
    if(isset($_GET['id']) AND !empty($_GET['id'])) {
       $get_id = ($_GET['id']);
       $article = $bdd->prepare('SELECT * FROM articles WHERE id = ?');
       $article->execute(array($get_id));
       if($article->rowCount() == 1) {
          $article = $article->fetch();
          $id = $article['id'];
          $titre = $article['titre'];
          $contenu = $article['contenu'];
          $likes = $bdd->prepare('SELECT id FROM likes WHERE id_article = ?');
          $likes->execute(array($id));
          $likes = $likes->rowCount();
          $dislikes = $bdd->prepare('SELECT id FROM dislikes WHERE id_article = ?');
          $dislikes->execute(array($id));
          $dislikes = $dislikes->rowCount();
       } else {
          die('Cet article n\'existe pas !');
       }
    } else {
       die('Erreur');
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
          <title><?= $titre ?></title>
          <meta charset="utf-8" />
          <link rel="stylesheet" href="assets/css/main.css" />
     
       </head>
       <body class="homepage is-preload">
    <?php
    $bdd = new PDO('mysql:host=127.0.0.1;dbname=articles;charset=utf8','root','');
    if(isset($_GET['id']) AND !empty($_GET['id'])) {
       $getid = ($_GET['id']);
       $article = $bdd->prepare('SELECT * FROM articles WHERE id = ?');
       $article->execute(array($getid));
       $article = $article->fetch();
       if(isset($_POST['submit_commentaire'])) {
          if(isset($_POST['pseudo'],$_POST['commentaire']) AND !empty($_POST['pseudo']) AND !empty($_POST['commentaire'])) {
             $pseudo = ($_POST['pseudo']);
             $commentaire = ($_POST['commentaire']);
             if(strlen($pseudo) < 255) {
                $ins = $bdd->prepare('INSERT INTO commentaires (pseudo, commentaire, id_article) VALUES (?,?,?)');
                $ins->execute(array($pseudo,$commentaire,$getid));
                $c_msg = "<span style='color:green'>Votre commentaire a bien été posté</span>";
             } else {
                $c_msg = "Erreur: Le pseudo doit faire moins de 255 caractères";
             }
          } else {
             $c_msg = "<span style='color:red'>Erreur: Tous les champs doivent être complétés</span>";
          }
       }
       $commentaires = $bdd->prepare('SELECT * FROM commentaires WHERE id_article = ? ORDER BY id DESC');
       $commentaires->execute(array($getid));
    ?>
          <div id="page-wrapper">
     
             <!-- Header -->
                <section id="header">
                   <div class="container">
     
                      <!-- Logo -->
                      <img class="background_nav" src="#" alt="">
                         <h1 id="logo">Un peu de lecture ?</h1>
                      </div>
                   </section>
     
    <section id="main">
                   <div class="container">
                      <div id="content">
     
                         <!-- Post -->
                            <article class="box post">
                               <header>
                                  <h2><?= $titre ?></h2>
       <p><?= $contenu ?></p> <br/>
     
       <a href="php/action.php?t=1&id=<?= $id ?>">J'aime</a> (<?= $likes ?>)
       <br />
       <a href="php/action.php?t=2&id=<?= $id ?>">Je n'aime pas</a> (<?= $dislikes ?>) <br/>
       <a href="page_articles">Page précédente</a>
       <br/><br/> 
     
    <section>
       <div class="">
       <form method="POST">
       <input type="text" name="pseudo" value="<?= $_SESSION['name'] ?>" /><br />
       <textarea name="commentaire" placeholder="Votre commentaire..."></textarea><br />
       <input type="submit" value="Poster mon commentaire" name="submit_commentaire" />
    </form>
     
    </section>
     
    </form> <br/>
       <h2>Les commentaires</h2>
       <?php
    $grosMots = array('je vous épargne ces mots'); 
    $remplacement = '*'; 
    ?>
     
    <?php if(isset($c_msg)) { echo $c_msg; } ?>
    <br /><br />
    <?php while($c = $commentaires->fetch()) {
    $c['commentaire'] = str_replace($grosMots, $remplacement, strtolower($c['commentaire'])); 
    echo  "<br/>"; 
    echo  "<br/>"; 
    echo '<span style="background-color:white; color:black; font-size:200%; text-decoration:underline">'.$c['pseudo'].'</span>' ; 
    echo  "<br/>"; 
    echo   '<span style="color:black;">'.nl2br($c['commentaire']).'</span>';}
     ?>
     
     
     
     
    <?php } ?>
    <?php
     
    ?>
     
    </body>
    </html>

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Le formulaire est de type POST alors que tu conditionnes avec $_GET. La variable $article est écrasée par un instance d'objet du même nom et en plus la lecture de la table ne sert à rien là. L'écrasement a aussi lieu dans la partie de lecture. C'est une très mauvaise pratique.

    Nom : Capture20190105_001.JPG
Affichages : 132
Taille : 100,3 Ko

    Dans le formulaire il n'y a aucune référence à $id ni en get ni en post. Donc quand tu fais le submit id n'est pas envoyé. Comment ça peut même t'afficher que ça a bien été inséré ?
    Après cela dépend aussi de la structure de la table des commentaires. Si ta table n'a pas de champ identifiant autoincrement alors elle n'accepte qu'un seul commentaire.
    Le fait que ça t'affiche que ça c'est bien passé ne veut rien dire si les conditions mêmes de cet affichage ne sont pas bonnes. Pour que cela soit correct il aurait fallu que tu testes $ins->rowCount() > 0 après le execute.

    Nom : Capture20190105_002.JPG
Affichages : 119
Taille : 45,9 Ko

    Enfin il y a un </form> en trop et plein de tags ouverts qui ne sont pas fermés dans ce que j'ai pu voir.

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Aux remarques précédentes, j'ajoute que tu as plusieurs connections à des bases différentes à plusieurs endroits du script et que tu les stockes toutes dans la même variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $bdd = new PDO("mysql:host=127.0.0.1;dbname=inscription;charset=utf8", "root", ""); // L5
    $bdd = new PDO("mysql:host=127.0.0.1;dbname=articles;charset=utf8", "root", ""); // L6
    // [...]
    $bdd = new PDO('mysql:host=127.0.0.1;dbname=articles;charset=utf8','root',''); // L39
    As-tu réellement besoin des connections aux 2 tables ? Dans tous les cas, tu peux ouvrir les connections une seule fois en début de script.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2019
    Messages : 2
    Par défaut
    Bien le bonsoir, j'ai résolu mes problèmes et pris en compte vos critiques pour rendre mon code plus propre. Je vous remercie pour l'aide et le temps !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Formulaire PHP avec insertion BDD & Session
    Par DjChat dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 23/05/2008, 13h36
  2. Insertion BDD acces
    Par theoffss dans le forum VB.NET
    Réponses: 1
    Dernier message: 19/03/2008, 23h31
  3. [multiset.insert] comportement étrange
    Par r0d dans le forum SL & STL
    Réponses: 3
    Dernier message: 05/03/2008, 16h02
  4. [MySQL] Prefixe pour insertion bdd !
    Par dekovince dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/05/2007, 16h24
  5. Réponses: 4
    Dernier message: 13/04/2004, 19h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo