Call to a member function execute() on boolean

Call to a member function execute() on boolean - PHP - Programmation

Marsh Posté le 16-01-2018 à 04:32:27    

Bonjour,
 
Je suis entrain de mettre unen ligne, et il y a ce problème qui se pose :
 
Fatal error: Uncaught Error: Call to a member function execute() on boolean in /storage/ssd3/068/4295068/public_html/authentification/transfert4.php:46 Stack trace: #0 {main} thrown in /storage/ssd3/068/4295068/public_html/authentification/transfert4.php on line 46
 
Voici mon code :
 

Code :
  1. <?php
  2. // à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION
  3. session_start();
  4. include("config.php" );
  5. $error = false;
  6. $adminpageError = "";
  7. $code4Error = "";
  8. $code4noncorrespondError = "";
  9. if (isset($_SESSION['username']) && $_SESSION['username'] =="admin" ) {
  10.   $adminpageError = "<p><a href='inscription.php'>Admin page </a></p>";
  11. }
  12. if(isset($_POST['valider'])){
  13.   if (empty($_POST['code'])) {
  14.     $error = true;
  15.     $codetransfert4Error = "Please enter the transfer code .";
  16.   } else {
  17.     $code4 = htmlentities($_POST['code4'], ENT_QUOTES, "ISO-8859-1" );
  18.     $mysqli = mysqli_connect("localhost", "id4295068_roomadmin", "", "id4295068_projet" );
  19.     if (!$mysqli) {
  20.       echo "Please check your information and try again";
  21.     } else {
  22.       $query = "SELECT * FROM `client6` WHERE code4='".$code4."'";
  23.       $result = mysqli_query($mysqli,$query) or die(mysqli_error());
  24.       $rows = mysqli_num_rows($result);
  25.       if($rows==1) {
  26.         header("location: load4.php" );
  27.       } else {
  28.         $query = "SELECT * FROM `client6` WHERE  code4='".$code4."'";
  29.         $result = mysqli_query($mysqli,$query) or die(mysqli_error());
  30.         $rows = mysqli_num_rows($result);
  31.         if($rows==0) {
  32.           header("location: transfert4non.php" );
  33.         }
  34.       }
  35.     }
  36.   }
  37. }
  38. // Si tout va bien, on peut continuer
  39. // On récupère tout le contenu de la table client6
  40. $req = $mysqli->prepare('SELECT * FROM `client6` WHERE username = :username');
  41. $req->execute(array('username' => $_SESSION['username']));
  42. // On affiche chaque entrée une à une
  43. while ($donnees = $req->fetch())

Reply

Marsh Posté le 16-01-2018 à 04:32:27   

Reply

Marsh Posté le 16-01-2018 à 12:27:12    

il te manque l'appel à la fonction $req->bind_param() avant l'appel de ton $req->execute

Message cité 1 fois
Message édité par Harkonnen le 16-01-2018 à 12:27:41

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-01-2018 à 12:52:28    

Harkonnen a écrit :

il te manque l'appel à la fonction $req->bind_param() avant l'appel de ton $req->execute


 
Quand j'utilise $req->bind_param(), je vois ça :
 
Fatal error: Call to undefined method PDOStatement::bind_param() in C:\wamp\www\On line\agency\authentification\transfert4.php on line 46

Reply

Marsh Posté le 16-01-2018 à 12:54:46    

bind_param() prend des paramètres hein, si tu ne lui donnes pas les paramètres à binder, faut pas t'étonner que ça ne marche pas !
http://php.net/manual/fr/pdostatement.bindparam.php


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-01-2018 à 13:08:12    

On peut utiliser la fonction à la suite : while ($donnees = $req->fetch()) ??

Reply

Marsh Posté le 16-01-2018 à 13:29:29    

Je comprends pas ce que tu veux dire.

 

