IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fatal error: Call to a member function fetch() on a non-object in


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Septembre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Septembre 2014
    Messages : 101
    Points : 52
    Points
    52
    Par défaut Fatal error: Call to a member function fetch() on a non-object in
    Bonjour,
    je viens vers vous car je rencontre un problème dans la création de mon forum. Tout fonctionnait à merveille jusqu'à ce que j'essaie d'afficher la date d'écriture du dernier message posté. Depuis, j'ai une erreur qui s'affiche : Fatal error: Call to a member function fetch() on a non-object in...
    Pourriez-vous m'aider svp? merci d'avance.

    Voici mon code, l'erreur apparaît à la fin sur la ligne : while ($donnees = $reponse->fetch())

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    <?php include "css-pages-communes.php"; ?>
    table { width: 830px; height: auto; border: 1px solid black; border-spacing: 0px; border-radius: 10px; margin-left: auto; margin-right: auto; text-align: center;}
    th { border: 1px solid black; padding: 5px; background-color: red;}
    table tbody tr td { border: 1px solid black; padding: 5px;}
    table tbody tr:hover td { background-color: rgb(21, 21, 21);
                             background-color: rgba(21, 21, 21, 0.8);}
    .th1 { border-radius: 10px 0px 0px 0px; width: 5%;}
    .th2 { width: 12%;}
    .th3 { width: 23%;}
    .th4 { border-radius: 0px 10px 0px 0px; width: 60%;}
    .th5 { border-radius: 0px 0px 0px 10px;}
    .th6 { border-radius: 0px 0px 10px 0px;}
    .pair { background-color: red;}
    .impair { background-color: black;}
     
     
    <?php include "aspect-pages-communes.php"; ?>
    <div id="haut">
    <div id="marge">
     
    <h3>Bienvenue sur notre forum de discussion</h3>
    <p>Vous avez des questions nous concernant, n'hésitez pas à vous exprimez dans ce forum.<br>
    N'oubliez pas, vous devez d'abord vous identifiez en créant ou en vous connectant à <a href="mon-compte.php" target=_blank>votre compte Kibéos</a>. 
     
     
    <form action="forum.php" method="post" name="forum">
    <label for="pseudo">Pseudo</label>
    <input type="text" name="pseudo" size="106" maxlength="30"><br>
    <label for="sujet">Sujet</label>
    <input type="text" name="sujet" size="106" maxlength="106"><br>
    <label for="message">Message</label>
    <textarea name="message" rows="4" cols="80" maxlength="300" wrap="hard" placeholder="Exprimez-vous"></textarea><br><br><br>
    <input type="submit" value="Envoyer" name="submit">
    <input type="reset" value="Annuler">
    </form>
     
    </div>
     
    <?php
    // On vérifie que le formulaire vient d'être envoié.
    if (!isset($_POST['submit']))
    {
    }
    // On regarde si nos variables ne sont pas vides.
    elseif ((isset($_POST['submit'])) && (!empty($_POST['pseudo'])) && (!empty($_POST['sujet'])) && (!empty($_POST['message'])))
    {
     
    	// On teste la conformité d'écriture des champs.
    	// Pseudo  
    	$_POST['pseudo'] = htmlspecialchars($_POST['pseudo']);     
    	if (preg_match("#^[a-zA-Z0-9éèàêâùïüëô.-_]{3,30}$#", $_POST['pseudo']))
    	{
    	// Sujet
    	$_POST['sujet'] = htmlspecialchars($_POST['sujet']);   
    	if (preg_match("#^[a-zA-Z0-9éèàêâùïüëô;,.\"\'() _-]{3,106}$#", $_POST['sujet']))
    	{
    	// Message
    	$_POST['message'] = htmlspecialchars($_POST['message']);   
    	if (preg_match("#^[a-zA-Z0-9éèàêâùïüëô;,.\"\'() _-]{3,300}$#", $_POST['message']))
    	{
     
    		// Insertion des informations dans la base de données
    		$bdd = new PDO('mysql:host=.....;dbname=.....', '......', '......');
    		$req = $bdd->prepare('INSERT INTO forum(pseudo, sujet, message, datforum) VALUE(:pseudo, :sujet, :message, NOW())');
    		$req->execute(array(
       		'pseudo' => $_POST['pseudo'],
       		'sujet' => $_POST['sujet'],
       		'message' => $_POST['message']));
     
    	}
    	else
    	{
    	echo 'Votre message n\'est pas valide, il doit faire entre 3 et 300 caractères et ne doit pas contenir de caractères spéciaux, recommencez svp merci.';
    	}
    	}
    	else
    	{
    	echo 'Votre sujet n\'est pas valide, il doit faire entre 3 et 106 caractères et ne doit pas contenir de caractères spéciaux, recommencez svp merci.';
    	}
    	}
    	else
    	{
    	echo 'Le Pseudo choisi n\'est pas valide, il doit faire entre 3 et 30 caractères et ne doit pas contenir de caractères spéciaux, recommencez svp merci.';
    	}
    }
    else
    {
    echo 'Veuillez remplir tous les champs et envoyer le formulaire svp, merci.'; 
    }
     
    // Poste du message sur la page forum.
    $bdd = new PDO('mysql:host=......;dbname=......', '......', '......');
    $reponse = $bdd->query('SELECT idforum, pseudo, sujet, DATE_FORMAT(date, \'%d/%m/%Y à %Hh%imin%ss\') AS datforum FROM forum ORDER BY idforum DESC LIMIT 0, 20');
    ?>
     
    <table>
    	<thead> <!-- Entête de tableau -->
    		<tr>
    		     <th class="th1">Id</th>
    		     <th class="th2">Dernières réponses</th>
    		     <th class="th3">Pseudo</th>
                         <th class="th4">Titres</th>
    		</tr>
    	</thead>
    	<tfoot> <!-- Pied de tableau pour meilleure présentation -->
    		<tr>
    		    <th class="th5"></th>
    		    <th></th>
    		    <th></th>
    		    <th class="th6"></th>
    		</tr>
    	</tfoot>
    <?php 
    //J'affiche les lignes de mon tableau une à une avec une boucle.
    while ($donnees = $reponse->fetch())
    {
    if (htmlspecialchars($donnees['idforum'])%2 == 0) 
    {
        $class = "pair";
    }
    else 
    {
       $class = "impair";
    }
    echo '<tbody>
    	<tr class="' . $class . '">
    		    <td>' . htmlspecialchars($donnees['idforum']) . '</td>
    		    <td>' . htmlspecialchars($donnees['datforum']) . '</td>
    	            <td>' . htmlspecialchars($donnees['pseudo']) . '</td>
    	            <td><a href="repforum.php">' . htmlspecialchars($donnees['sujet']) . '</a></td>
    	</tr>
    	</tbody>';
    }
    //Fermeture de la boucle.
    $reponse->closeCursor();
    ?>
    </table>
    </div>
    <?php include "pied-de-page.php"; ?>

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Erreur typique d'une requête qui ne fonctionne pas
    POur faciliter le développement, tu peux ajouter un debug de l'erreur juste après l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $reponse = $bdd->query('SELECT idforum, pseudo, sujet, DATE_FORMAT(date, \'%d/%m/%Y à %Hh%imin%ss\') AS datforum FROM forum ORDER BY idforum DESC LIMIT 0, 20');
    if ($reponse === false) {
        print_r($bdd->errorInfo());
    }

  3. #3
    Membre du Club
    Femme Profil pro
    étudiante
    Inscrit en
    Septembre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : étudiante

    Informations forums :
    Inscription : Septembre 2014
    Messages : 101
    Points : 52
    Points
    52
    Par défaut
    Ok, merci, je vais essayer ca!! :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] Fatal error: Call to a member function fetch() on a non-object
    Par CyberCat_ dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/03/2015, 08h54
  2. [MySQL] Fatal error: Call to a member function fetch() on a non-object
    Par Saoualah dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/07/2014, 10h30
  3. [MySQL] Fatal error: Call to a member function fetch() on a non-object
    Par tonnebrre dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/10/2011, 13h46
  4. [PDO] Fatal error: Call to a member function fetch() on a non-object
    Par blopjerem dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/12/2009, 11h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo