begin process at 2012 05 27 20:40:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaires

 > TRANSMITION DES ARGUMENTS VERS UNE PAGE DANS UNE FRAME

TRANSMITION DES ARGUMENTS VERS UNE PAGE DANS UNE FRAME


 Information sur la source

Note :
2 / 10 - par 1 personne
2,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Formulaires Classé sous :paramètre, frame, formulaire, récupérer Niveau :Débutant Date de création :13/12/2006 Date de mise à jour :15/12/2006 17:33:00 Vu :9 801

Auteur : masternico

Ecrire un message privé
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

L'autre jour, je crée une page avec des frame et dans l'une de ces frames se trouve une page php chargée de traiter les paramètres d'un formulaire. Problème, la page faisant partie d'une frame, c'est la page "parent" qui reçoit les info et ne les redistribue pas.
J'ai donc fait ce petit bout de code que l'on viendra mettre en tout début de page avant la balise HTML. Le code se charge de récuperer toutes les valeurs avec leurs noms respectifs, et de les concatener dans une chaine de caractères que l'on peut ainsi inclure dans l'URL de la page dans la frame.
!!!ATTENTION: ce source pour sous débutant ne s'applique pas au traitement des arguments complexes de type array, ou objet...
Il est destiné à manipuler des arguments de type text et numéraire.
example: test.php?num_tel=0000000000&ref=abcdefg&type_annon ce=1&type_bien=2
Il manque cruellement un contrôle des données pour ne traiter que les arguments du type attendu (cf. source de kankrelune dans son post du 14/12/2006)

Source

  • <?php
  • /*
  • $_GET, $_POST: tableaux contenant toutes les valeurs en provenance d'un formulaire ou d'une injection manuelle dans l'URL
  • params: chaine de caractères pouvant être collée au bout de l'URL du document dans la frame
  • */
  • $params = ""; // initialisation de la chaine de caractère
  • if (!empty($_GET)) { // on verifie s'il y a des valeur dans $_GET
  • reset($_GET); // on s'assure que le pointeur interne est bien au début
  • $params = "?" . key($_GET) . "=" . current($_GET); // on traite le premier argument ("?")
  • next($_GET); // on deplace le pointeur interne sur l'élément suivant
  • while (list($key, $val) = each($_GET)) {
  • $params .= "&" . $key . "=" . $val; // puis séquencielement le reste du tableau
  • }
  • }
  • if (!empty($_POST)) { // on verifie s'il y a des valeur dans $_POST
  • reset($_POST); // on s'assure que le pointeur interne est bien au début
  • // si $params est vide, c'est que $_GET etait vide donc le premier élément de $_POST devra avoir "?"
  • if ($params == "") $params = "?" . key($_POST) . "=" . current($_POST); // avec "?"
  • else $params .= "&" . key($_POST) . "=" . current($_POST); // avec "&"
  • next($_POST); // on deplace le pointeur interne sur l'élément suivant
  • while (list($key, $val) = each($_POST)) {
  • $params .= "&" . $key . "=" . $val; // puis séquencielement le reste du tableau
  • }
  • }
  • ?>
  • <HTML>
  • <HEAD>
  • </HEAD>
  • <BODY>
  • <FRAMESET cols="250,250,*">
  • <FRAME src="mapage1.php<?php echo params; ?>"> <--! transmition des paramètres -->
  • <FRAME src="mapage2.php">
  • <FRAME src="mapage3.php">
  • </FRAMESET>
  • </BODY>
  • </HTML>
<?php
/*
$_GET, $_POST: tableaux contenant toutes les valeurs en provenance d'un formulaire ou d'une injection manuelle dans l'URL
params: chaine de caractères pouvant être collée au bout de l'URL du document dans la frame
*/

$params = "";      // initialisation de la chaine de caractère


if (!empty($_GET)) {    // on verifie s'il y a des valeur dans $_GET
    reset($_GET);       // on s'assure que le pointeur interne est bien au début
    $params = "?" . key($_GET) . "=" . current($_GET);      // on traite le premier argument ("?")
    next($_GET);            // on deplace le pointeur interne sur l'élément suivant
    while (list($key, $val) = each($_GET)) {
        $params .= "&" . $key . "=" . $val;         // puis séquencielement le reste du tableau
    }
}

if (!empty($_POST)) {    // on verifie s'il y a des valeur dans $_POST
    reset($_POST);       // on s'assure que le pointeur interne est bien au début
    // si $params est vide, c'est que $_GET etait vide donc le premier élément de $_POST devra avoir "?"
    if ($params == "") $params = "?" . key($_POST) . "=" . current($_POST);      // avec "?"    
    else $params .= "&" . key($_POST) . "=" . current($_POST);      // avec "&"
    next($_POST);            // on deplace le pointeur interne sur l'élément suivant
    while (list($key, $val) = each($_POST)) {
        $params .= "&" . $key . "=" . $val;     // puis séquencielement le reste du tableau
    }
}