Tu utilises des prepared statements, c'est très bien car ça évite l'injection SQL. Seulement, il faut bien dire à mysql de quel type sont les paramètres de tes requêtes. C'est le rôle de bind_param().

 

Ainsi, dans ton code, en admettant que 'username' soit un type string, tu dois executer bind_param() de la manière suivante :

 
Code :
  1. $username = $_SESSION['username'];
  2. $req = $mysqli->prepare('SELECT * FROM `client6` WHERE username = ?');
  3. $req->bind_param('s', $username);
  4. $req->execute();
  5.  
  6. while ($req->fetch()) {
  7. ...
  8. }


Message édité par Harkonnen le 16-01-2018 à 15:25:14

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-01-2018 à 14:15:00    

Voilà tout le code, au fait j'aimerais que dès que la page s'affiche que les variables nom prénom adresse ville région, soient affiché en même temps :

Code :
  1. <?php
  2.     // à mettre tout en haut du fichier .php, cette fonction propre à PHP servira à maintenir la $_SESSION
  3.     session_start();
  4.     include("config.php" );
  5.     $error = false;
  6.     $adminpageError = "";
  7.     $code4Error = "";
  8.     $code4noncorrespondError = "";
  9.     if (isset($_SESSION['username']) && $_SESSION['username'] =="admin" ) {
  10.       $adminpageError = "<p><a href='inscription.php'>Admin page </a></p>";
  11.     }
  12.     if(isset($_POST['valider'])){
  13.       if (empty($_POST['code'])) {
  14.         $error = true;
  15.         $codetransfert4Error = "Please enter the transfer code .";
  16.       } else {
  17.         $code4 = htmlentities($_POST['code4'], ENT_QUOTES, "ISO-8859-1" );
  18.         $mysqli = mysqli_connect("localhost", "id4295068_roomadmin", "", "id4295068_projet" );
  19.         if (!$mysqli) {
  20.           echo "Please check your information and try again";
  21.         } else {
  22.           $query = "SELECT * FROM `client6` WHERE code4='".$code4."'";
  23.           $result = mysqli_query($mysqli,$query) or die(mysqli_error());
  24.           $rows = mysqli_num_rows($result);
  25.           if($rows==1) {
  26.             header("location: load4.php" );
  27.           } else {
  28.             $query = "SELECT * FROM `client6` WHERE  code4='".$code4."'";
  29.             $result = mysqli_query($mysqli,$query) or die(mysqli_error());
  30.             $rows = mysqli_num_rows($result);
  31.             if($rows==0) {
  32.               header("location: transfert4non.php" );
  33.             }
  34.           }
  35.         }
  36.       }
  37.     }
  38.     // Si tout va bien, on peut continuer
  39.     // On récupère tout le contenu de la table client6
  40.     $req = $mysqli->prepare('SELECT * FROM `client6` WHERE username = :username');
  41.     $req->execute(array('username' => $_SESSION['username']));
  42.     // On affiche chaque entrée une à une
  43.     while ($donnees = $req->fetch())
  44. {
  45. ?>
  46. <!DOCTYPE html>
  47. <html lang="en">
  48. <head>
  49.   <meta charset="utf-8">
  50.   <title></title>
  51.   <meta content="width=device-width, initial-scale=1.0" name="viewport">
  52.   <meta content="" name="keywords">
  53.   <meta content="" name="description">
  54.   <!-- Favicon -->
  55.   <link href="img/favicon.ico" rel="icon">
  56.   <!-- Google Fonts -->
  57.   <link href="https://fonts.googleapis.com/css?family=Raleway:400,500,700|Roboto:400,900" rel="stylesheet">
  58.   <link href='https://fonts.googleapis.com/css?family=Kaushan+Script' rel='stylesheet' type='text/css'>
  59.   <!--Logo onglet-->
  60.   <link rel="shortcut icon" href="img/logo-nav.png" />
  61.   <!-- Bootstrap CSS File -->
  62.   <link href="lib/bootstrap/css/bootstrap.min.css" rel="stylesheet">
  63.   <!-- Libraries CSS Files -->
  64.   <link href="lib/font-awesome/css/font-awesome.min.css" rel="stylesheet">
  65.   <!-- Main Stylesheet File -->
  66.   <link href="csss/style.css" rel="stylesheet">
  67.   <link href="csss/bootstrap.min.css"  rel="stylesheet">
  68. </head>
  69. <div id="google_translate_element"></div>
  70. <body>
  71.   <!-- Page Content
  72.     ================================================== -->
  73.   <!-- Header -->
  74.   <header id="header">
  75.     <div class="container">
  76.       <div id="logo" class="pull-left">
  77.         <a href="index.html"><img src="img/logo-nav.png" alt="" title="" /></a>
  78.         <!-- Uncomment below if you prefer to use a text image -->
  79.         <!--<h1><a href="#hero">Bell</a></h1>-->
  80.       </div>
  81.       <nav id="nav-menu-container">
  82.         <ul class="nav-menu">
  83.           <li><a href="#about">Services</a></li>
  84.           <li><a href="#features">Offres</a></li>
  85.           <li><a href="#portfolio">Conditions</a></li>
  86.           <li><a href="#team">Equipe</a></li>
  87.           <li><a href="#contact">Contact</a></li>
  88.         </ul>
  89.       </nav>
  90.       <!-- #nav-menu-container -->
  91.     </div>
  92.   </header>
  93.   <!-- #header -->
  94.   <!-- About -->
  95. <section class="about" id="about">
  96.     <div class="container">
  97.       <table class="table table-hover"">
  98.         <thead>
  99.           <tr class="table-info1">
  100.             <th>Account owner</th>
  101.             <td><?php echo $donnees['nom'].' '.$donnees['prenom']; ?></td>
  102.           </tr>
  103.           <tr class="table-info1">
  104.             <th>Adress Account</th>
  105.             <td><?php echo $donnees['adresse']; ?></td>
  106.           </tr>
  107.           <tr class="table-info1">
  108.             <th>City on your account</th>
  109.             <td><?php echo $donnees['ville']; ?></td>
  110.           </tr>
  111.           <tr class="table-info1">
  112.             <th>Region on your account</th>
  113.             <td><?php echo $donnees['region']; ?></td>
  114.           </tr>
  115.         </thead>
  116.       </table>
  117.   </section>
  118.   <!-- /About -->
  119.   <!-- Parallax -->
  120.   <?php
  121. }
  122. $req->closeCursor(); // Termine le traitement de la requête
  123. ?>


Message édité par iamlouky le 16-01-2018 à 14:44:10
Reply

Marsh Posté le 16-01-2018 à 14:34:45    

tu as utilisé le code que je t'ai fourni au dessus de ton post ?

 

edit: et donc, d'après ton code, tu créées une page HTML pour chaque user, bravo [:prozac]


Message édité par Harkonnen le 16-01-2018 à 14:36:29

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-01-2018 à 14:52:25    

Oui exactement, veuillez bien m'aider. Dès que je mets le code :
 
Fatal error: Call to undefined method PDOStatement::bind_param() in C:\wamp\www\On line\agency\authentification\transfert4.php on line 42

Reply

Marsh Posté le 16-01-2018 à 14:58:20    

je réitère ma question : as tu lu mon post au dessus du tien ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-01-2018 à 14:58:20   

Reply

Marsh Posté le 16-01-2018 à 15:03:31    

Harkonnen a écrit :

je réitère ma question : as tu lu mon post au dessus du tien ?


Oui je crée une page HTML pour chaque user

Reply

Marsh Posté le 16-01-2018 à 15:12:08    

je parle de ce post : https://forum.hardware.fr/hfr/Progr [...] m#t2309988


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-01-2018 à 15:19:58    


Oui 'username' est de type string

Reply

Marsh Posté le 16-01-2018 à 15:22:44    

... certes...
mais le code que je t'ai posté, l'as tu testé ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-01-2018 à 15:31:21    

Harkonnen a écrit :

... certes...
mais le code que je t'ai posté, l'as tu testé ?


Oui et toujours le meme problème : ( ! ) Fatal error: Call to undefined method PDOStatement::bind_param() in C:\wamp\www\On line\agency\authentification\transfert4.php on line 47

Reply

Marsh Posté le 16-01-2018 à 15:45:40    

je comprends rien à ton truc ! tu utilises quelle API pour te connecter à MySQL ? mysqli ou PDO ?  
tu te connectes avec un mysqli_connect(), et l'erreur te renvoie une méthode manquante sur un objet PDO.  
en plus, ta variable $mysqli est déclarée dans un bloc if, et tu y fais référence après ce bloc, donc elle n'existe plus...
bref, ça sent la config foireuse, et le script recopié n'importe comment


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-01-2018 à 15:57:11    

Harkonnen a écrit :

je comprends rien à ton truc ! tu utilises quelle API pour te connecter à MySQL ? mysqli ou PDO ?  
tu te connectes avec un mysqli_connect(), et l'erreur te renvoie une méthode manquante sur un objet PDO.  
en plus, ta variable $mysqli est déclarée dans un bloc if, et tu y fais référence après ce bloc, donc elle n'existe plus...
bref, ça sent la config foireuse, et le script recopié n'importe comment


 
Alors comment je peux procéder? Quelles sont les étapes à suivre?

Reply

Marsh Posté le 16-01-2018 à 16:20:06    

Un peu de lecture te fera le plus grand bien : https://openclassrooms.com/courses/ [...] -donnees-2

 

:hello:

Message cité 1 fois
Message édité par Ydalb le 16-01-2018 à 16:20:25

---------------
:o
Reply

Marsh Posté le 15-06-2018 à 16:52:37    

Ydalb a écrit :

Un peu de lecture te fera le plus grand bien : https://openclassrooms.com/courses/ [...] -donnees-2
 
:hello:


 
Sympa ce lien, la relecture ne me fera pas de tord non plus, top


Message édité par jeanber le 19-06-2018 à 22:12:21
Reply

Marsh Posté le 20-06-2018 à 22:55:55    

@iamlouky

 

Tu as une erreur fatale parce que la génération de ton statement SQL a échoué. (l'appel à la méthode "prepare" )
Cette méthode de la class "mysqli" retourne FALSE lorsqu'une erreur survient au lieu de ton objet "mysqli_stmt" attendu.

 

http://php.net/manual/fr/mysqli.prepare.php

 

Juste après ton appel à "prepare", rajoute ceci et tu devrais être fixé:

 
Code :
  1. if (false === $req) {
  2.    echo sprintf("Erreur: %s\n", $mysqli->error);
  3. }
 

@Harkonnen PDO et mysqli ont des méthodes communes, "prepare" en est une, mais ici, $mysqli reste un objet mysqli et non un objet PDO.


Message édité par the_bigboo le 20-06-2018 à 23:01:00
Reply

Marsh Posté le 20-06-2018 à 23:14:01    

Non mais il n'y a pas à tourner autour du pot. Iamlouky mélange le style procédurale et le style objet. Et comme dit précédemment, il "instancie" (puisque pour le fait il n'instancie aucun objet) sa variable dans un bloque if et continue de l'utiliser en dehors, ce qui n'a aucun sens.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 20-06-2018 à 23:20:41    

les mix de styles de programmation, ça c'est un autre problème ! :D
Ce genre de chose ne me choque plus.  
 
J'ai juste donné la cause de l'erreur, même si je suis d'accord il y avait d'autres choses à redire pour un code "meilleur".
(session start explicite, espace avant le doctype HTML, pas de contrôle d'erreur sur les variables...)
 
C'est en faisant des conneries qu'on apprend.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed