Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/09/2008, 16h03   #1
Invité régulier
 
Inscription : décembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 34
Points : 5
Points : 5
Par défaut Comparaison de chaîne pas le même résultat sous IE et Firefox

Bonjour,

Je suis face à un problème, je tente de comparer une chaine résultant d'un tableau, et je n'ai pas le bon résultat sous IE. avec Firefox pas de pb.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
include_once('categories_array.php');
reset($categories_array);
$category=$_POST['category'];
foreach ($categories_array as $key => $value)
{ 
list($category_name) = $value;
if ( strcmp(strtolower($category_name),$category) == 0)
{
$category = $key;
}
}
extrait du fichier categories_array.php:

$categories_array = array ("1" => array ("Arts, Antiquités"), "22" => array ("Arts, Antiquités : Architecture, Matériaux"), "129" => array ("Arts, Antiquités : Architecture, Matériaux : Eléments d'architecture"), "130" => array ("Arts, Antiquités : Architecture, Matériaux : Jardin, Extérieur, Ferronnerie"), "131" => array ("Arts, Antiquités : Architecture, Matériaux : Matériaux de construction"))

Sous firefox: OK pour toutes les catégories
Sous IE: Ca passe pour la catégorie id=1 et 22 mais pas pour 129

Je suppose que cela est dû au caractère UTF8 comme par exemple 'd''.

Comment le résoudre ?

Merci.
belugha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 16h33   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Tu pourrais nous préciser ce qu'il se passe quand "ca ne passe pas" ?

Sinon, je ne comprends pas bien ce que je cherche à faire ton code :
- a quoi sert le reset() au début ?
- pourquoi $categories_array est composé de tableaux d'une seul entrée ?
- pourquoi utiliser strcmp() plutot que == ?
- pourquoi la catégorie devient la clef quand on a trouvé un élément ? et pourquoi continue t-on de chercher étant donné qu'on ne peut plus rien trouver ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 16h42   #3
Invité régulier
 
Inscription : décembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 34
Points : 5
Points : 5
Citation:
Envoyé par sabotage Voir le message
Tu pourrais nous préciser ce qu'il se passe quand "ca ne passe pas" ?
Rien, mon id de catégorie n'est pas récupérer sous IE

Citation:
Sinon, je ne comprends pas bien ce que je cherche à faire ton code :
A récupérer l'Id de la catégorie, résultant d'une autocomplétion dans un input
Citation:
- a quoi sert le reset() au début ?
A repositionner mon tableau au début
Citation:
- pourquoi $categories_array est composé de tableaux d'une seul entrée ?
Parce que c'est un tableau résultant d'un script de boucle récursif (au lieu de la méthode intervallaire) pour construire un arbre de catégorie

Citation:
- pourquoi utiliser strcmp() plutot que == ?
Parce que je l'ai fait et que cela ne fonctionne pas non plus
Citation:
- pourquoi la catégorie devient la clef quand on a trouvé un élément ?
Pour pouvoir l'ajouter dans une table.
Citation:
et pourquoi continue t-on de chercher étant donné qu'on ne peut plus rien trouver ?
Pas compris la question ???

Merci
belugha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 16h57   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Citation:
A repositionner mon tableau au début
foreach() pars toujours du début du tableau.

Citation:
Pas compris la question ???
Tu cherches $category dans ton tableau via une boucle.
Une fois que tu l'as trouvé, tu lui donnes une valeur numérique.
Donc dans tous les tours de boucle suivant tu ne trouveras plus rien.


Citation:
Rien, mon id de catégorie n'est pas récupérer sous IE
A quoi le vois-tu ?
Ton bout de code ne nous indique pas cette partie.

Sinon c'est très étrange.
Essai un var_dump($_POST['category']) sur les deux navigateurs.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 18h18   #5
Invité régulier
 
Inscription : décembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 34
Points : 5
Points : 5
Citation:
Envoyé par sabotage Voir le message
foreach() pars toujours du début du tableau.
Merci, je ne savais pas

