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

  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.

  7. #7
    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
    Essaye un echo de $resultat pour voir ce que ça affiche.
    Puis tu fait un Copier/Coller

  8. #8
    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
    Bonjour,

    Je viens à nouveau d'essayer ceci :

    - j'ai fais un echo de $resultat
    - j'ai copier le résultat
    - j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if($resultat == "Enregistrement effectué")
           echo "OK";
          else
           echo "PAS OK";
    où "Enregistrement effectué" est un coller de ma copie

    C'est toujours "PAS OK" qui s'affiche.

    Je deviens complètement chèvre

  9. #9
    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
    Le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo "resultat vaut " . $resultat . "<br>";
     
          if($resultat == "Enregistrement effectué")
           echo "OK";
          else
           echo "PAS OK";
    me donne

    "resultat vaut Enregistrement effectué
    PAS OK"

    Dingue...

  10. #10
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    essaye p-e avec des expressions plus simples comme "OK" et "KO"... on ne sait jamais avec les encodages de caractères....

  11. #11
    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 beaucoup pour ton aide et bien vu...

    Si, dans ma classe, je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    case "MYSQL":
    	     $result = mysql_query($requete, self::$connect);
     
           if(!$result)
            {
             self::$erreur = "Impossible d'effectuer l'insertion' " . $requete;
             return self::$erreur;
            }
           else
    	      return "OK";
     
    	     break;
    et dans mon script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo "resultat vaut " . $resultat . "<br>";
     
          if($resultat == "OK")
           echo "OK";
          else
           echo "PAS OK";
    j'obtiens

    "resultat vaut OK
    OK"

    Donc on avance un peu, mais comme j'utilise ce retour dans d'autres scripts pour de l'affichage, il faut que j'arrive à faire la comparaison sur "Enregistrement effectué"

  12. #12
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Citation Envoyé par dubitoph Voir le message
    Donc on avance un peu, mais comme j'utilise ce retour dans d'autres scripts pour de l'affichage, il faut que j'arrive à faire la comparaison sur "Enregistrement effectué"
    Il faut que PARTOUT tes encodages soient identiques.... (aussi bien dans les headers/meta que l'encodage du fichier lui-même....

    Néanmoins, et pour l'avenir retiens-le, on s'arrange pour ne pas avoir de longues phrases comme t'as fait :p

    sinon, si tu connais la valeur d'encodage du retour (y'a une fonction qui permet de le savoir, je ne sais plus la quelle :s) tu peux toujours utiliser des utf8_encode() et utf8_decode() car il s'agit souvent de ça ^^

  13. #13
    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
    MERCIIIII...

    De fait, en début du fichier script, j'avais bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=utf-8');
    , mais mon fichier lui-même n'était pas au format "UTF-8", contrairement au fichier contenant ma classe.

+ 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, 18h21
  2. [XML][XSLT][debutant]retour d'une fonction
    Par maxvador dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 30/03/2006, 15h12
  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, 17h39
  4. PL/SQL retour d'une fonction
    Par aaronw dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/12/2005, 14h25
  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, 17h54

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