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 :

Peut-on inclure des caractères de contrôle dans les champs d'un POST


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut Peut-on inclure des caractères de contrôle dans les champs d'un POST
    Bonjour,
    J'ai une form toute simple, incluant un <select> dont chaque <option> est une adresse, par exemple : 111 rue de la Paix 75002 PARIS FRANCE.
    Le code du select (la liste de ses options) est composé en PHP en lisant 4 champs dans ma base de données : Rue, code Postal, Ville, Pays.

    Lors du SUBMIT (à la réception du POST par mon PHP), il me faut extraire correctement les séquences de mots qui, à l'intérieur de l'<option> choisie, correspondent à un champ de la base. Ici : rue="111 rue de la Paix", CP="75002", Ville="Paris", Pays="France".

    Mon idée a été de remplacer - au stade de la création du SELECT - les espaces INTERNES à un champs (et eux seuls) par un caractère invisible, distinct du "Space" et j'ai choisi le caractère ascii=09 de tabulation horizontale. Manque de bol, quand je réceptionne le $_POST, ce caractère est systématiquement remplacé par un espace (32). Pour vérif, j'ai remplacé mon code 09 par un code 95 (underscore) et tout marche au poil, mon string <option> devenant de bout en bout : 111_rue_de_la_Paix 75002 PARIS FRANCE. Mais je ne peux évidemment proposer à mes clients des SELECT bourrés d'underscore !

    Ma question est donc : comment faire passer un tel code 09 dans un $_POST ? Est-ce un pur problème HTTP ?

    Merci pour vos conseils !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Tu confonds la value de l'option avec le texte affiché dans la liste déroulante.

  3. #3
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut Non je ne confonds pas.
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,
    Tu confonds la value de l'option avec le texte affiché dans la liste déroulante.
    A priori, on peut se passer des "value". Dans ce cas, quand on valide le SUBMIT, c'est l'OPTION courante (le texte) du SELECT qui est transmise via le "name" du SELECT.
    Et chez moi c'est cette valeur qui inclut des caractères "HT" (ascii = 9).

    Voici un code très simplifié (le nom de la page php est ici : "zphp.php"). Si dans le define, on définit SEP comme l'underscore (95), tout se passe bien. Si on conserve 9, on reçoit des 32 dans le POST.
    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
    <?php
    define ('SEP',chr(9));
    print 'SEP = chr ('.ord (SEP).')<br>';
    if (isset ($_POST)) {
    	print '$_POST='; print_r ($_POST); print '<br>';
    	$stmp = $_POST ['adress'];
    	print '(lg adress='.strlen ($stmp).', nb sep='.substr_count($stmp,SEP).') '; for ($i=0;$i<=strlen($stmp);$i++) { print ord (substr($stmp,$i,1)).' '; } print '<br>';
    	}
    print '-------- Fin PHP<br><br>';
    ?>
    <html>
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    		<title>Essai tab dans post</title>
    	</head>
    <body>
    <form id="form_fiche" name="form_fiche" method="POST" action="./zphp.php" enctype="multipart/form-data">
    <select style="max-width:30em;" name="adress">
    	<option>France 75002 Paris 111<?php echo SEP;?>Rue<?php echo SEP;?>de<?php echo SEP;?>la<?php echo SEP;?>Paix</option>
    	<option>France 75013 PARIS 222<?php echo SEP;?>Rue<?php echo SEP;?>du<?php echo SEP;?>Moulin<?php echo SEP;?>de<?php echo SEP;?>la<?php echo SEP;?>Pointe</option>
    </select>
    <br><br>
    <input type="submit" value="Valider">
    </form>
    </body>
    </html>

  4. #4
    Invité
    Invité(e)
    Par défaut
    C'est aussi ridicule qu'inutile. Et sans intérêt.
    Tout comme l'utilisation de "séparateur"...

  5. #5
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    C'est aussi ridicule qu'inutile. Et sans intérêt.
    Tout comme l'utilisation de "séparateur"...
    Que voici une superbe réponse qui honore son émetteur !

    1) La notion de "RIDICULE", dans ce contexte, m'échappe totalement. Pouvez-vous vous expliquer ?
    2) Ca n'est pas INUTILE, puisqu'il existe un BUT, qui est de "maintenir" puis de "récupérer" à l'intérieur d'un pur string (l'option ou la value du select) la structure en champs sous-jacente de la base de données. Je ne vois pas comment sur un tel Forum vous pouvez nier ou méconnaître l'UTILITE d'un algo proposé. Son EFFICACITE, sans aucun doute, mais non son UTILITE ! D'ailleurs, ayant, sur votre première réponse, testé l'utilisation de la VALUE de l'OPTION plutôt que celle de son TEXTE... ça marche très bien, le caractère HT est bien préservé par le POST au prix évidemment d'un code un peu plus lourd (je n'ai jamais vu, dans notre métier, l'utilité des redondances et ici la VALUE redonde avec le TEXTE).
    3) "Sans intérêt" me paraît justement redondant avec "inutile". Mais peut-être me trompè-je. Pouvez-vous m'éclairer ?
    4) Quant à l'utilisation des séparateurs, unanimement répandus en PHP pour les transferts string-array, la communauté aura du mal à y avoir ridicule, inutilité ou absence d'intérêt.

    Ets-vous certain d'être sur le bon Forum ? Vous connaissez Doctissimo ?

  6. #6
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bien, nuançons la remarque du dalmatien :
    Ce qui est perturbant dans ton code, c'est que tu utilises la notion de "séparateur" dans le but de regrouper des données (et non de les séparer), et que tu te prends le chou à tenter d'utiliser des séparateurs "invisibles" parce que tu envoies ce que tu affiches.
    Si tu veux utiliser des séparateurs, le plus simple est d'envoyer (via value) la donnée avec les séparateurs et afficher la donnée sans les séparateurs.

    Personnellement, j'utiliserais plutôt les séparateurs pour séparer les différents "groupes" (pays, ville...). Ce qui donnerait quelque chose comme ça :
    [code]<option value="France#75002#Paris#111 Rue de la Paix">France 75002 Paris 111 Rue de la Paix</option>
    exploité par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list($pays, $cp, $ville, $adresse) = explode('#', $_POST['address']);
    Par rapport à ta remarque sur la redondance, je ne considère pas qu'une donnée formatée pour affichage et la même donnée formatée pour utilisation par le code soient redondantes.
    Au passage, si tes données viennent de la base et/ou retournent à la base, c'est probablement que tu as une table adresse ou quelque chose du genre. Ne peux-tu pas afficher l'adresse et envoyer l'identifiant de la table correspondant à cette adresse ?
    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]

  7. #7
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    Merci infiniment pour cette réponse... modérée !

    En pratique mon problème est résolu par l'utilisation de la "value" du Select. Mais je vais en effet considérer le fait d'utiliser directement, de bout en bout, l'ID de l'adresse en value et son contenu littéral en texte.

    Je remarque par ailleurs que beaucoup semblent ignorer que par défaut, le TEXTE de l'option sélectionnée est pris comme VALUE du SELECT, si cette value est absente. J'ai vu des dizaines de codes ou texte et value sont dupliqués, à l'identique.

    Reste un point de curiosité, qui motivait en grande partie mon post : je me demande pourquoi les caractères de tabulation "HT" (09) présents dans les champs de saisie sont systématiquement transformés en un espace SP lors du SUBMIT de la form. Je me dis que ce doit être le cas de tous les caractères de contrôle (< 32) et que c'est sans doute une question de protocole... mais je n'ai absolument rien testé !

    Merci encore.

  8. #8
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par puresprit Voir le message
    Je remarque par ailleurs que beaucoup semblent ignorer que par défaut, le TEXTE de l'option sélectionnée est pris comme VALUE du SELECT, si cette value est absente. J'ai vu des dizaines de codes ou texte et value sont dupliqués, à l'identique.
    Je pense que c'est une question d'habitude : comme le plus souvent la valeur et l'affichage sont différents, on crée systématiquement des options avec value et texte.
    Il me semble également avoir déjà eu des problèmes avec du JS qui devait lire les données d'une option...
    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]

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/08/2013, 08h54
  2. Réponses: 3
    Dernier message: 11/06/2007, 11h20
  3. Réponses: 4
    Dernier message: 04/12/2006, 11h37
  4. Réponses: 3
    Dernier message: 13/09/2006, 08h57
  5. pb:inserer des caractère en arabe dans une bd sql server
    Par l_faiza dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/12/2005, 14h02

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