Probleme PHP

Fermé
Heew - Modifié par jordane45 le 18/02/2015 à 18:52
 Utilisateur anonyme - 19 févr. 2015 à 09:11
Bonjour,


J'ai une erreur pouvez vous m'aider ?

Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\Facemash-master\index.php on line 32

<?php
try
{
 $db = new PDO('mysql:host=localhost;dbname=facemash', 'root', 'azerty');
}
catch (Exception $error)
{
 die ('Erreur :' . $error->getMessage());
}
?>
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8" />
  <title>NoelMash</title>
  <link rel="stylesheet" href="style.css" />
 </head>

 <body>
  <div class="header">
   <h1>NOELMASH</h1>
  </div>

  <div class="main_wrapper">
   <p>
    <strong>Ils sont moderateurs.</strong>
   </p>
   <h3>Qui est le meilleur? Clic pour Choisir.</h3>

   <?php
    $maxId = $db->query('SELECT MAX(id) AS id_max FROM photos');
    $idMax = $maxId->fetch();

    $randomId1 = rand(1, 42);

    $photo1Query = $db->prepare('SELECT * FROM photos WHERE id = ?');
    $photo1Query->execute(array($randomId1));

    $photo1 = $photo1Query->fetch();


    $randomId2 = rand(1, 42);

    $photo2Query = $db->prepare('SELECT * FROM photos WHERE id = ?');
    $photo2Query->execute(array($randomId2));

    $photo2 = $photo2Query->fetch();

    $nbrPhoto = 1;
   ?>
    <div id="photoRandom">
     <a href="vote.php?id=<?php echo $photo1['id'] ?>&photo=first"><img src="images/<?php echo $photo1['photo'] ?>" /></a>
     <p id="or">OR</p>
     <a href="vote.php?id=<?php echo $photo2['id'] ?>&photo=second"><img src="images/<?php echo $photo2['photo'] ?>" /></a>
    </div>
  </div>

 </body>
</htmL>



EDIT : AJOUT DES BALISES DE CODE
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
A voir également:

2 réponses

jordane45 Messages postés 38359 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 décembre 2024 4 720
Modifié par jordane45 le 19/02/2015 à 01:31
Bonjour,

L'erreur se situerait donc ici :
    $maxId = $db->query('SELECT MAX(id) AS id_max FROM photos');
    $idMax = $maxId->fetch();


Essayes ceci :
     $sql="SELECT MAX(id) AS id_max
             FROM photos";
     $maxId = $db->prepare($sql);
     $db->execute();
     $idMax = $maxId->fetch(PDO::FETCH_BOTH);
     print_r($idMax );


EDIT.

Cordialement,
Jordane
0
Maintenant :
Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\Facemash-master\index.php on line 32
0
Utilisateur anonyme
18 févr. 2015 à 22:59
Bonsoir

Le 'Prepare' sans marqueurs n'apporte absolument rien (sauf ré-utilisation de la requête) par rapport au query.
Les apostrophes à l'intérieur des doubles quotes dans
$sql="'SELECT MAX(id) AS id_max FROM photos'";
sont une aberration.
Enfin, le message "Call to a member function fetch() on a non-object" signifie que c'est la requête et non pas le fetch qui a mal marché. Donc inutile d'essayer de changer le style de fetch, puisque le fetch n'est même pas tenté.

essaye plutôt :
    $maxId = $db->query('SELECT MAX(id) AS id_max FROM photos');
    if ($maxId===false) { print_r ($maxId->errorInfo()); die);
0
non toujours pas enfaite c'est un genre de facemash le site
0
jordane45 Messages postés 38359 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 décembre 2024 4 720
19 févr. 2015 à 01:41
@le père
Les apostrophes à l'intérieur des doubles quotes dans [...] sont une aberration.

Non.. pas une aberration mais une erreur de copier/coller.

Le 'Prepare' sans marqueurs n'apporte absolument rien (sauf ré-utilisation de la requête) par rapport au query.

C'est uniquement une habitude que j'ai prise ... et ça ne gène en rien le fonctionnement...
la preuve dixit le site de php :

Prépare une requête SQL à être exécutée par la méthode PDOStatement::execute(). La requête SQL peut contenir zéro ou plusieurs noms (:nom) ou marqueurs (?) pour lesquels les valeurs réelles seront substituées lorsque la requête sera exécutée.


c'est la requête [...] qui a mal marchée

Oui.


@Heew
non toujours pas enfaite c'est un genre de facemash le site

Quel est le rapport ?
As tu testé la proposition de le_père ?
N'y a t'il aucune information qui s'affiche sur ta page ?

Et ... as tu testé ta requête en direct dans la BDD ...???
Es-tu sûr que le nom de la Table et des Champs que tu y utilises sont bien orthographiés de la même manière ?
0
Utilisateur anonyme > jordane45 Messages postés 38359 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 décembre 2024
19 févr. 2015 à 09:11
Bonjour Jordane

Non.. pas une aberration mais une erreur de copier/colle
Une erreur de copier-coller, soit, mais dont le résultat est quand même aberrant. Mon message était plutôt destiné à Heew, pour l'inviter à garder un oeil critique, les helpés ayant tendance à copier-coller sans regarder ce qu'on leur propose.
C'est uniquement une habitude que j'ai prise ... et ça ne gène en rien le fonctionnement Bien sûr que ça ne gêne en rien, ai-je dit que ça gênait le fonctionnement ?
Ce qui est gênant dans ce genre de conseil, c'est que ça apporte des modifications au code du demandeur sur des points où il n'y avait aucun problème : Heew maîtrisant probablement très mal le sujet va certainement croire que son code était incorrect alors qu'il ne l'était pas. Personnellement, j'ai toujours considéré qu'on ne doit corriger dans les codes qui nous sont proposés que ce qui a réellement besoin d'être corrigé et modifier l'existant le moins possible. Ce qui n'empêche pas de proposer par ailleurs de bons conseils, mais j'essaye de toujours faire une distinction très claire entre la correction du problème et la suggestion de meilleures méthodes.
0