Partage
  • Partager sur Facebook
  • Partager sur Twitter

[PHP & MySql] Problème de lecture/envois a une bdd

Sujet résolu
    20 mars 2019 à 11:08:58

    Voici mon problème

    <?php 
     try 
    {    // connection à la base de données 
    	// On se connecte à MySQL 
    	$bdd = new PDO('mysql:host=172.16.0.11;dbname=tsti2d1', 'root', 'root'); 
    } 
    catch(Exception $e) 
    { 
            die('Erreur : '.$e->getMessage());  // En cas d'erreur, on affiche un message et on arrête tout 
    } 
    	 $id = intval($_GET['id']);
    	 $eau_prise = $_GET['eau_prise'];
    
    $insert=$bdd->prepare('INSERT INTO flowfontainev2(id,nom,prenom,eau_prise) VALUES(:id, :nom, :prenom, :eau_prise)');
    $insert->execute(array(
        'id' => $id,
    	'prenom'=>$reponse = $bdd->query('SELECT prenom FROM flowread WHERE id=\'' . $_GET['id'] . '\''),
    	'nom'=>$reponse = $bdd->query('SELECT nom FROM flowread WHERE id=\'' . $_GET['id'] . '\''),
    	'eau_prise' => $eau_prise
        ));
    ?>

    Et l'erreur est :

     

    ( ! ) Catchable fatal error: Object of class PDOStatement could not be converted to string in C:\wamp64\www\TSTI2D1\Ganderatz\projet\add4.php on line 20

    -
    Edité par FlorianGanderatz1 20 mars 2019 à 11:50:18

    • Partager sur Facebook
    • Partager sur Twitter
      20 mars 2019 à 11:55:36

      Bonjour,

      Pour le nom et prénom dans le execute ça me parais étrange. Je te conseillerais de soit faire la requête avant et de passer par des variables ou soit mettre directement :

      'prenom'=>$bdd->query('SELECT prenom FROM flowread WHERE id=\'' . $_GET['id'] . '\'')

      Regarde dans un premier temps si en mettant des valeurs fixe à Nom et Prénom ça marche :)

      • Partager sur Facebook
      • Partager sur Twitter

      Call me Spaceman

        20 mars 2019 à 12:00:33

        Oui les valeurs fixe fonctionne j'ai donc changé la parti concerné. même erreur :)

        ( ! ) Catchable fatal error: Object of class PDOStatement could not be converted to string in C:\wamp64\www\TSTI2D1\Ganderatz\projet\add4.php on line 20


        <?php 
         try 
        {    // connection à la base de données 
        	// On se connecte à MySQL 
        	$bdd = new PDO('mysql:host=172.16.0.11;dbname=tsti2d1', 'root', 'root'); 
        } 
        catch(Exception $e) 
        { 
                die('Erreur : '.$e->getMessage());  // En cas d'erreur, on affiche un message et on arrête tout 
        } 
        	 $id = $_GET['id'];
        	 $eau_prise = $_GET['eau_prise'];
        
        $insert=$bdd->prepare('INSERT INTO flowfontainev2(id,nom,prenom,eau_prise) VALUES(:id, :nom, :prenom, :eau_prise)');
        $insert->execute(array(
            'id' => $id,
        	'prenom'=>$bdd->query('SELECT prenom FROM flowread WHERE id=\'' . $_GET['id'] . '\''),
        	'nom'=>$bdd->query('SELECT nom FROM flowread WHERE id=\'' . $_GET['id'] . '\''),
        	'eau_prise' => $eau_prise
            ));
        ?>



        -
        Edité par FlorianGanderatz1 20 mars 2019 à 12:08:39

        • Partager sur Facebook
        • Partager sur Twitter
          20 mars 2019 à 12:13:06

          Si tu avais cherché le message d'erreur, tu aurais dû trouver qu'il te manque l'étape de fetch ...

          Il y a des injections SQL via $_GET['id'] sur les non préparées.

          Pourquoi tu ne fais pas une requête SELECT nom, prenom FROM flowread WHERE id=? au lieu de chercher séparément nom puis prénom ?

          -
          Edité par julp 20 mars 2019 à 12:14:55

          • Partager sur Facebook
          • Partager sur Twitter
            20 mars 2019 à 12:29:58

            Bon alors voilà ce que j'ai fais
            <?php 
             try 
            {    // connection à la base de données 
            	// On se connecte à MySQL 
            	$bdd = new PDO('mysql:host=172.16.0.11;dbname=tsti2d1', 'root', 'root'); 
            	$bdd -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } 
            catch(Exception $e) 
            { 
                    die('Erreur : '.$e->getMessage());  // En cas d'erreur, on affiche un message et on arrête tout 
            } 
            	 $id = intval($_GET['id']);
            	 $eau_prise = $_GET['eau_prise'];
             
            $insert=$bdd->prepare('INSERT INTO flowfontainev2(id,nom,prenom,eau_prise) VALUES(:id, :nom, :prenom, :eau_prise)');
            $insert->execute(array(
                'id' => $id,
            	'prenom'=>$req = $bdd->prepare('SELECT prenom FROM flowread WHERE id=?'),
            			  $req->execute(array($_GET['id'])),
            			  $req->fetch(),
            	'nom'=>$req = $bdd->prepare('SELECT nom FROM flowread WHERE id=?'),
            		   $req->execute(array($_GET['id'])),
            		   $req->fetch(),
            	'eau_prise' => $eau_prise
                ));
            ?>
            
            
            Toujours le même résultat

            -
            Edité par FlorianGanderatz1 20 mars 2019 à 12:52:31

            • Partager sur Facebook
            • Partager sur Twitter
              20 mars 2019 à 13:14:36

              Tu te mélange les pinceaux là

              Ce qui serais mieux là c'est de récupérer le nom et le prénom avant.Et de plus en faisant comme ça tu pourras récupérer le nom et le prénom en même temps ;)

              • Partager sur Facebook
              • Partager sur Twitter

              Call me Spaceman

                20 mars 2019 à 13:15:13

                Oubli juste l'idée de mettre ta requête dans ton bind.
                • Partager sur Facebook
                • Partager sur Twitter
                  20 mars 2019 à 13:40:01

                  Clair, c'est vraiment n'importe quoi.

                  On ne va pas passer 3 plombes sur quelque chose qui est pourtant bateau :

                  if (isset($_GET['id'], $_GET['eau_prise'])) { # TOUJOURS (au moins) vérifier que la donnée existe AVANT
                      $stmt = $bdd-&gt;prepare('SELECT nom, prenom FROM flowread WHERE id=?');
                      $stmt-&gt;execute([$_GET['id']]);
                      if ($row = $stmt-&gt;fetch()) {
                          $insert=$bdd-&gt;prepare('INSERT INTO flowfontainev2(id,nom,prenom,eau_prise) VALUES(:id, :nom, :prenom, :eau_prise)');
                          $insert-&gt;execute([
                              'id' =&gt; $_GET['id'],
                              'prenom'=&gt; $row['prenom'],
                              'nom'=&gt; $row['nom'],
                              'eau_prise' =&gt; $_GET['eau_prise'],
                          ]);
                      } else {
                          // erreur : l'id ne correspond à rien
                      }
                  } else {
                      // erreur paramètre(s) attendu(s) manquant(s)
                  }
                  

                  Autre méthode, un INSERT ... SELECT :

                  if (isset($_GET['id'], $_GET['eau_prise'])) { # TOUJOURS (au moins) vérifier que la donnée existe AVANT
                      $insert=$bdd-&gt;prepare('INSERT INTO flowfontainev2(id, nom, prenom, eau_prise) SELECT id, nom, prenom, :eau_prise FROM flowread WHERE id = :id');
                      $insert-&gt;execute([
                          'id' =&gt; $_GET['id'],
                          'eau_prise' =&gt; $_GET['eau_prise'],
                      ]);
                      if ($insert-&gt;rowCount()) {
                          // ok
                      } else {
                          // erreur, normalement à cause de l'id qui ne correspondait à rien
                      }
                  } else {
                      // erreur paramètre(s) attendu(s) manquant(s)
                  }
                  

                  EDIT : dommage, ils ont réparé la CSS mais toujours pas le markdown, on va sur 2 ans bientôt pourtant ...

                  -
                  Edité par julp 20 mars 2019 à 13:44:59

                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 mars 2019 à 14:15:56

                    <?php 
                     try 
                    {    // connection à la base de données 
                    	// On se connecte à MySQL 
                    	$bdd = new PDO('mysql:host=172.16.0.11;dbname=tsti2d1', 'root', 'root'); 
                    } 
                    catch(Exception $e) 
                    { 
                            die('Erreur : '.$e->getMessage());  // En cas d'erreur, on affiche un message et on arrête tout 
                    } 
                    if (isset($_GET['id'], $_GET['eau_prise'])) { # TOUJOURS (au moins) vérifier que la donnée existe AVANT
                        $stmt = $bdd-&gt;prepare('SELECT nom, prenom FROM flowread WHERE id=?');
                        $stmt-&gt;execute([$_GET['id']]);
                        if ($row = $stmt-&gt;fetch()) {
                            $insert=$bdd-&gt;prepare('INSERT INTO flowfontainev2(id,nom,prenom,eau_prise) VALUES(:id, :nom, :prenom, :eau_prise)');
                            $insert-&gt;execute([
                                'id' =&gt; $_GET['id'],
                                'prenom'=&gt; $row['prenom'],
                                'nom'=&gt; $row['nom'],
                                'eau_prise' =&gt; $_GET['eau_prise'],
                            ]);
                        } else {
                            // erreur : l'id ne correspond à rien
                        }
                    } else {
                        // erreur paramètre(s) attendu(s) manquant(s)
                    }

                    J'ai donc repris votre solution mais soit je n'y comprends rien soit c'est bourrer d'erreur... :/

                    ( ! ) Parse error: syntax error, unexpected '&' in C:\wamp64\www\TSTI2D1\Ganderatz\projet\add5.php on line 12

                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 mars 2019 à 14:18:04

                      -&gt; deviennent ->

                      et les =&gt; pareil deviennent =>

                      C'est un soucis de l'editeur markdown de OCR (qui est de la merde faut l'avouer)

                      -
                      Edité par quenti77 26 mars 2019 à 14:18:31

                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 mars 2019 à 16:16:25

                        Ahhhh merci beaucoup ! Enfin !

                        • Partager sur Facebook
                        • Partager sur Twitter

                        [PHP & MySql] Problème de lecture/envois a 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