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 :

Case effectué non correct


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 Case effectué non correct
    Bonjour,

    Je me retrouve devant un comportement qui me laisse pantois...

    Dans un script, je veux vérifier si un enregistrement d'une table contient déjà un numéro de téléphone donné.

    Pour cela, j'intancie un objet que je réaffecte systématiquement dans une boucle avec des données provenant d'un fichier xls.

    Voici la partie de code de mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $cible = new CCible(); //Servira pour le mise-à-jour des différents clients-cibles repris deans le fichier xls
    ...
    // Parse l’intégralité du fichier excel 
    for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) 
     { 
      ...
      $cible->setAll($tab);
      $rech = $cible->verifExisteCible();
      echo "<font color='red'>" . $rech . "</font><br>";
      //$cible->enregCible('enreg');
    }
    Pour savoir si je dois créer un nouvel enregistrement ou si je dois updater un enregistrement déjà existant, je vérifie si un enregistrement contient déjà le numéro de téléphone de la ligne xls correspondante, mon champ 'tel' étant de type 'unique' dans ma table MySql.

    Voici la partie de code de ma classe CCible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function verifExisteCible()
     {
       $tab[0] = $this->tel;
     
       $transaction = CtransactionsBdd::GetInstance("MYSQL", "speedcall");
       $resuReq = $transaction->select("MYSQL_exist_cible", $tab);   //Vérification de l'existence ou non du numéro de téléphone dans la table cibles
     
       return $transaction->getErreur();
     }
    Voici le code utilisé dans ma classe CtransactionsBdd :

    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
    public function select($requ, $tableau)
       {
        $requete = requete($requ, $tableau);
     
        switch(self::$typeBase)
         {
          case "MYSQL":
           $result = mysql_query($requete, self::$connect);
     
          if(! $result)
           self::$erreur = "Impossible d'effectuer la sélection " . $requete;
          else
           {
             if (! mysql_num_rows($result))
              self::$erreur = "Aucun résultat";
             else
              {
               while($row = mysql_fetch_assoc($result))
                $resultatSelect[] = $row;
     
               return $resultatSelect;
             }
           }
     
          break;
        }
       }
    Cette fonction fait appel à une fonction requete() qui se trouve dans un autre fichier et dont voici le code utilisé :

    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
    function requete($req, $param)
     {
       switch($req)
         {
          case "MYSQL_listeCodesPost":
           return "select distinct codePostal from localites order by codePostal";
           break;
           ...
          case "MYSQL_donneesCible":
           return "SELECT * from cibles where id = " . $param[0];
           break;
          ...
          case "MYSQL_exist_cible":
           return "SELECT * from cibles where tel = '" . $param[0] . "'";
           break;
         }
      }
    Mon problème, c'est que ce n'est pas le bon case qui est exécuté mais apparemment bien celui du "MYSQL_donneesCible" sans passage du contenu de $param[0].

    Voici ce que ça m'affiche à l'écran :

    "Impossible d'effectuer la sélection SELECT * from cibles where id = " autant de fois que je boucle dans mon for.

    Par contre, si je remplace par dans ma requête, là j'obtiens bien l'affichage "Aucun résultat" autant de fois que je boucle dans for.

    Je n'y comprends que dalle...

    Quelqu'un pourrait m'aider?

    Merci d'avance

  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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Un truc très bête pour bien comprendre ce qu'il se passe : afficher ce que le switch teste avant de le tester réellement et afficher ce que retourne réellement ta fonction requete...

    Parce que je doute que changer ce que contient le case modifie quel case est effectué...
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  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 beaucoup pour ton intérêt...

    J'ai trouvé d'où venait le problème : dans le constructeur de ma classe, je faisais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function __construct($tab = "")
       {
        if(count($tab) > 1)              //Si plusieurs données sont connues, l'objet est créé en affectant les différentes variables
    	   $this->setAll($tab);
    	  elseif(count($tab) == 1)         //Si uniquement l'ID est passé, les données sont tout d'abord recherchées, puis seulement les variables sont affectées
    	   $this->chargerDonnees($tab[0]);
    En modifiant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function __construct($tab = "")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function __construct($tab = NULL)
    , j'ai résolu mon problème.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/05/2007, 23h25
  2. GetSelectedRow ne s'effectue pas correctement
    Par stroumfs dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 11/03/2007, 20h18
  3. [Conception] requete qui ne s'effectue pas correctement
    Par eclipse012 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 29/01/2007, 12h06
  4. Affichage non correct d'une image
    Par AnonCoder dans le forum Langage
    Réponses: 2
    Dernier message: 03/11/2006, 13h51
  5. Variables javascript non correctement définies
    Par LLaurent dans le forum XMLRAD
    Réponses: 5
    Dernier message: 11/05/2004, 12h39

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