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 :

Comparaison du retour d'une fonction impossible


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut Comparaison du retour d'une fonction impossible
    Bonjour,

    Dans un script Php, j'essaie de faire une comparaison sur le retour d'une fonction membre, mais je n'y arrive pas.

    Voici le code dans mon script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $campagne = new CCampagne($tab);
          $resultat = $campagne->enregCampagne('enreg');
     
          if($resultat == echo "Enregistrement effectué")
           echo "OK";
          else
           echo "PAS OK";
    Dans ma classe CCampagne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public function enregCampagne($typeEnreg) //$typeEnreg = 'enreg' ou 'modif'
       {
        $tabDonnees ['nom'] = $this->nom;
        $tabDonnees ['accroche'] = $this->accroche;
        $tabDonnees ['nomFichier'] = $this->nomFichier;
        $tabDonnees ['dateDebut'] = $this->dateDebut;
        $tabDonnees ['dateFin'] = $this->dateFin;
     
        $transaction = CtransactionsBdd::GetInstance("MYSQL", "speedcall");
        $resuReq = $transaction->insert("MYSQL_ajoutCampagne", $tabDonnees);   //Enregistrement d'une nouvelle  campagne
     
        return $resuReq;
    Dans ma classe Ctransaction :

    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
    public function insert($requ, $tableau)
       {
     
    	  $requete = requete($requ, $tableau);
     
    	  switch(self::$typeBase)
         {
          case "MYSQL":
    	     $result = mysql_query($requete, self::$connect);
     
           if(!$result)
            {
             self::$erreur = "Impossible d'effectuer l'insertion' " . $requete;
             return self::$erreur;
            }
           else
    	      return $OK = "Enregistrement effectué";
     
    	     break;
    	  }
       }
    Même si l'enregistrement s'effectue correctement, c'est toujours le code du 'else' qui est effectué. Or, si je fais un , ça m'affiche bien "Enregistrement effectué".

    Quelqu'un aurait une idée?

    Merci d'avance pour vos réponses.

  2. #2
    Membre confirmé Avatar de ke2007
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 82
    Par défaut
    Salut,

    Bizarre si c'est exactement pareil au caractère près.

    Sinon vu que tu bosses avec des classes. Pourquoi ne mets tu pas des constantes d'états?

    Comme ça tu te bases dessus et ça t'évite d'avoir ce genre d'erreur.

    Dans ta classe Ctransaction tu mets:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const $STATE_OK = 10; // valeur à définir
    const $STATE_...; // plus d'autres si besoin est.

    Après dans la fonction qui return "Enregistrement effectué" tu fais:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    return Ctransaction::STATE_OK; // d'ailleur pourquoi le $ok avant?

    Et dans ta condition tu fais simplement:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if($resultat == Ctransaction::STATE_OK)
        // ok
    else
        // pas ok

    Après pourquoi un echo dans le if??

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Merci pour ton intérêt.

    Tout d'abord, de fait, dans ma classe, le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return $OK = "Enregistrement effectué";
    peut être simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return "Enregistrement effectué";
    et, dans le if de mon script, le echo est erronné (oubli d'un des tests que j'avais effectué).

    Par contre, je ne peux pas modifier le retour de ma fonction insert car je l'utilise dans bien d'autres scripts AJAX déjà écrits afin d'afficher à l'utilisateur la manière dont s'est déroulée l'insertion. Si je le modifie, je dois réécrire tous mes autres scripts et, de plus, je décentralise l'affichage de mes erreurs, ce qui ne me plait pas des masses.

    Je ne comprends toujours pas d'où provient le problème. Ce qui m'étonne un peu, cest le résultat des deux tests que j'ai effectués :

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $campagne = new CCampagne($tab);
          $resultat = trim($campagne->enregCampagne('enreg'));
     
          var_dump($resultat);
    me donne string(24) "Enregistrement effectué", or la string ne contient que 23 caractères.

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(!strpos("effect", $resultat))
           echo "PAS OK";
          else
           echo "OK";
    m'affiche "PAS OK" alors que mon retour contient bien "effect".

    Je suis très très perplexe

  4. #4
    Membre confirmé Avatar de ke2007
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 82
    Par défaut
    Tu peux très bien mettre la valeur de ta constante à "Enregistrement effectué" au lieu de 10 comme dans mon exemple.
    Ainsi si tu te bases dessus normalement tu ne devrait pas avoir de soucis.

    Après essais de faire un:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '('.$resultat . ' == Enregistrement effectué) => ' . ($resultat == 'Enregistrement effectué');

    Juste avant la condition pour voir.

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($resultat == echo "Enregistrement effectué")
    y pas un truc de trop??!!

    Met comme ceci, ça marchera sans problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($resultat == "Enregistrement effectué")

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Merci pour l'intérêt que tu portes à mon post...

    De fait, comme je l'ai dit un peu plus haut, le echo est une erreur résiduelle de mes différents tests. Mais malheureusement, même en le supprimant et en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($resultat == "Enregistrement effectué")
    , cela ne fonctionne pas. J'en suis même arrivé à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $campagne = new CCampagne($tab);
          $resultat = trim($campagne->enregCampagne('enreg'));
     
          if(htmlentities($resultat) == htmlentities("Enregistrement effectué"))
           echo "OK";
          else
           echo "NON";
    mais rien à faire, ça continue à exécuter le code du else.

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

Discussions similaires

  1. retour d'une fonction
    Par papy_tergnier dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 15/05/2006, 17h21
  2. [XML][XSLT][debutant]retour d'une fonction
    Par maxvador dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 30/03/2006, 14h12
  3. recuperer en php le retour d'une fonction plsql
    Par gismoblue dans le forum Langage SQL
    Réponses: 1
    Dernier message: 14/03/2006, 16h39
  4. PL/SQL retour d'une fonction
    Par aaronw dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/12/2005, 13h25
  5. [Oracle 9.1] Types de retour d'une fonction PL/SQL
    Par ftrifiro dans le forum PL/SQL
    Réponses: 8
    Dernier message: 12/10/2005, 16h54

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