Pas le bon 'case' effectué

Eléphanteau du PHP | 24 Messages

16 juil. 2009, 18:44

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 : Tout sélectionner

$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 : Tout sélectionner

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 : Tout sélectionner

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 : Tout sélectionner

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

Code : Tout sélectionner

"where tel = "
par

Code : Tout sélectionner

"where nom = "
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

Eléphanteau du PHP | 24 Messages

21 juil. 2009, 19:19

Petit suivi : j'ai trouvé mon problème. Dans le constructeur de ma classe CCible(), je faisais :

Code : Tout sélectionner

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 faisant

Code : Tout sélectionner

function __construct($tab = NULL)
, j'ai résolu mon problème.[/code]