Partage
  • Partager sur Facebook
  • Partager sur Twitter

Update d'un text dans une BDD

Sujet résolu
    28 avril 2015 à 15:17:47

    Boujour,

    Après plusieurs heures de prises de tête,  j'ai résolu plusieurs incompréhensions que j'avais sur mon problème mais celle que je vais vous exposer me pose un gros "?" dans ma tête

    Je cherche a faire un UPDATE d'un texte présent dans une page web via un panel admin :

    La marche a suivre est la suivante : Sélection de la page

    Une fois sélectionner il y a un formulaire, comprenant ceci

    <?php
    $requete = "SELECT contenu FROM textpage WHERE id=1";
    $resultat = $bdd->query($requete);
    $donnees = $resultat->fetch();
    
    ?>
    
    <form method="post" action="../../Scripts/modifText.php">
    		
    		<input type="hidden" value="<?php echo utf8_encode($donnees['contenu']) ?>" id="current" name="current">
    	
    	
    	<textarea name="future" rows="10" cols="45" ><?php echo utf8_encode($donnees['contenu']) ?> </textarea>
    	  <input type="submit" id="submit" value="Valider" >
    	    
    		   </form>


    Mon scripts permettant de faire l'UPDATE sur ma base de données est le suivant

    <meta charset = "utf-8">
    <?php
    include('loginBDD.php');
    
    $Titre = 'Administration';
    
    $actuel = $_POST['current'];
    echo $actuel;
    
    echo '<br>';
    $nouveauText = $_POST['future'];
    
    echo $nouveauText;
    
    	
    $resultat = $bdd->query("SELECT id FROM textpage WHERE contenu= '$actuel'");
    $reponse = $resultat->fetch();
    
    echo var_dump($reponse);
    
    
    if ($reponse != null)
    {
          session_start();
    	
    
    
    
            if( $nouveauText == $actuel)
    		{
    			
    					echo 'A quoi bon mettre a jour un texte identique ?';
    		echo'<a href="../../SFD/Administration/panelAdmin.php";>Cliquez ici pour être redirigé</a>';
    			
    
    }
    	else{
    		
    
    		
    		echo' </br>';
    		
    	  $updateText= $bdd->prepare("UPDATE textpage SET contenu ='$nouveauText' WHERE contenu= '$actuel'"); 
           $exeText = $updateText->execute();
    		echo 'Le texte a été modifier avec succès';
    		echo'<a href="../../SFD/Administration/panelAdmin.php";>Cliquez ici pour être redirigé</a>';
    		
    	}
    }
    	else{
    
    		echo ' Impossible de modifier le texte !';
    	}
    
    
    
    
    ?>

    Pour moi, mon code est correct, mais le var_dump($reponse) me signale " boolean false" donc il passe dans le dernier else et le texte ne se modifie pas.

    Autre erreur : Quand je change la requete d'un scripts, admettons que je rentre

    $resultat = $bdd->query("SELECT id FROM textpage WHERE id= '1'");

    Effectivement il passe dans le second if et me signale que l'update a été fait mais il n'en est rien.

    J'en ai donc conclu que l'erreur venait des variables : $actuel et $nouveauText qui n'arrive pas prendre leur place dans les requêtes.

    Pouvez-vous m'aider ? Ai-je fait quelque chose qu'il ne fallait pas ?

    Merci de l’intérêt que vous portez a mon problème !

    Cordialement,

    Seehaudeu



    • Partager sur Facebook
    • Partager sur Twitter
      28 avril 2015 à 15:23:02

      Essaie ceci :

      $resultat = $bdd->query('SELECT id FROM textpage WHERE contenu= '.$actuel.'');
      $updateText= $bdd->prepare('UPDATE textpage SET contenu ='.$nouveauText.' WHERE contenu= '.$actuel.'');



      • Partager sur Facebook
      • Partager sur Twitter

      -=Sans Audace, Pas De Gloire=-

        28 avril 2015 à 15:31:45

        Merci de ta réponse DmS

        Maintenant j'ai une erreur : 

        Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\SFD\Scripts\modifText.php on line 23


        J'ai du mal a cerner les erreur  du fetch() et c'est l'erreur qui me pose le plus de problème si vous pouvez m'aiguillez un peu :x

        Edit : Apres une lecture si  j'ai compris que cette erreur est du a que ma variable $reponse ne renvoi pas d'objet PDO

        -
        Edité par Seehaudeu 28 avril 2015 à 15:40:30

        • Partager sur Facebook
        • Partager sur Twitter
          28 avril 2015 à 15:49:17

          Tu as testé si la connexion à la base de donnée fonctionnait bien avec ton (include loginBDD.php) ?

          • Partager sur Facebook
          • Partager sur Twitter

          -=Sans Audace, Pas De Gloire=-

            28 avril 2015 à 15:54:04

            Oui oui, cela marche parfaitement, mes autres scripts style Connexion/Deconnexion et l'affichage du texte sur les pages fonctionnent c'est pour ça je suis perdu sur cette erreur :/
            • Partager sur Facebook
            • Partager sur Twitter
              28 avril 2015 à 16:06:46

              Tu as déjà essayé en refermant la connexion à la requête après chaque requête (je vois que les requêtes sont appelées avec le même nom)

              $reponse->closeCursor();

              Je ne connais pas l'arborescence des répertoires, mais on peut chercher de ce côté là.

              Ou change l'appelle de la requête dans ton query (change $resultat et $reponse de nom).

              Maintenant, je ne suis pas un crac en php :) mais bon ca me permet de chercher en même temps.

              -
              Edité par DmS 28 avril 2015 à 16:13:07

              • Partager sur Facebook
              • Partager sur Twitter

              -=Sans Audace, Pas De Gloire=-

                28 avril 2015 à 16:22:41

                J'ai essayé les

                $donnees->closeCursor();

                et ça me met la même erreur soit :

                 Fatal error: Call to a member function closeCursor() on a non-object in C:\wamp\www\SFD\Scripts\modifText.php on line 24

                J'ai aussi changer mes noms de variables et elles sont toutes différentes et va var_dump est toujours égale a false :(

                Merci de m'aider en tout cas, je ne suis pas expert en php, j'ai commencé récemment et certaine subtilité m'échappe encore :/

                -
                Edité par Seehaudeu 28 avril 2015 à 16:23:28

                • Partager sur Facebook
                • Partager sur Twitter
                  28 avril 2015 à 16:39:48

                  Dans ton formulaire, tu n'arrives pas à récupérer la valeur non plus je suppose ?

                  Essaie ceci dans ton formulaire et regarde si ca fonctionne:

                  <?php
                  $resultat = $bdd->query('SELECT * FROM textpage WHERE id=1');
                  $donnees = $resultat->fetch();
                  echo ' '.htmlspecialchars($donnees['id']).' ';
                  ?>

                  Je suppose que ca te renverra la valeur : 1

                  Remplace id par contenu et tu devrais avoir la valeur du contenu de l'id 1

                  -
                  Edité par DmS 28 avril 2015 à 16:41:57

                  • Partager sur Facebook
                  • Partager sur Twitter

                  -=Sans Audace, Pas De Gloire=-

                    28 avril 2015 à 16:43:12

                    Dans le formulaire ,j'arrive a afficher ce qu'il y a dans la BDD c'est pour ça que je comprend encore moins pourquoi ça marche une fois et une autre non

                    -
                    Edité par Seehaudeu 28 avril 2015 à 16:44:03

                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 avril 2015 à 16:47:10

                      Salutations,

                      Peux tu montrer ton fichier loginBDD.php ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Désolé, je ne réponds pas aux questions techniques posées par MP...
                        28 avril 2015 à 16:47:50

                        Pas de soucis le voici :

                        <?php
                        	try{
                        		$bdd = new PDO('mysql:host=localhost;dbname=SFD', 'root', '');
                        		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                        	}
                        	catch(Exception $e){
                            	echo 'Echec de la connexion à la base de données <br>';
                        
                            	echo 'Erreur : '.$e->getMessage().'<br />';
                            	echo 'N° : '.$e->getCode();
                            	exit();
                        	}
                        ?>



                        -
                        Edité par Seehaudeu 28 avril 2015 à 16:48:18

                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 avril 2015 à 17:07:03

                          Essaie en transformant

                          $resultat = $bdd->query("SELECT id FROM textpage WHERE contenu= '$actuel'");
                          $reponse = $resultat->fetch();

                          en

                          try{
                              $resultat = $bdd->prepare("SELECT id FROM textpage WHERE contenu= :contenu");
                              $resultat->execute(array(':contenu'=>$actuel));
                              $reponse = $resultat->fetch();
                          }
                          catch(Exception $e){
                          	echo $e->getMessage();
                          }



                          • Partager sur Facebook
                          • Partager sur Twitter
                          Désolé, je ne réponds pas aux questions techniques posées par MP...
                            28 avril 2015 à 17:25:00

                            Toujours la même erreur, je vous copie colle ce que j’obtiens

                            Étude et dimensionnement de chauffage central, puissance chaudière, puissance des radiateurs, radiateur et quantitatif circulation d eau...
                            test test

                            <small>boolean</small>
                             false
                            

                            Impossible de modifier le texte !

                            Pourtant c'est la même requête que celle utilisé pour pre remplir la text area mais je sais pas pourquoi avec la variable $actuel ça ne fonctionne pas, je suis sur cette erreur depuis ce matin en train de modifier et re modifier pour trouver une solution

                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 avril 2015 à 9:26:49

                              J'ai trouvé d'où vient l'erreur après une série de test .

                              Le problème étant que les caractère spéciaux ( accent aigue etc ) dans le formulaire, ne sont pas encodé en utf-8 ou n'apparaissent pas correctement donc a partir du moment où j'UPDATE ma BDD avec un texte comprenant ne serai-ce qu'un seul caract spéciaux, il est par la suite impossible a modifié. Sinon je peux modifié autant de fois que je veux un texte sans caract spéciaux.

                              Je vais maintenant essayer de comprendre pourquoi le formulaire ne prend pas en compte les caract spéciaux.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                29 avril 2015 à 9:28:59

                                Comment fais tu tes requêtes du coup ? Utilises tu les requêtes préparées ou passes-tu par une concaténation ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Désolé, je ne réponds pas aux questions techniques posées par MP...
                                  29 avril 2015 à 9:34:43

                                  Problème résolu : Il fallait qu'il n'y ai pas de caract spéciaux au tout début dans la base de données car le formulaire les interprétais mal, une fois "nu" il suffit de les modifier grâce au script et les accents se mettent sans problème.

                                  Merci a tout ceux qu'il m'ont aidé pour résoudre ce problème !

                                  Bonne continuation a tous !

                                  Cordialement, Seehaudeu

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    29 avril 2015 à 9:40:00

                                    Je vous poste mon nouveau code pour ceux qui ont un soucis semblable.

                                    En résumé :

                                    Remplacer

                                    $resultat = $bdd->query("SELECT id FROM textpage WHERE contenu= '$actuel'");
                                    $reponse = $resultat->fetch();
                                     

                                    par

                                    try{
                                        $result = $bdd->prepare("SELECT id FROM textpage WHERE contenu= :contenu");
                                        $result->execute(array(':contenu'=>$actuel));
                                        $response = $result->fetch();
                                    }
                                    catch(Exception $e){
                                        echo $e->getMessage();
                                    }

                                    La requête UPDATE :

                                    	 $updateText= $bdd->prepare("UPDATE textpage SET contenu ='$nouveauText' WHERE contenu='$actuel'");
                                           $exeText = $updateText->execute();

                                    Et  pour le formulaire :

                                    Remplacer

                                      <input type="hidden" value="<?php echo utf8_encode($donnees['contenu']) ?>" id="current" name="current">
                                         
                                         
                                        <textarea name="future" rows="10" cols="45" ><?php echo utf8_encode($donnees['contenu']) ?> </textarea>

                                    par

                                    		
                                    		<input type="hidden" value="<?php echo $donnees['contenu'] ?>" id="current" name="current">
                                    	
                                    	
                                    	<textarea name="future" rows="10" cols="45" ><?php echo $donnees['contenu'] ?> </textarea>

                                    -Ne pas avoir de texte a caractère spéciaux rentré la première fois dans la BDD

                                    Voila :)




                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      29 avril 2015 à 9:47:00

                                      Deux petites remarques... ;)

                                      $updateText= $bdd->prepare("UPDATE textpage SET contenu ='$nouveauText' WHERE contenu='$actuel'");
                                        $exeText = $updateText->execute();

                                      Pourquoi utiliser une concaténation et non une requête préparée, comme pour ton SELECT ?

                                      Pourquoi ne pas avoir utilisé un bloc try/catch ?



                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Désolé, je ne réponds pas aux questions techniques posées par MP...
                                        29 avril 2015 à 9:59:02

                                        J'ai commencé il n'y a pas longtemps et j'arrive pas encore a trouvé la nuance entre ces deux possibilités et instinctivement je vais vers la méthode que j'ai apprise quand j'ai commencé.

                                        ça vous dérangerai de m’expliquer pourquoi utilisé une façon, et pas une autre, les avantages etc ? :)

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          29 avril 2015 à 15:39:05

                                          Après de nombreux problème, j'ai effectué une requête préparée et cela fonctionne parfaitement, la concaténation faisait sans doute planter l'envoie de données.

                                          Merci Pierre-Yves Galland

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            29 avril 2015 à 15:58:58

                                            De rien ... ;)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Désolé, je ne réponds pas aux questions techniques posées par MP...

                                            Update d'un text dans une 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