?>
<HTML>
<HEAD>
</HEAD>
<BODY>
<FRAMESET cols="250,250,*">
<FRAME src="mapage1.php<?php echo params; ?>">   <--! transmition des paramètres -->
<FRAME src="mapage2.php">
<FRAME src="mapage3.php">
</FRAMESET>
</BODY>
</HTML>



 Historique

15 décembre 2006 16:08:10 :
Ré-écriture du source suite aux remarques (judicieuses) de kancrelune du 14/12/2006
15 décembre 2006 17:33:00 :
mise à jour de la présentation du code

 Sources du même auteur

SNIPPET : REDIMENSIONNER UN IMAGE SANS UTILISER LA BIBLIO GD
Source avec une capture CODEC D'OBFUSCATION DE LIEN HTML (PHP5)
Source avec Zip Source avec une capture TÉLÉCHARGEMENT FICHIERS AVEC TICKET DE TÉLÉCHARGEMENT
LA DATE DU MÊME JOUR, LE MOIS SUIVANT

 Sources de la même categorie

Source avec Zip Source avec une capture VALIDATEUR DE FORMULAIRE par Reldan
Source avec Zip SUIVI SERVICE CLIENT PHP par hige52
Source avec Zip POO - FORMULAIRE NEWSLETTER PHP - PROFESSEUR-PHP.COM par mtrix000
Source avec Zip Source avec une capture SELECTEUR DE NOTE par Reldan
Source avec Zip Source avec une capture ESPACE MEMBRE , AVEC CASE OPTIONNEL , SANS MYSQL par sartoz

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture VALIDATEUR DE FORMULAIRE par Reldan
Source avec Zip FORMULAIRE D'INSCRIPTION par lelioua
Source avec Zip SUIVI SERVICE CLIENT PHP par hige52
Source avec Zip POO - FORMULAIRE NEWSLETTER PHP - PROFESSEUR-PHP.COM par mtrix000
Source avec Zip Source avec une capture SELECTEUR DE NOTE par Reldan

Commentaires et avis

Commentaire de sebastiennauer le 13/12/2006 23:55:10

Bonne idée, mais pourquoi ne pas faire directement des pseudos frames avec des include de fichiers PHP et des styles CSS ?

Commentaire de kankrelune le 14/12/2006 12:12:58

C'est plus que bof bof ton truc... tu utilise $_REQUEST mais $_REQUEST utilise comprend les données $_GET, $_POST et $_COOKIE... tu envois les données $_POST et $_COOKIE dans l'url toi... .. ?

ensuite tu test qu'il y a des arguments après avoir récupéré les clées autant faire un

if(!empty($_GET))

avant de récupérer les clées... d'ailleurs il est inutile de récupérer les clées autant faire directement un foreach sur le tableau... sinon devrais plutot utiliser la fonction http_build_query() et si tu est sous php4...

function http_build_query( $formdata, $numeric_prefix = null, $arg_separator = null)
{
if (is_object($formdata))
            $formdata = get_object_vars($formdata);

        if (!is_array($formdata))
{
            trigger_error('http_build_query() Parameter 1 expected to be Array or Object. Incorrect value given.',E_USER_WARNING);
            return false;
        }
elseif(empty($formdata))
            return '';

if(is_null($arg_separator))
$arg_separator = ini_get('arg_separator.output');

$build_query = '';

        foreach ($formdata as $key => $val)
{
            if (is_numeric($key) && !is_null($numeric_prefix))
                $key = $numeric_prefix.$key;

            if(is_scalar($val))
                $build_query .= urlencode($key).'='.urlencode($val);
else
$build_query .= _http_build_query($val, urlencode($key), $arg_separator);

$build_query .= $arg_separator;
        }

return substr($build_query,0,-strlen($arg_separator));
}

function _http_build_query ($array, $name, $separator)
    {
        $tmp = '';

        foreach ($array as $key => $value)
{
            if (is_scalar($value))
                $tmp .= $name.'['.urlencode($key).']='.urlencode($value);
elseif(is_array($value))
$tmp .= _http_build_query($value, $name.'['.urlencode($key).']',$separator);
elseif (is_object($value))
$tmp .= _http_build_query(get_object_vars($value), $name.'['.urlencode($key).']',$separator);

$tmp .= $separator;
        }

        return substr($tmp,0,-strlen($separator));
    }

@ tchaOo°

Commentaire de masternico le 15/12/2006 14:49:52

Salut tout le monde, Merci pour vos commentaires.
>>sebastiennauer: tout à fait d'accord. En fait, alors que j'écris ces ligne je me suis mis au CSS mais c'est balèse et j'ai eu du mal à trouver la doc complète de la terminologie (http://www.w3.org/TR/1999/REC-CSS1-19990111) (en anglais).


>>kankrelune: merci pour le if(!empty()), je l'oubli tout le temps celui la.
J'ai mis du temps à saisir la pertinense de ta remarque sur $_REQUEST. Cela rejoint une remarque qu'il m'a déja étée faite sur un autre code: mon source est trop spécifique à mon application générale.
Si j'utilise $_REQUEST, c'est parcequeje me réserve le droit d'injecter des arguments pour simuler la validation d'un formulaire. Et comme je sais que le nombre des arguments reçut vari entre 2 et 4, je ne me suis pas posé la question à savoir si $_REQUEST ne pouvait pas contenir autre chose que les arguments que j'attends.
Donc bof bof effectivement...  ;)

je vais corriger et utiliser $_GET et $_POST, parceque ton source http_buil_machin c'est encore trop obscur pour moi et je ne veux pas utiliser des sources que je ne comprend pas. J'ai fait mes premiers pas dans l'utilisation des class mais la terminoligie encore me manque et j'ai du mal à trouver des bouquins serieux qui en parle

Voila voila. En tout cas merci pour vos post et à bientôt.

Commentaire de coucou747 le 15/12/2006 14:57:18 administrateur CS

à mon avis, les ' seront échapés deux fois... c'est pas bon du tout pour les arguments qui peuvent en contennir... Bref, ça peut buger sur les caractères échapables, et ça peut aussi merder dans les arguments qui ont un " dedans...

De plus, c'est vraiment simple comme exemple, même pour débutant

Commentaire de sebastiennauer le 15/12/2006 15:13:17

Voila deux sites de références qui me servent au quotidien :
- http://www.alsacreations.com/ : Site en Francais pour apprendre le CSS, XHTML
- http://www.w3schools.com/ : Site en anglais avec des exemples dans pleins de langages pour le web

Commentaire de masternico le 15/12/2006 16:20:03

Bon bon, j'ai corrigé le code, mais je n'ai pas reussi à inclure foreach() à cause du fait que le premier argument est précédé du signe "?" et les autres du signe "&"...
mais comme le souligne coucou747, je débute de chez débute... :D
en fait j'apprends sur le tas, donc comme pour toutes les méthodes empiriques, il faut faire des erreurs pour avancer.   ;D
>>coucou747: Par contre, je n'ai pas saisis la subtilité du double échapement des '. ni des arguments avec " dedans... pourrais tu approfondir?

>>sebastiennauer: j'irais visiter les liens que tu m'as fourni

tcho tcho et merci

Commentaire de coucou747 le 15/12/2006 18:10:10 administrateur CS

masternico, passe comme argument un guillemet double, simple ou autre, tu verras comment ça chie...

Commentaire de kankrelune le 18/12/2006 11:37:10

http_build_query n'a rien d'obscure... c'est une fonction native de php5 et je te donne le code équivalant pour php4... elle génère une chaine de requete à partir d'un tableau ou d'un objet... .. .

http://fr3.php.net/http_build_query

Tu prend le code que je t'ais mis et tu fais...

<FRAME src="mapage1.php?<?php echo http_build_query($_GET); ?>">

Pourquoi réinventer la roue... .. . ;o)

@ tchaOo°

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Récupérer le résultat d'une fonction [ par BSide ] Bonjour,dans un formulaire les utilisateurs doivent préciser une date qui est variable. La sélection de cette date se fait via un script qui propose u Récupérer données formulaire + envoi par e-mail [ par kronprinz ] Quelqu'un peut-il m'aider ?Je cherche comment récupérer des données dans un formulaire et me les envoyer par e-mail avec PHP. Pouvez-vous m'expliquer Comment récupérer tous les items selectionner [ par fabiin ] Salut,dans mon formulaire, j'ai une liste avec la propriété de plusisuers selection possible.Je voudrai savoir, après l'envoi du formulaire,comment ré pb de frame [ par fmazoue ] bon je va essayer d'etre clairj'ai une frame F1 pour un entete de formulairej'ai une frame F2 pour le reste du formulairedans F1 je saisi un numéro qu pb de frame [ par fmazoue ] voila le pb :j'ai une frame F1 avec le debut d'un formulairej'ai une frame F2 avec la fin du formulairedans f1 je saisi un numéro et je clic sur mon b récupérer automatiquement un adresse email dans un formulaire envoyé en php3 [ par motosbikes ] Bonjour, quelqu'un pourrait il me dire comment faire pour récupérer automatiquement l'adresse email d'une personne qui valide un formulaire envoyé sur PHP: récupérer le champ d'un formulaire sans Bouton! [ par brahma ] hello ,avec php: comment puis je récupérer la valeur d'un champ d'un formulaire, lorsque l'utilisateur me donne la main en passant par un lien hyperte Récup données dans formulaire [ par MHI ] Salut, Deux probl&#232;me de r&#233;cup&#233;ration de donn&#233;es : Dans le cas suivant je souhaite r&#233;cup&#233;rer le login par l'interm&#233;d Help me, récuperer les données d'un formulaire et l'afficher dans une frame [ par xeon911 ] Bonsoir, Ma question est tr&#232;s simple,J'arrive &#224; r&#233;cup&#233;rer les donn&#233;es d'un formulaire mais j'aimerai les afficher sur la part Récupérer les infos d'un formulaire envoyé par mail [ par Osirex ] Bonjour, J'aimerais me lancer dans le PHP. J'ai un ptit projet qui est le suivant : Je voudrais envoyer un mail en introduisant du code php dedans pou


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,092 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales