Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1856 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Call to a member function execute() on boolean

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Call to a member function execute() on boolean

n°2309954
iamlouky
Posté le 16-01-2018 à 04:32:27  profilanswer
 

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())

mood
Publicité
Posté le 16-01-2018 à 04:32:27  profilanswer
 

n°2309973
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-01-2018 à 12:27:12  profilanswer
 

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)
n°2309983
iamlouky
Posté le 16-01-2018 à 12:52:28  profilanswer
 

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

n°2309984
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-01-2018 à 12:54:46  profilanswer
 

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)
n°2309986
iamlouky
Posté le 16-01-2018 à 13:08:12  profilanswer
 

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

n°2309988
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-01-2018 à 13:29:29  profilanswer
 

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)
n°2309998
iamlouky
Posté le 16-01-2018 à 14:15:00  profilanswer
 

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
n°2309999
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-01-2018 à 14:34:45  profilanswer
 

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)
n°2310001
iamlouky
Posté le 16-01-2018 à 14:52:25  profilanswer
 

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

n°2310002
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-01-2018 à 14:58:20  profilanswer
 

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


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 16-01-2018 à 14:58:20  profilanswer
 

n°2310003
iamlouky
Posté le 16-01-2018 à 15:03:31  profilanswer
 

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

n°2310005
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-01-2018 à 15:12:08  profilanswer
 

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


---------------
J'ai un string dans l'array (Paris Hilton)
n°2310006
iamlouky
Posté le 16-01-2018 à 15:19:58  profilanswer
 


Oui 'username' est de type string

n°2310007
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-01-2018 à 15:22:44  profilanswer
 

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


---------------
J'ai un string dans l'array (Paris Hilton)
n°2310010
iamlouky
Posté le 16-01-2018 à 15:31:21  profilanswer
 

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

n°2310011
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-01-2018 à 15:45:40  profilanswer
 

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)
n°2310014
iamlouky
Posté le 16-01-2018 à 15:57:11  profilanswer
 

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?

n°2310018
Ydalb
In Crêpes n' Cidre I Trust!
Posté le 16-01-2018 à 16:20:06  profilanswer
 

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
n°2316995
jeanber
Qui peut le plus, peut le moin
Posté le 15-06-2018 à 16:52:37  profilanswer
 

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
n°2317174
the_bigboo
Posté le 20-06-2018 à 22:55:55  profilanswer
 

@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
n°2317175
MaybeEijOr​Not
but someone at least
Posté le 20-06-2018 à 23:14:01  profilanswer
 

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.
n°2317176
the_bigboo
Posté le 20-06-2018 à 23:20:41  profilanswer
 

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.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Call to a member function execute() on boolean

 

Sujets relatifs
Access une macro ne s'exécute pasno matching function for call to 'Point::affiche(Point&)'
call vba apres fusion d'un document wordFunction en Jquery
How to overwrite or inhibit F10 key function on fvmw over X from LinuxGénération impossible de PDF sur call Ajax.
Script CMD qui n'execute pas le logiciel desiré[Résolu][javascript/php] Executé sur pc mais pas sur mobile
Memoriser des variables d'une function à l'autre 
Plus de sujets relatifs à : Call to a member function execute() on boolean


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR