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

Langage PHP Discussion :

Insertion dans la base de données [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut Insertion dans la base de données
    Bonjour,

    J'ai un problème d'enregistrement dans la BDD qui me rend chèvre depuis hier : via un formulaire PHP, j'insère des informations dans ma base de données. Tous les champs s'insèrent normalement, sauf un : "Résumé".

    Quoique j'inscrive dans le formulaire dans le champ "Résumé", cela ne s'inscrira pas dans la base de donnée. Par contre à la place, s'affichera toujours les données "Résumé" du dernier message enregistré manuellement dans la base.

    J'ai effacé ma base pour un test : j'ai réussi à insérer, via mon formulaire php, toutes les infos de la première entrée.

    J'ai ensuite tenté de refaire la même opération pour la seconde entrée et là, le champ "résumé" n'a pas pris en compte ce que j'ai envoyé par le formulaire mais à dupliqué le champ "résumé" de la première entrée.

    Je ne sais pas si je suis très claire, je vous propose donc les codes suivants :

    Ma BDD
    Code sql : 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
    -- phpMyAdmin SQL Dump
    -- version 3.5.1
    -- <a href="http://www.phpmyadmin.net" target="_blank">http://www.phpmyadmin.net</a>
    --
    -- Client: localhost
    -- Généré le: Mar 11 Novembre 2014 à 15:18
    -- Version du serveur: 5.1.36-community-log
    -- Version de PHP: 5.3.0
     
    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 utf8 */;
     
    --
    -- Base de données: `Marie08`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `table_Marie08`
    --
     
    CREATE TABLE IF NOT EXISTS `table_marie08` (
      `id` int(3) NOT NULL AUTO_INCREMENT,
      `titre` varchar(255) NOT NULL,
      `soustitre` varchar(255) NOT NULL,
      `datepublication` date NOT NULL,
      `resume` text NOT NULL,
      `article` text NOT NULL,
      `liensource` varchar(255) NOT NULL,
      `signature` varchar(255) NOT NULL,
      `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
     
    --
    -- Contenu de la table `table_Marie08`
    --
     
    INSERT INTO `table_Marie08` (`id`, `titre`, `soustitre`, `datepublication`, `resume`, `article`, `liensource`, `signature`, `timestamp`) VALUES
    (1, 'essai 1609', 'essai 1609', '2014-11-11', 'essai 1609', 'essai 1609', 'essai 1609', 'essai 1609', '2014-11-11 15:09:28'),
    (2, 'essai 1614', 'essai 1614', '2014-11-11', 'essai 1609', 'essai 1614', 'essai 1614', 'essai 1614', '2014-11-11 15:14:43'),
    (3, 'essai 1615', 'essai 1615', '2014-11-11', 'essai 1609', 'essai 1615', 'essai 1615', 'essai 1615', '2014-11-11 15:15:52');
     
    /*!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 */;

    Le code de mon formulaire :
    Code html : 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
    <form id="inserarticle" action="gestion-article-inserer-envoyer.php" method="post">
    	<fieldset>
    		<legend>Insertion d'un article</legend>	
    		<label for="titre"></label>
    		<input type="text" name="titre" id="titre" placeholder="Titre" maxlength="100" tabindex="10" autofocus /><br />
    		<label for="soustitre"></label>
    		<input type="text" name="soustitre" id="soustitre" placeholder="Sous-titre" maxlength="100" tabindex="15" /><br /><br />
    		<label for="datepublication"></label>
    		<input type="date" name="datepublication" id="datepublication" placeholder="Date de publication" tabindex="20" /><br /><br />
    		<label for="resume"></label>
    		<textarea name="resume" id="resume" placeholder="Résumé" maxlength="1000" tabindex="25"></textarea><br />
    		<label for="article"></label>
    		<textarea type="text" name="article" id="article" placeholder="Article complet" tabindex="30"></textarea><br />
    		<label for="liensource"></label>
    		<input type="text" name="liensource" id="liensource" placeholder="Hyperlien de la source" maxlength="200" tabindex="35" /><br />
    		<label for="signature"></label>
    		<input type="text" name="signature" id="signature" placeholder="Signature de la source" maxlength="150" tabindex="40" /><br />
    		<?php include("../bbcode-include.php"); ?>
    	</fieldset>
    	<p>
    		<input class="bouton" type="submit" name="submit" id="submit" value="Insérer" tabindex="45" />
    		<a class="retour" href="gestion.php" title="Retour sur la page de gestion">Retour sur la page de gestion</a>
    	</p>
    </form>

    Et voici le code de ma page qui envoie dans la BDD
    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
    <?php
    // Récupération des paramètres POST
    $titre = $_POST["titre"];
    $soustitre = $_POST["soustitre"];
    $datepublication = $_POST["datepublication"];
    $resume = str_replace("\n", '<br/>', $_POST["resume"]);
    $article = str_replace("\n", '<br/>', $_POST["article"]);
    $liensource = $_POST["liensource"];
    $signature = $_POST["signature"];
    ?>
    <?php include("../connexion_sql.php"); ?>
    <?php include("../bbcode.php"); ?>
    <?php 
    $req = $bdd->prepare ('INSERT INTO table_Marie08 (titre, soustitre, datepublication, resume, article, liensource, signature, timestamp) VALUES (:titre, :soustitre, :datepublication, :resume, :article, :liensource, :signature, NOW())') or die(print_r($bdd->errorInfo()));
    $req->execute(array(
    	'titre' => $titre,
    	'soustitre' => $soustitre,
    	'datepublication' => $datepublication,
    	'resume' => $resume,
    	'article' => $article,
    	'liensource' => $liensource,
    	'signature' => $signature
    ));
    if($req) {
    	echo '<p>Insertion réussie !</p>';
    }
    else {
    	echo '<p>Échec à l\'insertion.</p>';
    }
    $req->closeCursor();	
    ?>
    Voilà, c'est le genre de code que je fais à longueur d'année, qui fonctionne très bien, mais là... . J'ai cherché à comparer point par point avec ce que j'ai fait ailleurs et qui fonctionne très bien, mais je n'ai rien détecté d'anormal. J'ai repris mes bouquins mais n'ai rien trouvé à corriger.

    Pourtant, j'ai bien dû faire une boulette quelque part, alors c'est vers vous que je me tourne à présent avant de perdre définitivement la raison !!!

    Merci beaucoup de votre aide,

    Marie

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as fais le debugage basique comme contrôler ce que contient $_POST ?

    Tu as des Triggers mysql ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Bonjour Sabotage,

    J'ai renvoyé les résultats du formulaire sur une page de test pour éditer/vérifier les $_POST via un simple echo, le résultat est dingue : l'echo "resume" me renvoie non pas ce que j'ai entré dans le formulaire mais le dernier "resume" inséré dans la base de donnée, alors que ma page de résultat ne contient aucune connexion à ma BDD. J'avoue ne rien comprendre à ce qu'il se passe, cela n'a pas de sens pour moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    // Récupération des paramètres POST
    $titre = $_POST["titre"];
    $soustitre = $_POST["soustitre"];
    $datepublication = $_POST["datepublication"];
    $resume = str_replace("\n", '<br/>', $_POST["resume"]);
    $article = str_replace("\n", '<br/>', $_POST["article"]);
    $liensource = $_POST["liensource"];
    $signature = $_POST["signature"];
    ?>
    <?php echo $titre. ' ' .$soustitre. ' ' .$datepublication. ' ' .$resume. ' ' .$article. ' ' .$liensource. ' ' .$signature; ?>


    Tu as des Triggers mysql ?
    Je ne connaissais pas les Triggers avant ton message. D'après ce que j'ai pu lire sur le web, je peux te dire (sauf confusion) que je n'ai pas ça dans ma BDD.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour être sur du resultat :
    ne te donne pas ce que tu as saisi dans ton formulaire ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    En utilisant var_dump(); cela me renvoie toujours le résumé d'un précédent article et non pas ce que j'entre dans le formulaire.

    Je ne comprends pas comment cela est possible. Comment la variable $resume peut me sortir une information d'un précédent article sans connexion à la BDD. J'utilise vraiment un truc tout bête quoi, je complète un formulaire que j'envoie sur une page de résultat, et sur cette page de résultat, je récupère les $_POST du formulaire pour pouvoir les afficher, le truc le plus simple qu'il soit. Je ne parviens pas à débusquer mon erreur.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    un peu d'auto-promo :


    N.B. Essaie un <?php unset($_POST); ?> avant le formulaire.

  7. #7
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 62
    Points
    62
    Par défaut
    Et si la solution unset() ne marche toujours pas, redemarre ton ordinateur voir peut etre une erreur d'adressage par le SE ...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    @jreaux62 : <?php unset($_POST); ?> ne change rien

    @MAPOUKA : le redémarrage a été fait déjà, le cache nickel, cela ne change rien

    D'autres idées ?

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu renommes ton script formulaire ?
    Si tu refais un fichier de formulaire neuf ?

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Bon faut sortir l'artillerie lourde : sous Firefox, installe le module Tamper Data, rappelle ton formulaire et bloque la soumission. Vérifie que l'envoie de données fait par le formulaire correspond à ce qui a été saisi.
    Une fois ceci vérifié, tu sauras que le problème ne vient pas du côté du code du formulaire ou de sa soumission.

    Il ne te restera plus qu'à tracer pas à pas le cheminement de ta requête et voir où le poisson se noie.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Si tu renommes ton script formulaire ?
    Si tu refais un fichier de formulaire neuf ?
    Oui je l'ai fait sabotage, mais sans succès, dingue...!


    installe le module Tamper Data, rappelle ton formulaire et bloque la soumission. Vérifie que l'envoie de données fait par le formulaire correspond à ce qui a été saisi.
    Ce que je saisie dans le formulaire est bien exact à ce que m'affiche Tamper Data. Donc ? Cela veut-il dire que mon formulaire envoie la bonne info mais que c'est ma page de résultat qui dysfonctionne ?

    Allez, courage les garçons, ne me lâchez pas maintenant

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ok, continuons.
    En première ligne du script appelé à la soumission, tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var_dump($_POST);
    exit;
    Tu exécutes et tu vérifies.
    Si les données affichées correspondent à ce qui a été saisi, c'est que c'est ton code PHP qui à un moment modifie les valeurs récupérées.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    oh punaise... si je vous le dis, vous mourrez d'envie de me tordre le coup !... glups...

    Mon formulaire et ma page de résultat étaient sains. Mais il faut savoir que sur la droite du site, il y a dans ma zone "aside", le résumé du dernier article publié qui y est rappelé depuis la BDD.

    Donc, lorsque j'envoyais un nouveau résumé depuis le formulaire, je le récupérais bien au tout début de la page de résultats. Mais entre le moment où je récupérais $resume = $_POST["resume"]; et le moment où je voulais utiliser cette variable, il y avait entre temps, le dernier article publié avec une même variable $resume...

    Alors pour ma zone "aside", j'ai renommé $resume en $resume2 et le problème s'est réglé

    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
    <?php
    include("connexion_sql.php");
    $req = $bdd->query('SELECT titre, soustitre, datepublication, resume, timestamp, 
    	DATE_FORMAT(datepublication, "%d/%m/%Y") AS datepublication, 
    	DATE_FORMAT(timestamp, GET_FORMAT(TIMESTAMP,"INTERNAL")) AS timestamp 
    	FROM table_marie
    	ORDER BY timestamp DESC
    	LIMIT 1') 
    or die(print_r($bdd->errorInfo()));
    while ($donnees = $req->fetch()) {
    	echo '<header>
    	<h1>' .stripslashes($donnees['titre']). '</h1>
    	<h2>' .stripslashes($donnees['soustitre']). '</h2>
    	<header>';
    	$resume2 = bbcode(str_replace('<br/>', "\n",$donnees["resume"]));
    	echo'<p>' .stripslashes($resume2). '</p>
    	<footer><a href="article.php?titre=' .stripslashes($donnees["titre"]). '" title="Lire le détail de l\'article">Lire la suite...</a></footer>';
    }
    $req->closeCursor();
    ?>
    voilà ! Bon en même temps, il y avait trop longtemps que je n'étais pas venue vous embêter hein ? Il fallait absolument que je me re-manifeste !

    Ok, mon fils a manqué de m'étrangler pour ce coup-là ; je suis bonne pour une fournée de cookies pour le calmer

    Sérieusement, merci beaucoup d'avoir répondu "présent".

    A bientôt Marie

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

Discussions similaires

  1. Parcours d'un fichier et insertion dans une base de données !
    Par condor_01 dans le forum Général Java
    Réponses: 2
    Dernier message: 24/04/2008, 10h24
  2. [paradox7] Problème d'insertion dans la base de données
    Par mouna201 dans le forum Bases de données
    Réponses: 4
    Dernier message: 01/02/2006, 10h47
  3. problème d'insertion dans une base de données
    Par belmansour tidjani dans le forum JDBC
    Réponses: 7
    Dernier message: 18/01/2006, 23h13
  4. [Hibernate] problème d'insertion dans la base de données
    Par Willy7901 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 18/08/2005, 14h19
  5. Probleme d'insertion dans la base de données
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 11/06/2004, 17h21

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