Citation:
Tu cherches $category dans ton tableau via une boucle.
Une fois que tu l'as trouvé, tu lui donnes une valeur numérique.
Donc dans tous les tours de boucle suivant tu ne trouveras plus rien.
C'est vrai donc un exit() serait le bienvenue.

Citation:
A quoi le vois-tu ?
Ton bout de code ne nous indique pas cette partie.
A mon id qui est à vide dans ma table
Code :
1
2
3
4
5
6
7
8
9
10
11
 
$sql = "INSERT INTO adnnonces (category, userid, user, name, surname, street, zip, city, state, country, phone1, phone2, email, web,
						ad_type, ad_headline, ad_text, ad_condition, ad_price, ad_liv, date_created, date_lastmodified,
						flag_featured, flag_top, flag_commercial, published
						)
						VALUES (
						'$category', '$userid', '$username', '$name', '$surname', '$street', '$zip', '$city', '$state', '$country',
						'$phone1', '$phone2', '$email', '$web', '$ad_type', '$ad_headline', '$ad_text',
						'$ad_condition', '$ad_price','$ad_liv', CURRENT_DATE(), CURRENT_DATE(),
						'$flagFeatured', '$flagTop', '$flagCommercial', '$publishAd'
						)";
Citation:
Sinon c'est très étrange.
Essai un var_dump($_POST['category']) sur les deux navigateurs.
Même résultat, avec firefox mon id est incrémenté avec IE à vide.

Merci pour tes réponses Sabotage.
belugha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 20h34   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Citation:
C'est vrai donc un exit() serait le bienvenue.
un break; même

Citation:
Même résultat, avec firefox mon id est incrémenté avec IE à vide.
tu veux dire que $_POST['category'] est vide avec IE ?
tu pourrais dans ce cas nous montrer le formulaire dont il provient ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 20h43   #7
Invité régulier
 
Inscription : décembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 34
Points : 5
Points : 5
Nan, nan le $_POST['category'] n'est pas vide (j'ai fait un echo et cela m'affiche bien le post de la catégorie) en fait cela ne passe pas dans la condition du if .

Donc mon $category reste avec la chaîne de caractère au lieu d'avoir le $key qui correspond à l'id dans la table.

Merci pour l'astuce du break Sabotage, j'ai répondu trop vite
belugha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 20h51   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Bon reprenons calmement.
Que valent dans le cas IE et dans le cas Firefox $_POST['category'] et $sql ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 21h06   #9
Invité régulier
 
Inscription : décembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 34
Points : 5
Points : 5
Je suis calme, pas de pb.

Cas IE - Firefox - catégorie Arts et Antiquités:
$_POST['category'] = Arts et Antiquités
Passe dans la condition 'if' et le $category = $key donc dans ce cas $key=1

Cas IE - Arts, Antiquités : Architecture, Matériaux : Eléments d'architecture

$_POST['category'] = Arts, Antiquités : Architecture, Matériaux : Eléments d'architecture
Ne passe pas dans la condition 'if' et le $category reste à Arts, Antiquités : Architecture, Matériaux : Eléments d'architecture
Donc $sql n'est pas bon puisque category reçoit une chaîne au lieu de l'id donc rien


Cas Firefox - Arts, Antiquités : Architecture, Matériaux : Eléments d'architecture

$_POST['category'] = Arts, Antiquités : Architecture, Matériaux : Eléments d'architecture
Passe dans la condition 'if' et le $category=129 ce qui est bon.

Je pense qu'il y a un retour charriot, un caractère invisible qui traine mais ou ???
belugha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 21h16   #10
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Pourquoi tu fais un strtolower() si le post renvoit un élément en majuscule et que le tableau aussi contient des éléments avec des majuscules ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 21h24   #11
Invité régulier
 
