bonjour a tous,

je suis en train d'essayer de corriger une vielle page en php, et j'ai ma requête PDO qui n'est pas contente

Fatal error: Call to a member function prepare() on a non-object in /homepages/32/d412740872/htdocs/FFS2/site/tools/config/news/pageprivee.php on line 80

donc en ligne 8 sur le code en dessous

if(! empty($action) && ! empty($pseudo)&& ! empty($titre)&& ! empty($message))
    {       
        if ($action==3)
            {
                $ip=$_SERVER"REMOTE_ADDR"];
                $message= addslashes(htmlspecialchars($message, ENT_QUOTES));
                $data=array('',$dlien,$titre,$message,$ip,$pseudo,$lien);
                $req = $DBPDO ->prepare ('INSERT INTO news (id,dlien,titre,message,ip,pseudo,lien) VALUES (?,?,?,?,?,?,?)');
                //try{
                        $DBPDO = new PDO($dbdns1,$dbuser1 , $dbpass1,
                            array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
                        $DBPDO-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                       // try{      
                                $req->execute ($data);
                                unset($_POST);
                        //  }

                     /* catch (PDOException $e) 
                            {
                                echo '<h6>OUPS:</h6>';
                                echo '</br>';
                                echo '<h5>L\'instruction pour la Base de Donnée n\'a pas été comprise correctement</h5>';
                                echo '</br>';
                                echo '</br>';
                                echo '<h5>Module mis en someil</h5>';
                            }*/
              // }
             /* catch (PDOException $e)
                    {
                        echo '<h6>OUPS:</h6>';
                        echo '</br>';
                        echo '<h5>Une base de donnée n\'est pas de bonne humeur pour le moment.</h5>';
                        echo '</br>';
                        echo '<h5>Veuillez réssayer plus tard</h5>';
                        echo '</br>';
                        echo '</br>';
                        echo '<h5>Module mis en someil</h5>';
                    }*/
            }
    }

je suis sûr que j'ai encore fais une erreur de débutant que je suis, mais je ne la voie, pas.

pourriez vous m'aider et m'expliquer.

Merci d'avance Flo

5 réponses


Marechoux
Réponse acceptée

Dans ton code (premier message), je vois :

$req = $DBPDO ->prepare ('INSERT INTO news (id,dlien,titre,message,ip,pseudo,lien) VALUES (?,?,?,?,?,?,?)');
$DBPDO = new PDO($dbdns1,$dbuser1 , $dbpass1, array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

Cependant, il faut instancier $DBPDO avant de t'en servir pour ta requête préparée.

En gros l'erreur dit que $DBPDO n'est pas un objet PDO mais juste une simple variable, tu peux montrer ce que contient cette variable?

flo3376
Auteur

alors j'ai réussi à m'en sortir mais je suis obligé de mettre les info bdd dans le fichier, il n'en veut pas sinon.

<?php
    define('PROTECTIONINCLUDE', TRUE);
    include_once ($_SERVER"DOCUMENT_ROOT"].'/config/bdall.php');
if(! empty($action) && ! empty($pseudo)&& ! empty($titre)&& ! empty($message))
    {       
        if ($action==3)
            {
                $ip=$_SERVER"REMOTE_ADDR"];
                $message= addslashes(htmlspecialchars($message, ENT_QUOTES));
                $data=array('',$dlien,$titre,$message,$ip,$pseudo,$lien);

                //try{
                        $DBPDO = new PDO('mysql:host= ******;dbname=*****', ' *****', '*******',array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
                        $DBPDO-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                        $req = $DBPDO ->prepare ('INSERT INTO news (id,dlien,titre,message,ip,pseudo,lien) VALUES (?,?,?,?,?,?,?)');
                       // try{      
                                $req->execute ($data);
                                unset($_POST);
                        //  }

                     /* catch (PDOException $e) 
                            {
                                echo '<h6>OUPS:</h6>';
                                echo '</br>';
                                echo '<h5>L\'instruction pour la Base de Donnée n\'a pas été comprise correctement</h5>';
                                echo '</br>';
                                echo '</br>';
                                echo '<h5>Module mis en someil</h5>';
                            }*/
              // }
             /* catch (PDOException $e)
                    {
                        echo '<h6>OUPS:</h6>';
                        echo '</br>';
                        echo '<h5>Une base de donnée n\'est pas de bonne humeur pour le moment.</h5>';
                        echo '</br>';
                        echo '<h5>Veuillez réssayer plus tard</h5>';
                        echo '</br>';
                        echo '</br>';
                        echo '<h5>Module mis en someil</h5>';
                    }*/
            }
    }   
?>

la récupération des infos bdd en ligne marche, les variables sont complète, mais je suis obligé de les rentrer manuellement sinon plantage

Tu entend quoi par rentrer manuellement?

flo3376
Auteur

et oui, excusez moi de revenir seulement maintenant, je l'ai compris après cette blague que je ne démarrer pas ma pdo au bon moment, mais merci de confirmer.

@+