Lo siti SPIP Oc Linux : articles e discussions sus lo desvelopament e revirada de logiciaus liures en occitan

Accueil du site > Cors, ajuda per la programacion > PHP > Passage de paramestres per un escript amb l’URL

Passage de paramestres per un escript amb l’URL

mercredi 7 février 2007, par Joan Luc Labòrda


Format d’una URL

Las URL (Uniform Ressource Location) sèn los camins delas ressorsas sus internet. Sèn unicas e permetèn d’accedar à n’importa aquel document.

Sintaxa generala


<schema>://<utilisador>:<mot_de_santa_clara>@<maquina>:<port>/<camin>?<paramestres>#<fragment>

Camp Description
schema protocole utilisat (http, ftp, ...)
maquina nomi de domèni o adreça IP del servidor
utilisador nomi d’utilisador per los protocoles que necessitèn una identificacion (ftp, telnet, ...)
mot_de_santa_clara mot de santa clara per l’autentificacion
port n° de port sus aquel se connectar, los protocoles an un port per defaut (80 per http)
camin camin complet de la ressorsae : succession dels repertoris que percorrer per l’atteindre e mei son nom complet
paramestres lista dels nomis de paramestres e de lors valors
fragment identifiant d’un ligam interne d’una pagina HTML (creat per <a name="">)

Sintaxa de la lista dels paramestres

Lo camp aici-dessus pod esser descomposat mei finament :


<cople (nomi,valor)>&<cople (nomi,valor)>&...

Sintaxa del cople (nomi, valor)

Lo camp <cople (nomi,valor)> pod esser descomposat mei finament :

nomi=valor

Resumat

Lo caractere  ? indica que las cadenas de la suita de l’URL sèn dels paramestres e non fan pas partida del nomi de fiquièr. Lo caractere = separa un nomi de parametre e sa valor transmisa. Lo caractere & separa dues coples (nomi, valor).

Per far faça au cas generau d’un paramestre dont la valor conten dels caracteres interdits, se utilisara las foncions de codage.

Exemple pratic

<a href="index.php?print=yes&user_id=75">Version que estampar</a>

Dens aquest exemple se transmet duas variablas al escript index.php : $print de valor "yes" et $user_id de valor "75".

Passage de paramestres

Passage d’una cadena de caracteres

Una URL es d’abord una cadena de caracteres, la valor recebuda per l’escript sera de tipe cadena de caracteres.

- Escript de despart

<a href="pagina.php?str=Adieussiats">

- Escript d’arrivada


echo $str;
Aficha : Adieussiats

Passage d’un entier

Lo cast implicit e lo tipage faible delas variablas en PHP, provoca la conversion directa de la cadena "20" en l’entier 20 lors de son utilisacion dens un calcul o un test.

- Escript de despart

<a href="page.php?i=20">

- Escript d’arrivada


echo $i*5;
Aficha : 100

Passage d’un flottant

De la même manière que pour un entier, un flottant sera automatiquement traduit en flottant lors de son utilisation.

- Escript de despart

<a href="page.php?x=5.23">

- Escript d’arrivada

echo f($x);
Aficha : 89.24

Passage d’un tableau

Per passar una taula per un script, cal passar cad element del taula separament. Lo nomi del parametre sera le nomi dela taula, seguint de crochets [].

- Escript de despart

$tab = array{ "Joan Lucí ", "Labòrda", 1957 };
<a href="page.php?tab[]=Joan Lucí &tab[]=Labòrda &tab[]=1957">

- Escript d’arrivada

echo $tab[0], " ", $tab[1], " ", $tab[2];
Afiche : Joan Lucí Labòrda 1957

Erreur à ne pas commettre : oublier les crochets. Car alors, on remplacera la valeur du premier élément par le deuxième, et par le troisième...

Mauvais exemple : Script de départ

$tab = array{ "Joan Lucí ", "Labòrda", 1957 };
<a href="page.php?tab=Joan Lucí &tab=Labòrda &tab=1957">

Script d’arrivée

echo $tab;
Aficha : 1957

Passage d’un tableau associatif

Una taula associativa associa un element e una clau. Per o passar en parametre, cal ajustar entre los crochets lo nomi de la clau.

- Script de départ


$tab = array{ "prenom" => "Joan Lucí", "nom" => "Labòrda", "age" => 1957 };
<a href="page.php?tab[prenom]=Joan Lucí &tab[nom]=Labòrda &tab[age]=1957">

- Script d’arrivée

echo $tab["prenom"], " ", $tab["nom"], " ", $tab["age"];
Affiche : Joan Lucí Labòrda 1957

Linéariser une variable

Es pas pratic de passar en paramestre una taula amb 150 camps coma dens l’exemple d’avans.

Orosament, exista un cople de foncions serialise() e unserialise() que permet de revirar una variabla en una cadena de caracteres que se pod passar facilament en paramestre sens perdre ne lor estructura ne lor tip.

Per recuperar una variable linearisada, e retrobar la valor de la variabla, se utilisa unserialize().

Types linéarisables

  • entier
  • flottant
  • cadena de caracteres
  • taula
  • taula multidimensional
  • taula associativa
  • object

Après aver linearisat la notra variabla, se deb codar aquesta cadena avans de la passar en paramestre e en protectar los "slashs" éventuals.

- Escript de despart

$tab = array{ "prenom" => "Joan Lucí", "nom" => "Labòrda", "age" => 1957 };
<a href="test.php3?str=".addslashes(urlencode(serialize($tab)))."">

- Escript d’arrivada

$tab = unserialize(urldecode(stripslashes($str)));
echo $tab["prenom"], " ", $tab["nom"], " ", $tab["age"];
Aficha : Joan Lucí Labòrda 1957

- Attencion à una error communa : ben respectar l’ordre delas foncions composadas !

  • Dens l’ escript de despart : linearisar, codar et protectar los "slashs".
  • Puis, dans l’escript d’arrivada, l’operacion inversa : desprotectar los "slashs", descodar, deslinearisar.

Passage d’un objet

Tot coma per la taula, un object n’es pas un tip de baisa (nombre, cadena, boolean), non pod esser passat directament en paramestre.

Trabalham sus l’object "ieu" instança de la classa Personna :


class Personna {
        var nomi;
        var prenomi;
        var age;
        function Personna($n, $p, $a) {

                $this->nomi = $n;
                $this->prenomi = $p;
                $this->age = $a;
        }
        function afichar() {
                echo $this->prenomi, " ", $this->nomi, " ", $this->age;
        }
}
$ieu = new Personna("Joan Lucí", "Labòrda", 1957);

Se poderia en passar cad attributs en paramestre separament dens l’URL coma lo monstra l’exemple seguint :

- Escript de despart


<a href="page.php?n=".$moi->nom."&p=".$moi->prenom."&a=".$moi->age.">

- Escript d’arrivada

$ieu = new Personna($n, $p, $a) ; $ieu->afichar() ; Aficha : Joan Lucí Labòrda 1957

Mès aquesta metoda es laboriosa, es pas mei simpla de ne passar qu’una sola valor en paramestre. Or se sab que la linearisacion permet de "compremsar" una variabla - mesma complexe - dens una sola valor de tip cadena de caracteres. Cau doncas linearisar nostre object.

De mei, la linearisacion permet de conservar las connecions obertas vers las baisas de donnadas ! Mentre las metodas sèn pas conservadas.

- Escript de despart

<a href="page.php?moi=".addslashes(urlencode(serialize($moi)))."">

- Escript d’arrivada

$ieu = unserialize(urldecode(stripslashes($ieu)));

Répondre à cet article


Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | SPIP | squelette