[RESOLU] Problème d'une requete Select sensible à la casse

Eléphanteau du PHP | 35 Messages

25 août 2016, 08:55

Bonjour,
je suis entrain de comparer le contenu de deux tables dont les données sont chargées à partir des fichiers Excel. Pour faire cette comparaison,je fais la jointure sur les colonnes "nomDemandeur", "conjoint" de la table demandeur avec la colonne "nom" de la table debiteur_brb.

Mais le problème est qu'il ne m'affiche que les "nomDemandeur" semblables à ceux se trouvant à la colonne "nom"; on dirait que la jointure sur "conjoint" ne marche pas. Voici ma requete:
select distinct dm.nomDemandeur,dm.conjoint,db.debiteurBanque from debiteur_brb db join demandeur dm on db.nom=dm.nomDemandeur or db.nom=dm.conjoint ORDER BY dm.nomDemandeur, dm.conjoint
Mais lorsque j'insère les données manuellement dans les tables la jointure fonctionne correctement;par contre en utilisant les données provenant d'Excel la jointure sur "conjoint" ne fonctionne pas.

Quelqu'un pourrait m'apporter son aide et me dire à quoi est du ce problème.

Merci à vous

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 août 2016, 09:46

Modération :
Afin d'obtenir plus de réponses, le sujet a été déplacé dans un forum plus approprié.


Fait un export avec phpmyadmin de quelques enregistrements de ta table avec des données dont la provenance est Excel et d'autres dont la provenance est manuel pour voir si il y a une différence
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 35 Messages

25 août 2016, 10:37

J'ai décelé la provenance de l'erreur. Le chargement des données en provenace d'Excel n'est pas bien fait, la colonne "conjoint" est mal chargée.
Les données se trouvant sur la colonne "nomDemandeur" ont une taille de police différente par rapport aux données se trouvant sur la colonne "conjoint".
Je vais voir comment gérer ce problème de police

Eléphanteau du PHP | 35 Messages

25 août 2016, 17:29

Par rapport au problème que j'avais signalé ci-haut.j'ai constaté la cause de ce problème. En effet le problème se situe au niveau du chargement des données se trouvant dans le fichier Excel. La police est différente pour les deux colonnes comme le mentionne la capture suivante:
Image
C'est pour celà que la jointure sur la colonne "conjoint" ne fonctionne pas.
Je vous montre également mon script de chargement du fichier Excel:

Code : Tout sélectionner

if(isset($_POST["bouton2"])) { if(!empty($_FILES["excel2"]["tmp_name"])) { $fileName2=explode(".",$_FILES["excel2"]["name"]); if($fileName2[1]=="csv") { $file2=$_FILES["excel2"]["tmp_name"]; $fp2=fopen($file2,"r"); $cpt2=0; while(!feof($fp2)) { $ligne2=fgets($fp2); $liste2=explode(";",$ligne2); $table2=filter_input(INPUT_POST,'userfile'); $liste2[0]=(isset($liste2[0]))?$liste2[0]:Null; $liste2[1]=(isset($liste2[1]))?$liste2[1]:Null; $champs1=$liste2[0]; $champs2=$liste2[1]; if($champs1!=''&&$champs2!='') { $cpt2++; $sql2=("insert into demandeur values('','$champs1','$champs2')"); $res2=mysql_query($sql2) or die(mysql_error()); if($res2) { echo '<script type="text/javascript">alert("Chargement du fichier BCB effectue");</script>'; } else { echo '<script type="text/javascript">alert("Echec du chargement du fichier");</script>'; } } } fclose($fp2); } else { echo '<script type="text/javascript">alert("Vous devez choisr un fichier de type csv");</script>'; } } else { echo '<script type="text/javascript">alert("Vous devez choisir un fichier");</script>'; } }
Je pense que le problème se situe au niveau du parcours du fichier excel car si je considère l'indice 0 seulement, le chargement est bien fait sans provlème.Mais si je passe à l'indice 1 pour charger l'autre colonne, c'est là que survient ce problème.

Voici cette ligne:

Code : Tout sélectionner

$liste2[0]=(isset($liste2[0]))?$liste2[0]:Null; $liste2[1]=(isset($liste2[1]))?$liste2[1]:Null;
Quelqu'un pourrait me dire à quoi est du ce problème

Merci à vous

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 août 2016, 18:56

La police est différente uniquement parce que ce n'est pas le même type de champ input vs. textarea
Fait un export de tes données comme je te l'ai demandé + haut.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 35 Messages

26 août 2016, 08:46

Ok c'est bien, merci de t'intéresser à mon problème.
Tu pourrais m'indiquer là ou je peux passer pour charger la table que j'ai exporté. Sur le formulaire du forum,j'ai cherché mais je ne trouve pas.
Merci

Eléphanteau du PHP | 35 Messages

26 août 2016, 09:12

A force de chercher sur les forums;j'ai pu trouver la solution à mon problème. Je donne la solution pour que si demain quelqu'un d'autre est confronté à ce problème;il puisse avancer.
En effet comme mentionné ci-haut, lors de l'insertion des données issues d'Excel, la seconde colonne était insérée sous forme input textarea, dès lors de ma jointure ne fonctionnait pas correctement. Pour pallier à ce problème, j'ai utilisé la fonction trim() qui supprime les espaces (ou d'autres caractères) en début et fin de chaîne sur ce champ avant de l'insérer.
Voici le script:

Code : Tout sélectionner

if(isset($_POST["bouton2"])) { if(!empty($_FILES["excel2"]["tmp_name"])) { $fileName2=explode(".",$_FILES["excel2"]["name"]); if($fileName2[1]=="csv") { $file2=$_FILES["excel2"]["tmp_name"]; $fp2=fopen($file2,"r"); $cpt2=0; while(!feof($fp2)) { $ligne2=fgets($fp2,4096); $liste2=explode(";",$ligne2); $liste2[0]=(isset($liste2[0]))?$liste2[0]:Null; $liste2[1]=(isset($liste2[1]))?$liste2[1]:Null; $champs1=$liste2[0]; $champs2=$liste2[1]; $champInsere = trim($champs2); if($champs1!='') { $cpt2++; $sql2=("insert into demandeur values('','$champs1','$champInsere')"); $res2=mysql_query($sql2) or die(mysql_error()); if($res2) { echo '<script type="text/javascript">alert("Chargement du fichier BCB effectue");</script>'; } else { echo '<script type="text/javascript">alert("Echec de chargement du fichier");</script>'; } } } fclose($fp2); } else { echo '<script type="text/javascript">alert("Vous devez choisr un fichier de type csv");</script>'; } } else { echo '<script type="text/javascript">alert("Vous devez choisir un fichier");</script>'; } }
Ok a plus