Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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 23/08/2011, 11h19   #1
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
Par défaut Index de tableau contenant le signe "+"

Bonjour à tous.

Voici mon problème:
Je récupère une chaîne de caractère en POST, et cette chaîne me sert à définir l'index d'un tableau prédéfini.
En effet, je créé au préalable un tableau avec toutes les valeurs possibles que je peux recevoir en POST pour faire correspondre ces valeurs avec les champs de ma table MySQL pour pouvoir ensuite établir ma requête. Mon problème est qu'une donnée que je reçoit contient le signe "+". Les chaînes avec accents ne me posent aucun soucis mais cette chaîne avec le signe "+" ne passe pas..
Voici l'erreur que j'obtiens :

Citation:
Undefined index: Délivrances Livraisons directes - Retour
Alors que ma donnée reçue en POST est normalement
Citation:
Délivrances + Livraisons directes - Retour
Je ne comprends pas pourquoi il perd le signe "+" au passage en POST..

Si quelqu'un peut m'éclairer, merci d'avance
yeste64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 11h33   #2
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
pour t'éclairer, je te conseille :
- la bougie,
- la lampe-torche,
- le feu,
- le soleil,
- la plein lune,
- ...

Sinon, ... tu peux peut-être nous donner ton code (?). On y verra déjà plus clair.
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 11h41   #3
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
L'ironie est au rendez-vous à ce que je vois

Ce serait trop long pour le code..

Pour décrire l'algo :
1. Lorsque je clique sur un onglet dans ma page, une requête ajax est lancée, en transmettant l'attribut de l'onglet par POST à une page 2 (l'attribut est un string)
2. La page 2 récupère cet attribut.
3. Cet attribut me sert ensuite à définir le champ sur lequel je dois effectuer ma requête, grâce à un tableau des correspondances attribut<=>champ, comme ceci :

Code :
1
2
3
4
<?php
/*Tableau des correspondances entre intitulé d'onglet et champ de table*/	
$corresp= array('Stock initial'=>'STOCK_DEBUT', 'Entrées'=>'Qte_Entree', 'Sorties'=>'Qte_Sortie', 'Stock final'=>'STOCK_FIN', 'Consommation'=>'Consommation_mensuelle', 'Sorties délivrances'=>'QTE_SORTIE_DELIV', 'Commandé'=>'QTE_ENTREE_CDE', 'Achats facturés'=>'Qte_Entree_Facturee', 'Entrées délivrances'=>'QTE_ENTREE_DELIV', 'Sorties retours'=>'QTE_SORTIE_RETOUR', 'Cessions (E. Deliv - S. Retours)'=>'QTE_ENTREE_DELIV', 'Délivrances + Livraisons directes - Retour'=>'QTE_ENTREE_DELIV');
$onglet= $corresp[$title];
Code :
$tableData= $bdd->query('SELECT Code_Produit, DESIGNATION, Mois, '.$onglet.' FROM PH_Photo_Stock_Depot ORDER BY Mois ASC');
Le problème est que si un de mes attributs (donc un string) comporte le signe "+" dans sa chaîne, celui-ci n'est pas transmi.. Du coup, la chaîne ne corrrespond plus aux indices du tableau prédéfinis et il ne trouve aucun index dans le tableau.

Pourtant, les accents et autres passent bien.. C'est ça que je ne comprends pas.
yeste64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 11h53   #4
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
1/ "donner ton code" signifie "donner le code nécessaire et suffisant pour situer et comprendre le problème".

2/ <pre><?php print_r($corresp); ?></pre> donne :
Citation:
Array
(
[Stock initial] => STOCK_DEBUT
[Entrées] => Qte_Entree
[Sorties] => Qte_Sortie
[Stock final] => STOCK_FIN
[Consommation] => Consommation_mensuelle
[Sorties délivrances] => QTE_SORTIE_DELIV
[Commandé] => QTE_ENTREE_CDE
[Achats facturés] => Qte_Entree_Facturee
[Entrées délivrances] => QTE_ENTREE_DELIV
[Sorties retours] => QTE_SORTIE_RETOUR
[Cessions (E. Deliv - S. Retours)] => QTE_ENTREE_DELIV
[Délivrances + Livraisons directes - Retour] => QTE_ENTREE_DELIV
)
Jusqu'ici, pas de problème.

A quel endroit du code constates-tu le problème ?
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 11h55   #5
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Conseil : encadrer la requête par des ", et mettre toujours des '...' autour des chaines
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 11h56   #6
Membre éclairé
 
Avatar de Kaamo
 
Homme Cyril
Ingénieur développement logiciels
Inscription : avril 2007
Messages : 205
Détails du profil
Informations personnelles :
Nom : Homme Cyril
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 205
Points : 367
Points : 367
$title contient les données du $_POST je présume ?
Affiche ce qu'elle contient.

Peut-être utiliser un urlencode() au niveau du post, et un urldecode() au niveau de la récupération. Le '+' est sûrement squeezé par ajax et la lib que tu utilises. Enfin, sans conviction, c'est une piste à creuser ...

http://php.net/manual/en/function.urlencode.php
http://php.net/manual/en/function.urldecode.php
Kaamo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/08/2011, 12h14   #7
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
1/ jreaux62 tu as mal compris. La chaîne de caractères de mon attribut ne va pas se retrouver dans ma requête, c'est sa correspondance qui va l'être (selon le tableau des correspondances). Il n'y a pas besoin de quotes à cet endroit de la requête car c'est un nom de champ qui va se trouver à cet endroit.

2/ Kaamo tu as raison, c'est lors du passage en POST par ajax que le + se perd. En effet, mon $title contient ma chaîne de caractères transmises en POST par ajax mais sans le signe "+".
J'ai testé avec urlencode à l'entrée puis urldecode à la sortie, mais le + n'est toujours pas transmis..
yeste64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 12h21   #8
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
C'est bon j'y suis arrivé. Il fallait juste faire un urlencode sur la chaîne avant de l'envoyer en POST avec ajax. Ainsi, le '+' est présent quand je récupère la donnée par le biais de $_POST['donnée']. Pas besoin de urldecode pour récupérer la donnée à la sortie (bizarre?!)..

Merci beaucoup pour votre aide!
A bientôt
yeste64 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 16h31.


 
 
 
 
Partenaires

Hébergement Web