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 :

erreur php function prepare() [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 10
    Points : 10
    Points
    10
    Par défaut erreur php function prepare()
    Je suis entrain de créer un script pour écrire une liste d'adresses mail dans une chaine, découper les adresses dans un tableau une par une (séparateur ';'), puis vérifier si l'adresse n'existe pas déjà dans la bdd (MySQL), si elle est à la bonne syntaxe et enfin rentrer les adresses dans la bdd.
    Or j'ai l'erreur :
    Fatal error: Call to a member function prepare() on a non-object in D:\logiciels\wamp\www\projet_newsletter\sources\ajout.php on line 14

    D'habitude c'est un simple oubli de "bdd ->prepare", mais la je ne vois pas l'erreur ...
    C'est surement un truc idiot mais si quelqu'un le voit je lui en serais très reconnaissant

    merci d'avance



    Code php : 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
    <?php
    	include("connexion_PDO.php");
    	
    	
    	function VerifierAdresseMail($adrMail) 
    { 
    	$sql = $bdd->prepare("SELECT mail FROM destinataire WHERE mail =  ? "); // ligne 14
    	$sql ->execute($adrmail);
    	$rep = $sql -> rowCount();
    
    	//si l'adresse est libre on teste la syntaxe
    	if($rep == 0)
    	{
    	     $Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#'; 
    	     if(preg_match($Syntaxe,$adrMail)) 
    	              return true; 
                else 
    	              return false; 
    	}
    	//sinon on retourne une erreur
    	else 
    		return false;
    		
    }
    
    	if(isset($_POST["liste"]) and !empty($_POST["liste"]))
    	{
    	$str = $_POST["liste"];
    	$data = explode(';',$str,1000);
    	$num = count($data);
    
    		for($c=0;$c<$num;$c++)
    		{
    			if(VerifierAdresseMail($data[$c])) //ligne 42
    			{
    				$reqf = $bdd->prepare("INSERT INTO destinataire (mail) VALUES (".$data[$c].") ");
    				$reqf ->execute();
    			}
    		}
    
    	} else { //(simple page html avec un formulaire POST )
    ?>


    EDIT: WAMP me sort des infos suplémentaire :
    Call Stack
    # Time Memory Function Location
    1 0.0014 695056 {main}( ) ..\ajout.php:0
    2 0.0075 704976 VerifierAdresseMail( ) ..\ajout.php:42

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Quand tu as ce genre de problème, consulte la doc, il y a des exemples de code.
    prepare()
    execute()

    Il faut mettre la valeur dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = $bdd->prepare("SELECT mail FROM destinataire WHERE mail = ? "); // ligne 14
    $sql ->execute(array($adrmail));
    Il y a d'ailleurs plusieurs manières de faire.
    Ici on utilise un marqueur, mais il possible de le faire avec une variable liée, utiliser aussi bindValue() ou bindParam().
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Tester les modifs avec array, test avec bindvalue au cas ou, l'erreur subsiste T_T

    néanmoins l'oublie du array($adrmail) était en effet une erreur

    bref ça ne venais pas que du array manquant ...

    l'erreur se situe donc par la >< :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	function VerifierAdresseMail($adrMail) 
    { 
    	$sql = $bdd->prepare("SELECT mail FROM destinataire WHERE mail =  ? "); //ligne14
    	$sql ->execute(array($adrMail));
    	$rep = $sql -> rowCount();
    
    //(...)
    précision : il n'y a pas d'erreur avec la bdd et les nom de colonne

  4. #4
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Il faut passer $bdd comme variable globale, sinon elle n'existe pas car elle est locale à la fonction et donc jamais initialisée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $a = 1;
    function erreur(){
      echo $a;
    }
    function correct(){
      global $a;
      echo $a;
    }

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  5. #5
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    salut,

    la variable $bdd n'est initialisé nulle part dans ta fonction. Si elle est globale commence par la déclarée ensuite tu pourras enchainer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    include("connexion_PDO.php");
     
    function VerifierAdresseMail( $adrMail ) 
    { 
      //supposant que l'objet a été crée dans connexion_PDO.php et est global  
      global $bdd;
     
       $sql = $bdd->prepare( "SELECT mail FROM destinataire WHERE mail =  ? " ); 
       //la suite
    }
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Erreur Trouvée, dans mon include(connexion_PDO.php), $bdd était déjà en global, donc je ne pense pas que se soit le problème, néanmoins, j'ai juste recollé ma connexion_PDO dans la fonction et ca a marché ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function VerifierAdresseMail($adrMail) 
    { 
    	include("connexion_PDO.php");
     
    	$sql = $bdd->prepare("SELECT mail FROM destinataire WHERE mail =  ? ");
    	$sql ->execute(array($adrMail));
    	$rep = $sql -> rowCount();
    merci pour vos réponse

  7. #7
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Non elle ne l'était pas en global, sinon on aurait vu la ligne dans ta fonction.

    A toi de voir, mais personnelement j'apprécie pas ce genre de code. Tu inclus X fois le fichier pour X fonctions qui l'utilise. Et donc tu fais X connexions à la base de données.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

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

Discussions similaires

  1. [PDO] erreur : Fatal error: Call to a member function prepare() on a non-object
    Par destigul dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/04/2015, 14h25
  2. Erreur page Functions.php
    Par Osano dans le forum WordPress
    Réponses: 4
    Dernier message: 01/02/2010, 16h07
  3. [Sessions] Message erreur PHP création de session
    Par Ylias dans le forum Langage
    Réponses: 2
    Dernier message: 29/09/2005, 11h11
  4. [Apache]Erreur PHP
    Par orditeck dans le forum Apache
    Réponses: 2
    Dernier message: 05/07/2005, 22h42
  5. Erreur php je pense
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/06/2005, 13h45

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