Inscription : décembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 34
Points : 5
Points : 5
Mon tableau n'est pas en majuscules, la 1ère lettre est en Majuscules, tandis que le post lui est en minuscule d'où le strtolower .
belugha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 21h36   #12
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Dans le message ou tu as fais un recapitulatif, tu avais indiqué le $_POST avec des majuscules.

De toute facon le probleme ne peux pas venir du bout de code que tu nous as mis.
Si le resultat est différent sur les navigateurs, il y a forcemment un probleme sur une etape HTTP/HTML.

Essaie de faire un echo md5($_POST['category'] dans les deux cas.
Ca confirmera peut etre que les deux navigateurs n'envoient pas la meme chose.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 21h44   #13
Invité régulier
 
Inscription : décembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 34
Points : 5
Points : 5
Désolée de t'avoir induit en erreur.

Alors le $_post sous IE donne:
1adeab8917b63bf8c193d38ec1c16b3d

et sous firefox:
1adeab8917b63bf8c193d38ec1c16b3d


donc la même chose
belugha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 21h55   #14
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Bon sortons les outils de dissection on va voir quel element réagit differement.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
include_once('categories_array.php');
$category=$_POST['category'];
 
foreach ($categories_array as $key => $value)
{ 
list($category_name) = $value;
echo $key . ':' . $category . '==' . $category_name;
if ( strcmp(strtolower($category_name),$category) == 0)
{
$category = $key;
echo ' EGAL<br>';
}
else {
echo ' DIFFERENT<br>';
}
}
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 22h04   #15
Invité régulier
 
Inscription : décembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 34
Points : 5
Points : 5
Trousse à outils sortis, merci Sabotage

Résultat sous IE:

1:arts, antiquités : architecture, matériaux : eléments d\'architecture==Arts, Antiquités DIFFERENT
22:arts, antiquités : architecture, matériaux : eléments d\'architecture==Arts, Antiquités : Architecture, Matériaux DIFFERENT
129:arts, antiquités : architecture, matériaux : eléments d\'architecture==Arts, Antiquités : Architecture, Matériaux : Eléments d'architecture DIFFERENT
QUESAKO ???? Pb d'antislashes

Résultat sous Firefox:
1:arts, antiquités : architecture, matériaux : eléments d\'architecture==Arts, Antiquités DIFFERENT
22:arts, antiquités : architecture, matériaux : eléments d\'architecture==Arts, Antiquités : Architecture, Matériaux DIFFERENT
129:arts, antiquités : architecture, matériaux : eléments d\'architecture==Arts, Antiquités : Architecture, Matériaux : Eléments d'architecture DIFFERENT

Même chose mais il arrive tout de même à passer dans la condition ... whaouuuuuuuuuu
belugha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 22h06   #16
Invité régulier
 
Inscription : décembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 34
Points : 5
Points : 5
Rectification, suite à ta modification de code, sous firefox le $sql n'es pas bon, l'id de la catégorie n'est pas alimenté.
belugha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 22h10   #17
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Tu dois avoir les magic_quotes activés.
Si tu as la possibilité de le faire, desactive les car c'est plus embêtant qu'autre chose.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 22h25   #18
Invité régulier
 
Inscription : décembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 34
Points : 5
Points : 5
Je n'ai pas la possibilité de les désactivée, je suis sur un mutualisé.

Je n'ai plus qu'à jouer avec les stripslashes .

Merci Sabotage, et je garde la trousse à outils
belugha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 22h35   #19
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Tu peux toujours essayer avec un .htaccess
Code :
php_flag magic_quotes_gpc off
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 09h11   #20
Invité régulier
 
Inscription : décembre 2002
Messages : 34
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 34
Points : 5
Points : 5
Sous OVH c'est:
SetEnv MAGIC_QUOTES 1

Mais cela ne fonctionne toujours pas sous IE.

129:arts, antiquités : architecture, matériaux : eléments d'architecture==arts, antiquités : architecture, matériaux : eléments d'architecture DIFFERENT
belugha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h49.


 
 
 
 
Partenaires

Hébergement Web