Compréhension code en PHP ($_POST, $_GET...)

Résolu/Fermé
VieTgOOx Messages postés 160 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 9 janvier 2011 - 25 mai 2009 à 12:49
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 - 29 mai 2009 à 15:04
Bonjour,

Je suis actuellement en 1ere année de BTS et en stage de fin d'année en développement web.

Je suis donc novice dans le dev web et mon stage me permet de toucher notamment aux variable $_POST, $_GET, $_SERVER, et $_REQUEST, en analysant un site crée par un professionnel...

Le problème étant que je ne comprend pas vraiment leur fonctionnement...j'ai cru comprendre que c'était des tableau mais je ne vois pas comment ils se remplissent et comment ont réutilise leurs valeurs. Si vous pouviez me donner des explications plus claire que ce que j'ai pu trouver sur le net je vous en serait reconnaissant.

Voici une des choses que j'ai aussi du mal à comprendre:

if(!isset($_REQUEST['suite'])){$_REQUEST['suite'] = "0";}
J'ai cette condition en début de formulaire. (Déjà je ne comprend pas à quoi elle sert).
Dans cette condition j'ai par exemple:

if( !empty($_POST['portable']) && !setPortable($_POST['portable']) )
{
$formErrors[] = 'Vous devez indiquer un numéro de téléphone portable valide';
}

setPortable étant une fonction qui effectue une vérification et retourne True si la vérification effectué est valide, ou False si il y a par exemples des caractères de "a" à "z" ou des caractères spéciaux tel que "%", etc...

Logiquement le && indique que si le champ Portable est vide ET si setPortable est False (donc numéro non valide), alors il affiche "Vous devez indiquer un num...etc" J'ai vérifié c'est bon c'est bien le cas. En plus c'est un champ qui est indiqué comme facultatif donc pourquoi on demande à ce que les 2 conditions soit obligatoirement True ensemble pour ne pas passer dans le If.

Mais j'ai aussi ça:

if( empty($_POST['codepostal']) || !setCodePostal($_POST['codepostal']) )
{
$formErrors[] = 'Vous devez indiquer un code postal valide';
}

Ici c'est plus ET mais OU ....donc, si le champ codepostal n'est pas vide mais que la vérification n'est pas valide, ça devrait marcher quand même puisque c'est l'un des deux qui doit être vrai...Le plus dingue c'est que ce champ par contre est indiqué comme obligatoire...et quand je vérifie, si j'entre un faux code postale avec des lettres genre de "a" à "z", il m'affiche "Vous devez indiquer un code postal valide" ....je comprend pas le champ n'est pas vide alors pourquoi sa bloque?
Enfin heureusement que sa bloque mais je ne comprend pas la logique la...

Si quelqu'un pouvait m'aider je lui en serait très reconnaissant.

Bon appétit à tous et merci d'avance pour vos réponses.

Bien cordialement,

VieTgOOx.
A voir également:

17 réponses

pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 mai 2009 à 13:06
Les variables $_GET, $_POST, $_REQUEST et $_SERVER sont des varaibles superglobales, ce qui signifie qu'elles sont visible depuis n'importe où dans ton programme (fonctions, classes, boucles...) et qu'elle sont remplies automatiquement par php.

- $_GET : contient les variables passées au script par la méthode HTTP GET
-> c'est la query string dans une url du type : script.php?toto=aaaaah&truc=bozo : définit des variables toto et truc avec pour valeurs respectives 'aaaaah' et 'bozo'. Dans ce cas, $_GET['toto'] = 'aaaaah' et $_GET['truc'] = 'bozo' dans le script script.php.

- $_POST : même principe que $_GET, sauf qu'elle regroupe les variables passées via la méthode HTTP POST (la plupart du temps via un formulaire).

- $_REQUEST : regroupe les variables contenues dans $_POST, $_GET et $_COOKIE (une autre superglobale qui contient les cookies renvoyés par le client).

- $_SERVER : contient un certain nombre d'informations sur le serveur. Place un script contenant le code suivant sur ton serveur et appelle-le, tu en sauras plus :
<?php
echo '<pre>';
print_r($_SERVER);
echo '</pre>';
?>


En ce qui concerne tes exemples de code, if( !empty($_POST['portable']) && !setPortable($_POST['portable']) ) signifie si le champ portable a été renseigné dans le formulaire et que le numéro n'est pas valide. Le champ est facultatif, donc on ne retourne pas une erreur s'il n'est pas renseigné, mais s'il l'est est que le numéro n'est pas valide, ce n'est pas normal.

if( empty($_POST['codepostal']) || !setCodePostal($_POST['codepostal']) ) signifie si le code postal n'a pas été renseigné ou le code postal n'est pas valide. Le code postal est obligatoire, donc on retourne une erreur s'il n'est pas renseigné. S'il est renseigné mais pas valide, on retourne une erreur aussi.
1
VieTgOOx Messages postés 160 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 9 janvier 2011 26
25 mai 2009 à 16:17
Punaise oui, j'avais pas fait attention au "!" qui signifie une négation !! C'est AUSSI pour sa que je ne comprenais plus rien! Lol!
Merci de m'avoir éclairé sur ce point.

Sinon, pour remplir la variable $_POST, il faut forcément qu'à un moment je définisse une valeur...
Soit comme pour $_GET que je mette à un moment donné dans les codes quelque chose qui ressemblerais à ça:

$_POST['toto'] = 'aaaaah' et $_POST['truc'] = 'bozo' (en reprenant les même nom de variable)

...puisque toi dans ton exemple tu me met $_GET['toto'] = 'aaaaah' et $_GET['truc'] = 'bozo'

Et ensuite je pourais les réutiliser ainsi: $_POST['toto']

...c'est ça? ...lol je suis pas bien sûr d'avoir compris mais bon...j'ai plutôt l'impression de dire une bétise :p

Sinon pour $_REQUEST , sa veux dire que si je définie une valeur dans ma variable $_POST ou $_GET, que je peux l'appeler avec $_REQUEST ?? Par exemple:
$_POST['toto'] = 'aaaaah'
$_REQUEST['toto']

Sa marcherais?

Et enfin pour $_SERVER : je dois le mettre ou ton code là? Sur une de mes page php et je l'appel n'importe ou??

En tout cas merci de ton aide ^^!

Bien cordialement,
VieTgOOx.
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 mai 2009 à 17:05
Les superglobales sont créées automatiquement par php, relis bien ce que j'ai écrit. Effectivement, tu as compris le principe de $_REQUEST. Le code est à copier dans une page vierge nommée par exemple server.phhp (pour être original) et que tu placeras où tu veux sur ton serveur. tu l'appelles ensuite comme n'importe quelle autre page et tu verras quelles données fournit le serveur à php (entre autres choses : les éventuelles variables, la méthode http, le nom du script appelé, l'url demandée, le nom du serveur, les données d'identification http...).
0
Bonjour

Non, ça n'est pas toi qui écris $_POST['toto'] = 'aaaaah'. Comme psychopathe l'a dit, c'est PHP qui le fait pour toi quand on t'envoie un formulaire avec la méthode POST et que dans ce formulaire il y a un champ qui s'appelle toto.
Pour $_GET['toto'], c'est presque pareil mais il y a deux cas où la variable est créée :
. si on t'envoie un formulaire avec la méthode GET et un champ qui s'appelle toto ou
. si on appelle ton script en ajoutant ?toto=aaaaah dans l'URL: http://tonsite.fr
0
VieTgOOx Messages postés 160 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 9 janvier 2011 26
26 mai 2009 à 09:39
Bonjour à vous,

Désolé de ne pas avoir répondu hier soir mais du coup mon maitre de stage m'a donné des trucs à faire complètement hors sujet avec du web (comme formater un ordi par exemple...lol).

Bon. Alors ok, ça se remplis automatiquement par php donc....mais à vrai dire ça me soule parce que tout ce que je trouve dans les codes c'est des appel de valeur du genre :
$_POST['lalala'] , ou $_GET['ahahah'] ou même $_REQUEST['nanana'] !!

Je sais pas c'est pas magique quand même, le code php donne pas tout seul une valeur a 'lalala' !! J'ai compris que sa provenait des entrées fournis par un utilisateur par exemple, dans un formulaire. Mais elle peuvent être remplis uniquement par un formulaire alors?? Elle ne sont utilisables qu'avec un formulaire bien que réutilisable partout sur les pages du site? (désolé ça doit être vraiment soulant pour vous mais j'ai trop du mal à comprendre la...)

Et puis même si je regarde mon code voilà ce que j'ai dès le début:

$title = '<img src="images/titre_com.gif">';

include "head.php";
include "men.php";
include "fonc.php";
$formErrors = array(); // Message à afficher à l'utilisateur.

if(!isset($_REQUEST['suite'])){$_REQUEST['suite'] = "0";}

// Le produit est-il rempli ?
if( empty($_POST['produit']) )
{
$formErrors[] = 'Vous devez choisir un produit';
}
[...]

On effectue une vérification de formulaire avant même de demander des données à entrer à l'utilisateur...donc comment $_POST peu il être renseigné??
Je n'ai d'ailleurs toujours pas compris à quoi servait cette ligne if(!isset($_REQUEST['suite'])){$_REQUEST['suite'] = "0";}

Ah oui, un autre petit bout de code qui me parait bizarre:

if( empty($_POST['email']) || !setEmail($_POST['email']) )
{
$formErrors[] = 'L\'adresse email que vous avez indiqu�e est incorrecte';
$email = $_POST['email'];
}
Pourquoi on enregistre le mail erroné du coup (puisque on passe dans le IF uniquement si le champ mail est vide ou s'il n'est pas valide) dans la variable $email ??


Et mise à part sa comme je n'ai JAMAIS fait de java (on apprend ça en 2ème année), j'ai du mal à comprendre (je comprend pas du tout en fait) l'utilité et le fonctionnement de ce script:

<script language="javascript1.2" type="text/javascript">
function close(){
document.getElementById('formErrors').style.display = 'none';
}
</script>

Il se situe juste après la vérification du formulaire.

Encore merci pour votre aide et d'avoir le courage de lire mes romans...

Bien cordialement,
VieTgOOx.
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
26 mai 2009 à 10:23
Comme dit précédemment, php remplit ces superglobales en fonction des données fournies par l'utilisateur, au moyen d'un formulaire (post/get) ou de la query string de l'url (get). Ces variables superglobales sont diponibles dans le script correspondant à l'attribut action du formulaire (en fonction de l'attribut method, ce sera soit $_GET, soit $_POST qui sera rempli), ou bien dans le script précédent la query string (mon.site.tld/repertoire/script.php?var=toto : lors de l'exécution de script.php, $_GET['var'] vaudra 'toto').

Il faut que tu comprennes que le formulaire peut être sur une page html, indépendante de la page php. Le formulaire n'a absolument pas besoin d'être créé sur la même page que celle qui va recevoir les données.

Pour l'email, il est peut être utilisé par la suite, je ne peux pas te dire sans avoir tout le code...

JAVASCRIPT N'EST PAS JAVA ! Rien à voir, sinon que le nom de javascript a été choisi pour surfer sur le succès de Java.

Ton script se contente de cacher (à l'affichage) le bloc d'id formErrors, qui contient les erreurs de saisies du formulaire.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour

On effectue une vérification de formulaire avant même de demander des données à entrer à l'utilisateur
Non, on n'effectue pas de vérification avant de demander les données à entrer.
Il faut bien comprendre que le traitement complet se fait en deux appels. Il peut y avoir une première page avec seulement le formulaire et une seconde avec seulement le traitement, ou bien on peut appeler deux fois la même page qui contient le traitement et le formulaire:

Quand la page est appelée la première fois, les isset($_REQUEST['suite']) etc... sont faux car le formulaire n' ayant jamais été saisi, les variables correspondant aux champs ne sont pas définies, donc on ne fait pas le traitement correspondant. Mais on affiche le formulaire.
Ensuite, quand l'utilisateur a rempli le formulaire et cliqué sur le bouton submit, le script est à nouveau appelé, et cette fois, les variables sont remplies et peuvent être traitées.

Pourquoi on enregistre le mail erroné du coup
Je ne connais pas la suite du script, mais c'est probablement pour initialiser le champ email du formulaire qu'on va renvoyer au client pour qu'il corrige son erreur. Ça lui évite d'avoir à tout retaper pour une simple faute de frappe.

Pour ton javascript, en dehors de tout contexte, je ne devine pas. Mais je te signale que java et javascript sont deux langages très différents qui n'ont aucun rapport entre eux.

merci pour votre aide et d'avoir le courage de lire mes romans
Les gens qui demandent à apprendre ne sont pas si courants que ça sur le forum, c'est un plaisir
0
VieTgOOx Messages postés 160 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 9 janvier 2011 26
26 mai 2009 à 11:52
Pardonnez mon abus de langage qui a l'aire de vous faire pas mal réagir =s ...j'utilisais "java" plus en tant qu'abréviation mais bon promis je le ferais plus ^_^!

En fait je crois avoir là encore compris une chose (grâce à vous =) ), quand je remplis le formulaire de façon erroné et que je clique sur Valider, il me re-charge la page mais avec une nouvelle div qui apparait, avec la liste des erreurs dans mon remplissage de formulaire. Mais en aucun cas ça ne m'ouvre une nouvelle espèce de mini fenêtre popup comme je le pensais au début. Sa peu vous paraitre évident mais pas à moi :p ! Et quand je clique sur le "Fermer" c'est la qu'agirais le script javascript alors? Il re-charge à nouveau la page en masquant la div avec les erreurs? Ça doit être sa. Mais il n'a pas a tout retaper...ça laisse les champs tel quel avec le remplissage erroné. Mais alors ça ne re-charge pas la page sinon sa effacerait tout... Bon alors c'est le script qui agis et qui cache ou affiche la div sans que la page ne se re-charge? De toute façon pour tout ce qui concerne le javascript il faut juste que je comprenne le fonctionnement global, pas en détail car ça dépasse un peu mes compétences ^_^!

Sinon, le formulaire est bien sur la même page mais en dessous de la vérification...mais si la ligne if(!isset($_REQUEST['suite'])){$_REQUEST['suite'] = "0";} signifie que tant qu'on a pas remplis le formulaire on passe pas dans le IF, donc dans la vérification, alors ok je comprend. Je suppose que le fait de valider le formulaire, re-chargera la page et l'obligera a passer dans le IF cette fois.

Pour ce qui est de la variable $email qui enregistre un mail erroné, il n'est en aucun cas réutiliser sur la page en tout cas.
Est-il possible que ce soit une erreur?

Je ne voudrais pas paraitre trop arrogant du tout, ce site ayant été crée par un professionnel indépendant, mais...j'ai des doutes sur la qualité du code... exemple:

Est-ce normal d'avoir ceci (juste pour info tous les commentaires que vous pouvez voir quand je colle un code, sont de moi ^_^) :

--------------------------------------------------------------------------------------------------------------------------------
if( empty($_POST['commentaires']) )
{
$formErrors[] = 'Le message doit être inscrit dans le champ commentaires';
}
/*****************************************
* Fin vérification du formulaire
*****************************************/
?>

<script language="javascript1.2" type="text/javascript">
function close(){
document.getElementById('formErrors').style.display = 'none';
}
</script>

<div id="contenu">

<?

if($_REQUEST['suite'] == 0){
print"<font style='font-style:italic;'>Merci de remplir les champs demandés *</font>";
}
--------------------------------------------------------------------------------------------------------------------------------

Je suppose que quelque chose devrait vous choquer...
J'ai des truc similaire de partout surtout au niveau du formulaire:

if(count($formErrors) > 0){
?>

FORMULAIRE

<?
}
else
{
[...] etc...

J'ai plein de div en dehors des balises php et je ne sais pas trop quoi en penser.



Les gens qui demandent à apprendre ne sont pas si courants que ça sur le forum, c'est un plaisir
Sa me fait plus que plaisir de lire ça en tout cas =) ! Pour moi un forum c'est fait pour apprendre non? Puis Comment ça Marche, je trouve que ça correspond assez au fait de chercher à comprendre, donc apprendre ^_^!

Encore merci à vous deux de me fournir votre aide et vos conseils, c'est toujours plaisant de savoir qu'on est soutenu, je me sent moins seul dans mon stage ^_^!
0
Ouh la la, tu dis plein de choses, on va voir les questions une par une si ça ne te fait rien.
Et je vais commencer par la dernière ;) car elle m'intrigue : Tu donnes un bout de code qui devrait me choquer, mais je ne devine pas ce qui devrait me choquer ! Sauf peut-être <? sans php, normalement c'est <?php mais beaucoup de serveurs admettent <? et c'est sûrement le cas du tien, sinon rien ne marcherait.
Le fait d'avoir des <div> en dehors du php ? Mais c'est parfaitement normal. C'est strictement la même chose que de faire echo '<div>'; en php. Le rôle du php est de fabriquer du html (pas forcément, mais le plus souvent) et de l'envoyer au client : quand c'est du html statique (qui ne résulte pas d'un traitement par PHP) c'est souvent préférable de le mettre justement en dehors des balises php, comme quand on écrit sa page directement en html.
Mais ça n'est peut-être pas ça que tu voulais dire ?
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
26 mai 2009 à 12:20
Pas de problème pour ton erreur, mais beaucoup de monde confond les deux, il convient de clarifier les choses avant d'en discuter ;-p

Le Javascript agit côté client, donc effectivement, le bloc est modifié sans rechargement de la page.

Tous les professionnels sont loin de faire du bon travail, tu peux donc avoir des doutes. Cependant dans ton cas, le code est tout à fait acceptable. Il faut savoir que dans une page php, tout ce qui n'est pas entre les balises <?php et ?> ne sera pas passé à l'interpréteur et sera renvoyé au client tel quel. Il est donc normal de renvoyer directement les balises HTML (et donc le Javascript) sans les faire passer par PHP, ce qui ne ferait que ralentir (pas énormément cela dit) l'exécution.
0
VieTgOOx Messages postés 160 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 9 janvier 2011 26
26 mai 2009 à 12:50
Pour le père, ce qui me choque c'est pas les balises courte mais bien le fait d'avoir des div en dehors de balises php, ou même encore des IF, etc...

Si je dit ça c'est aussi car je pensais que c'était la raison à l'affichage d'un grand nombre de NOTICE dans le header, que j'ai dû cacher pour que les pages s'affichent correctement en ajoutant
& ~E_NOTICE
à la ligne suivante dans le fichier php.ini : error_reporting = E_ALL
Ce qui me donne: error_reporting = E_ALL & ~E_NOTICE

J'ai cru comprendre que si sa m'affichait autant de notices c'était parce que le code était "pas net" et je pensais que ça venait de là.

Merci pour tes précisions pyschopathe.

Donc, si j'ai bien compris, le fait de mettre une div en dehors des balises php, va renvoyer tel quel au client le contenu de la div ?
Mais pour un IF qui n'est pas dans une balise php? Sa agis comment au juste? Le if peut pas apparaitre comme ça sur le client o_O ... ET le fait de fermer et de rouvrir une balise php comme sa en plein milieu d'un IF ou d'une div, je sais pas, c'est conventionnel ça? J'ai jamais vu ça en cour, après c'est vrai qu'il y a souvent un grand pas entre le monde du travail et ce qu'on apprend à l'école mais bon ^_^.

Donc quand il écrit la totalité du formulaire hors des balises PHP c'est pour gagner en rapidité d'exécution alors?

Petite précision: En fait on a surtout vu en cours le html et css, mais pas tellement de php. Bien sûr il faut que mon stage porte en totalité sur du php >_<...depuis je me suis donc pas mal documenté mais bon, je découvre des choses tous les jours c'est pas plus mal =D !
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
26 mai 2009 à 13:04
Tu devrais regarder les notice, ça peut t'informer sur un certain nombre de choses à éviter ;-p

En ce qui concerne d'éventuels if en dehors des balises php, il n'y en a pas ! Si c'étati le cas, le texte if([...]) serait affiché dans la page résultante. Par contre il met parfois le corps du if, c'est à dire le code html à afficher hors des balises <?php ?>, ce qui est parfaitement légitime puisqu'il s'agit de contenu statique (c'est plus lisible qu'une série de echo "\t<p>blahblah</p>\n").

J'ai dit que les performances étaient améliorées, mais c'est vraiment négligeable, l'avantage est surtout la lisibilité du code. C'est aussi une question de préférence personnelle.

En ce qui conerne ta formation, enseigner html et css et proposer un stage en php n'est pas très normal : ni html, ni css ne sont des langages de programmation ! Cela dit, tu as là une bonne occasion d'apprendre, c'est à ça que servent les stages !

Pour apprendre php en douceur, je te conseille d'aller voir sur le siteduzero, le tuto proposé est très accessible. Et pour comprendre toutes les fonctions rencontrées, il n'y a pas mieux que la documentation officielle.

https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql
https://www.php.net/docs.php
0
VieTgOOx Messages postés 160 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 9 janvier 2011 26
26 mai 2009 à 16:03
En fait on est censé avoir vu le PHP, mais disons qu'on l'a vue de façon tellement superficiel que je galère un peu en stage aujourd'hui mais bon.

On a pas appris le HTML et CSS en programmation mais en web, et mis à part le PHP c'est tout ce dont on a vu. En progra on a appris le VB, VBA, C++ et c'est tout, sinon l'algo classique sur feuille pour les interros quoi.
Enfin bon peu importe c'est tellement bien la programmation que c'est un vrai plaisir pour moi ^^! Normalement mon stage s'arrête à 15h30, heures des employés de l'entreprise, hier j'étais encore la à 17h30 c'est pour dire =p ! Je suis surement fou ^_^ !

En fait je préfère largement interagir sur forum avec des personnes qui sont souvent de vrai professionnel comme toi je suppose et qui peuvent me donner une réponse adapté au code dont je dispose...lire des tutos ou des cours sur le net, sa permet de se pré-informer avant de poser des questions et c'est toujours ce que je commence par faire (en générale même si aujourd'hui j'ai posé pas mal de question sans vraiment savoir de quoi il en retournait) car en général on ne retrouve jamais exactement les mêmes situation sauf si c'est nous qui écrivons le code...la je l'annalyse, j'essaye de comprendre "comment ça marche" (dédicace au site =p).
Mais au final sa reste trop "école"...en tout cas en cours on vie avec le site du zéro, alors à force disons que sa me pompe un peu... Obtenir des explications par forum c'est beaucoup plus chaleureux et encourageant je trouve, après c'est sur que je vais pas pouvoir vous "emmerder" toutes les 5 minutes mais bon ^_^!

Pour donner un exemple les variables superglobale $_GET, $_POST et $_REQUEST j'avais lu des cours sur le net, et j'y comprenais rien du tout. En fait j'ai toujours un peu de mal à comprendre surement parce que je comprend pas bien le fonctionnement d'une méthode. Pour GET par exemple, a quel moment php va définir sa valeur?? Je sais que sa fait plusieurs fois que vous essayez de m'expliquer, j'ai bien compris que ça met le nom de la valeur et la valeur dans l'url mais je ne comprend toujours pas.

Dites moi si j'ai raison:
On entre une valeur dans un champ de formulaire.
La valeur "toto" est enregistré dans le nom de variable "Var1"

Soit $Var1 = 'toto'

A quel moment "http[...]\machin.php?Var1=toto" va-t-il s'afficher?? Et la page machin.php, c'est censé être la page du formulaire?? N'importe quel page?? AAAHHH sa m'énerve et j'ai beau lire des cours je comprend pas >_<! Vous me l'avez surement déjà expliqué déjà 3 fois dans vos post mais j'arrive pas à comprendre ce que vous voulez dire.

On remplit le formulaire, on fait valider, et quoi? Y'a tous les noms des variables avec leur valeurs qui apparaissent dans l'URL? Mais logiquement si je clique sur un autre lien tout disparait et y'a plus rien dans l'url alors comment pourrais-je réutiliser ces valeurs sur d'autre page si elle disparaissent? Vous me direz: Ben elle sont toujours stocké! Oui ok mais alors sa sert à quoi de les mettre dans l'URL >_< !
Enfin je sais pas si je me fait bien comprendre...je pense pas vu que quand je suis dans "mon truc", pour l'expliquer c'est pas simple...et j'ai l'impression de tout confondre et d'être complètement embrouillé.

Merci de votre patience.

Bien cordialement,
VieTgOOx, Stagiaire Passionné ^^!
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
26 mai 2009 à 16:47
Bon, reprenons ^^... Le tableau $_GET (ainsi que les autres) est rempli par le moteur php avant de commencer l'exécution du script appelé.

En gros, l'utilisateur soumet un formulaire, ou clique sur un lien contenant une url avec des paramètres, la requête est envoyée au serveur web (comme apache), qui détermine que la page appelée est un script php. Le serveur web appelle l'exécutable php en lui passant le nom de la page demandée, ainsi que les paramètres de la requête. A partir de ces paramètres, php remplit les superglobales et les met à disposition du script appelé.

Lorsque j'ai dit que les superglobales étaient disponibles dans toute l'application, je me suis mal exprimé... Leur durée de vie est limité, comme pour toutes les variables, à la durée d'exécution du script. Cependant, leur portée est globale, ce qui signifie que tu peux y accéder depuis toutes les fonctions, méthodes de classes, fichiers inclus de ton script.

Le script qui va traiter les données peut être n'importe quelle page, du moment qu'elle a été écrite pour ça. Elle pourrait même se trouver sur un autre serveur, puisque ces données sont transmises par le protocole http, qui n'a rien à voir avec php.

Je ne comprends pas ce que tu veux dire avec ton histoire de $Var1='toto'. Ceci ne peut pas être converti directement en url?Var1=toto... Je te rappelle que php est un langage côté serveur, tu ne peux donc pas exécuter de php côté client.

Essaie de clarifier ta question, je tâcherai d'y répondre.
0
VieTgOOx Messages postés 160 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 9 janvier 2011 26
28 mai 2009 à 08:57
AAAHHH! Ok je crois que j'ai compris ^_^!

Exemple:
J'ai un formulaire ou j'ai 2 champs à remplir admettons Nom et Prénom.

Si je renseigne les champs en tant qu'utilisateur tel que:
Nom: Henri
Prénom: Thierry

Que je clique sur Valider, ça va m'inscrire dans l'URL https://www.pagesjaunes.fr/?nom=Henri&prenom=Thierry

Sa ok. Jusque la j'avais compris. Mais je ne voyais pas, une fois le bouton valider, vers quel page sa pouvais bien renvoyer...au niveau de l'interface.
Pour être plus claire, si mon formulaire c'est la page machin.php, logiquement l'URL sera lorsque je renseignerais le formulaire : https://www.pagesjaunes.fr/
Une fois validé, une condition fera que le formulaire disparaitra de la page machin.php pour m'afficher à la place une phrase du genre "Votre inscription a bien été prise en compte, vous recevrez un mail dans les plus bref délais" (par exemple). C'est donc au moment ou cette phrase s'affichera à l'utilisateur que l'URL suivant s'affichera: https://www.pagesjaunes.fr/?nom=Henri&prenom=Thierry
C'est donc au moment ou je valide le formulaire, que php va lire les valeurs entrée par l'utilisateur et renseigner $_GET, ces valeurs étant utilisées dans un script php (mais toujours dans la page machin.php) qui va par exemple envoyer un mail au webmaster de l'entreprise avec le nom et prénom du nouvel utilisateur, ou un mail au nouvel inscrit avec son nom et prénom du genre "Bonjour M. Henri Thierry". Enfin bref ce ne sont que des exemples.

C'est bien cela?
Mais j'ai tout de même une dernière question si cette fois j'ai bien compris le fonctionnement de GET ^_^. A quel moment on va dire à PHP qu'on veux utiliser GET ou qu'on veux utiliser POST si on a par exemple pas envie que les infos s'affichent dans l'URL (surtout si on a beaucoup de champ à remplir pour pas que l'URL soit maxi long).
Aussi: si comme tu l'as indiqué on clique sur un liens déjà renseigné donc écris par nous même du genre:
https://www.pagesjaunes.fr/?ville=Paris&pays=France&genre=3
PHP va savoir qu'il doit renseigner GET (et pas POST vu l'URL) avec ville=Paris, etc... Mais pourquoi mettre ces paramètres dans un URL nous même...ça voudrais dire que c'est des variable constante puisque ce sera toujours les même sauf si on modifie l'URL mais bon c'est pas très pratique. Si elle sont constante, pourquoi ne pas utiliser des variables normale DANS le script et les réutiliser partout ou on en a besoin?

J'espère avoir bien compris cette fois ^^ merci pour ton aide très apprécié pyscopathe.

Bien cordialement,
VieTgOOx.

PS: Désolé de ne pas avoir répondu hier, j'ai essayé mais il y avait des problèmes vraiment bizarre sur le forum, les derniers sujet que je voyais étaient du 25 avril 2009 o_O ! Incompréhensible.
0
VieTgOOx Messages postés 160 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 9 janvier 2011 26
28 mai 2009 à 08:59
AAAHHH! Ok je crois que j'ai compris ^_^!

Exemple:
J'ai un formulaire ou j'ai 2 champs à remplir admettons Nom et Prénom.

Si je renseigne les champs en tant qu'utilisateur tel que:
Nom: Henri
Prénom: Thierry

Que je clique sur Valider, ça va m'inscrire dans l'URL https://www.pagesjaunes.fr/?nom=Henri&prenom=Thierry

Sa ok. Jusque la j'avais compris. Mais je ne voyais pas, une fois le bouton valider, vers quel page sa pouvais bien renvoyer...au niveau de l'interface.
Pour être plus claire, si mon formulaire c'est la page machin.php, logiquement l'URL sera lorsque je renseignerais le formulaire : https://www.pagesjaunes.fr/
Une fois validé, une condition fera que le formulaire disparaitra de la page machin.php pour m'afficher à la place une phrase du genre "Votre inscription a bien été prise en compte, vous recevrez un mail dans les plus bref délais" (par exemple). C'est donc au moment ou cette phrase s'affichera à l'utilisateur que l'URL suivant s'affichera: https://www.pagesjaunes.fr/?nom=Henri&prenom=Thierry
C'est donc au moment ou je valide le formulaire, que php va lire les valeurs entrée par l'utilisateur et renseigner $_GET, ces valeurs étant utilisées dans un script php (mais toujours dans la page machin.php) qui va par exemple envoyer un mail au webmaster de l'entreprise avec le nom et prénom du nouvel utilisateur, ou un mail au nouvel inscrit avec son nom et prénom du genre "Bonjour M. Henri Thierry". Enfin bref ce ne sont que des exemples.

C'est bien cela?
Mais j'ai tout de même une dernière question si cette fois j'ai bien compris le fonctionnement de GET ^_^. A quel moment on va dire à PHP qu'on veux utiliser GET ou qu'on veux utiliser POST si on a par exemple pas envie que les infos s'affichent dans l'URL (surtout si on a beaucoup de champ à remplir pour pas que l'URL soit maxi long).
Aussi: si comme tu l'as indiqué on clique sur un liens déjà renseigné donc écris par nous même du genre:
https://www.pagesjaunes.fr/?ville=Paris&pays=France&genre=3
PHP va savoir qu'il doit renseigner GET (et pas POST vu l'URL) avec ville=Paris, etc... Mais pourquoi mettre ces paramètres dans un URL nous même...ça voudrais dire que c'est des variable constante puisque ce sera toujours les même sauf si on modifie l'URL mais bon c'est pas très pratique. Si elle sont constante, pourquoi ne pas utiliser des variables normale DANS le script et les réutiliser partout ou on en a besoin?

J'espère avoir bien compris cette fois ^^ merci pour ton aide très apprécié pyscopathe.

Bien cordialement,
VieTgOOx.

PS: Désolé de ne pas avoir répondu hier, j'ai essayé mais il y avait des problèmes vraiment bizarre sur le forum, les derniers sujet que je voyais étaient du 25 avril 2009 o_O ! Incompréhensible....et c'est toujours le cas d'ailleurs j'arrive pas a poster >_< !
0
VieTgOOx Messages postés 160 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 9 janvier 2011 26
28 mai 2009 à 09:18
AAAHHH! Ok je crois que j'ai compris ^_^!

Exemple:
J'ai un formulaire ou j'ai 2 champs à remplir admettons Nom et Prénom.

Si je renseigne les champs en tant qu'utilisateur tel que:
Nom: Henri
Prénom: Thierry

Que je clique sur Valider, ça va m'inscrire dans l'URL https://www.pagesjaunes.fr/?nom=Henri&prenom=Thierry

Sa ok. Jusque la j'avais compris. Mais je ne voyais pas, une fois le bouton valider, vers quel page sa pouvais bien renvoyer...au niveau de l'interface.
Pour être plus claire, si mon formulaire c'est la page machin.php, logiquement l'URL sera lorsque je renseignerais le formulaire : https://www.pagesjaunes.fr/
Une fois validé, une condition fera que le formulaire disparaitra de la page machin.php pour m'afficher à la place une phrase du genre "Votre inscription a bien été prise en compte, vous recevrez un mail dans les plus bref délais" (par exemple). C'est donc au moment ou cette phrase s'affichera à l'utilisateur que l'URL suivant s'affichera: https://www.pagesjaunes.fr/?nom=Henri&prenom=Thierry
C'est donc au moment ou je valide le formulaire, que php va lire les valeurs entrée par l'utilisateur et renseigner $_GET, ces valeurs étant utilisées dans un script php (mais toujours dans la page machin.php) qui va par exemple envoyer un mail au webmaster de l'entreprise avec le nom et prénom du nouvel utilisateur, ou un mail au nouvel inscrit avec son nom et prénom du genre "Bonjour M. Henri Thierry". Enfin bref ce ne sont que des exemples.

C'est bien cela?
Mais j'ai tout de même une dernière question si cette fois j'ai bien compris le fonctionnement de GET ^_^. A quel moment on va dire à PHP qu'on veux utiliser GET ou qu'on veux utiliser POST si on a par exemple pas envie que les infos s'affichent dans l'URL (surtout si on a beaucoup de champ à remplir pour pas que l'URL soit maxi long).
Aussi: si comme tu l'as indiqué on clique sur un liens déjà renseigné donc écris par nous même du genre:
https://www.pagesjaunes.fr/?ville=Paris&pays=France&genre=3
PHP va savoir qu'il doit renseigner GET (et pas POST vu l'URL) avec ville=Paris, etc... Mais pourquoi mettre ces paramètres dans un URL nous même...ça voudrais dire que c'est des variable constante puisque ce sera toujours les même sauf si on modifie l'URL mais bon c'est pas très pratique. Si elle sont constante, pourquoi ne pas utiliser des variables normale DANS le script et les réutiliser partout ou on en a besoin?

J'espère avoir bien compris cette fois ^^ merci pour ton aide très apprécié pyscopathe.

Bien cordialement,
VieTgOOx.

PS: Désolé de ne pas avoir répondu hier, j'ai essayé mais il y avait des problèmes vraiment bizarre sur le forum, les derniers sujet que je voyais étaient du 25 avril 2009 o_O ! Incompréhensible.
0
VieTgOOx Messages postés 160 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 9 janvier 2011 26
28 mai 2009 à 12:29
-_- youpi ça m'a tout affiché les même messages que j'ai posté...je vais passer pour un flooder...je comprend rien à pourquoi sa ne m'affichait pas les messages...c'était général ou ça n'arrivait qu'à moi?? Parceque hier c'été encore pire ça me mettait plein d'erreur dès que j'essayais de venir sur cette partie du forum (webmastering) , je pouvais pas me connecter, enfin bref...l'horreur complet.
Là sa à l'aire de remarcher.

Enfin bref si un modérateur passe par la s'il pouvait supprimer les message en trop sans me sanctionner sa serait sympa.
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
28 mai 2009 à 15:30
Le site était down hier entre 3h et 17h environ, ce n'était pas que toi. Pour ton message en triple exemplaires, signale le toi-même aux modos en précisant la raison, il ne devrait pas y avoir de problème.

Vu ton récapitulatif, j'ai l'impression que tu n'as encore pas tout à fait compris ce que je t'ai expliqué.

Mettons que tu as un formulaire html (qui n'a rien a voir avec php) de cette forme :
<form method="get" action="http ://mon.site.tld/traitements/truc.php">
  <input type="text" name="nom" />
  <input type="text" name="prenom" />
  <input type="submit" />
</form>
Ce formulaire indique au navigateur qu'à sa soumission, il faudra envoyer une requête HTTP de type GET à la page http ://mon.site.tld/traitements/truc.php. Le navigateur va construire la requête en ajoutant la query string au chemin de la page. Ensuite il appelle l'url à laquelle il concatène la query string, ce qui donne :
http ://mon.site.tld/traitements/truc.php?nom=<valeur saisie>&prenom=<valeur saisie>
Si on avait spécifié method="post" dans le formulaire, on aurait indiqué au navigateur que la requête à effectuer à la soumission était de type HTTP POST. Dans ce cas, le navigateur aurait envoyé un requête HTTP POST à la page indiquée, en ajoutant dans les en-têtes les paires clé=valeur correspondant aux champs du formulaire :
nom=<valeur saisie>
prenom=<valeur saisie>
Pour rappel, lorsque tu clique sur un lien, que tu saisis une url, que tu récupères une page de manière classique, tu effectues une requête HTTP GET.

Comme tu l'auras remarqué, la construction et le lancement de la requête sont donc gérés par le navigateur. Le serveur situé à l'url indiquée va ensuite tenter de satisfaire cette requête selon le processus indiqué dans mon dernier post, la méthode étant indiquée dans les en-têtes, et renverra le résultat de cette exécution au navigateur, qui l'affichera. L'url indiquée par le navigateur est l'url pour laquelle il a effectué la requête.

Tu peux cependant créer toi-même ta requête de type GET, statiquement (directement dans une page html) ou dynamiquement (génération par php en fonction de certains paramètres). Par exemple tu pourrais avoir une navigation de la forme :
http ://mon.site.tld/index.php?categorie=<nom de la catégorie>
pour ton site de e-commerce.
Toutes les requêtes passent donc par la même page index.php, qui va ensuite, par exemple, interroger une base de données pour récupérer les produits correspondant à la catégorie.

Tu ne vas pas faire un formulaire pour demander à l'utilisateur quelle catégorie il veut visiter, tu vas plutôt générer un menu avec des liens vers les différentes catégories existant dans ton site. Ces liens seront donc créés par ton application.

J'espère que les choses sont plus claire maintenant et que mes exemples ne t'ont pas perdu plutôt qu'éclairé !

Et je te rappelle que, dans le cas où ton formulaire est généré dans une page php par exemple, il n'est absolument pas obligatoire qu'il soit traité dans la même page : tu peux très bien avoir une page form_generation.php qui crée une page avec un formulaire dont la soumission est envoyée à form_traitement.php.
0
VieTgOOx Messages postés 160 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 9 janvier 2011 26
29 mai 2009 à 12:31
Ok cette fois j'ai compris ^^ !

J'ai copié collé ta réponse dans un doc word et je la garde avec moi des fois que le site re-crash :p mdr! Non mais elle est parfaite ta réponse sincèrement, je pense vraiment avoir compris cette fois, et le fait de la garder dans un doc word je la relis de temps en temps quand j'ai des doutes sur leur fonctionnement.
^^ c'est super cool de ta part d'avoir pris le temps de me lire tout le long, et surtout de me répondre. Écrire un message aussi long que le dernier que tu m'as mis la, ça prend du temps ^^!

Je met le topic en résolu !

Sinon j'ai d'autres questions qui n'ont pas forcément quelque chose à voir avec les superglobales. Mais je veux plus t'embêter donc n'y répond que si t'as vraiment le temps! C'est ça l'inconvénient d'avoir un maître de stage qui n'y connait rien en web et en développement...pour avoir de l'aide quand on y arrive pas c'est pas si simple ^^, et quand on y arrive on ne lâche plus :p !

Voici ma question (courte je fait surtout du copié collé de code ^^) !

J'ai ce code dans ma feuille css:

html {
background: white url("../images/fond1.gif") no-repeat scroll 700px 0;
font: 80% Georgia, serif;
color: #333;
}

body {
max-width: 1000px;
margin: 0;
padding: 0;
background: transparent url('../images/bande.png') repeat-y scroll 150px 0; /*En dessous de la div texte, se répète en fonction de la taille en hauteur*/
}

Comme tu dois t'en rendre compte, le site n'est pas centré mais calé tout à gauche.

Je veux le centrer. J'ai donc changé margin: 0 en margin: auto ...et ça marche...sauf que l'image en background dans le html pose problème...elle est visiblement indépendante et quand le site ce centre, elle, elle reste à 700px à droite par rapport à la bordure gauche de l'écran...en gros elle passe sous le site et on la vois plus.

J'ai donc pris une grande décision, créer une div! Lol.

Voici donc le code dans ma feuille css (modifié):

html {
font: 80% Georgia, serif;
color: #333;
}

body {
max-width: 1000px;
margin: auto;
padding: 0;
background: transparent url('../images/bande.png') repeat-y scroll 150px 0;
}

div<id="essai">{
width: auto;
height: auto;
background: white url("../images/fond1.gif") no-repeat scroll 700px 0; (le site fait 700px de large sans l'image et 1000 avec logiquement. D'ou le placement à 700px...)
font: 80% Georgia, serif;
color: #333;
}

Et dans mon header avant j'avais ça:

html {
background-image: url("images/'. $imgs[0] .'")
}

je l'ai supprimé pour mettre ceci:

div<id="essai"> {
background-image: url("images/'. $imgs[0] .'")
}

Mais ça ne marche pas, les différentes images n'apparaissent pas celons les différentes page (l'image est censé changer à chaque page celons le tableau).

J'ai testé plein de truc, même de mettre le background dans le body, mais l'image reste derrière le site.
A ma façon avec la div, l'image n'apparait même pas j'ai juste un gros cadre marron gris qui apparait derrière le site (de largeur de moitié du site a peu près) et continue jusqu'en bas de l'écran.

Par contre si je met juste

div {
background-image: url("images/'. $imgs[0] .'")
}

dans mon header, et :

div {
width: auto;
height: auto;
background: white url("../images/fond1.gif") no-repeat scroll 700px 0;
}

la ça marche sa m'affiche bien les différentes photos et tout...mais...sa m'en affiche aussi de partout sur le site...sa me modifie des polices de caractère, enfin bref autan dire, la merde quoi.

Je ne sais plus trop quoi faire, sa a l'aire de provenir du moment ou je donne un nom à ma div pour la reconnaitre je ne sais pas...ai-je oublié une étape celon toi? Quelque chose d'impératif à modifier?

Encore merci de ton aide et de ta patience ^^! Je sais pas si j'aurais pas pété un câble avec quelqu'un comme moi :p on lui explique mais il pige rien, ça doit être énervant enfin bref.

Bon appétit!
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
29 mai 2009 à 12:58
Habituellement je ne suis pas patient, tu as de la chance, ce sujet fait partie des exceptions ^^ !

Pour ton problème (que j'ai, je l'avoue, lu en diagonale), si j'ai bien compris, tu cherches à centrer ton site avec une image de fond. Ton idée de faire une div n'est pas mauvaise, c'est comme ça que je ferais. En gros tu aurais donc un code de ce genre là :
<html>
  <head>
    <!-- blah blah -->
  </head>
  <body>
    <div id="body">
      <!-- blah blah -->
    </div>
  </body>
</html>
Ensuite dans ton css, tu remplaces toutes tes occurences de body par div#body. Je pense que ça devrait marcher. Tiens-moi au courant.

edit : Si ça ne résoud pas le problème, ouvre un nouveau sujet, il y a un paquet de gens qui maîtrisent mieux le sujet que moi ici, tu auras plus de réponses.
0
VieTgOOx Messages postés 160 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 9 janvier 2011 26
29 mai 2009 à 14:38
J'ai fait ce que tu m'as dit mais ça ne fonctionne pas =(

C'est pas grave, je vais ouvrir un nouveau sujet comme tu m'as dit ^^

En fait il faut bien comprendre que à la base, j'ai le site qui fait 700px de large qui n'est pas centré mais tout a gauche de l'écran. Une image est inséré grâce au background dans la feuille css dans:

html {
background: transparent url("../images/fond1.gif") no-repeat scroll 700px 0;
font: 80% Georgia, serif;
color: #333;
}

et comme indiqué par le "no-repeat scroll 700px 0;" l'image est placé à 700px du bord gauche de l'écran. L'image fait 300px de large donc le site fait 1000px en tout quoi.

Sauf que quand dans je change le margin de mon body (toujours dans la feuille css) pour le passer en auto pour que le site soit centré (par ce code:)

body {
max-width: 1000px;
margin: auto;
padding: 0;
background: transparent url('../images/bande.png') repeat-y scroll 150px 0;
}

Sa ne me prend pas en compte l'image inséré dans le html{ } qui du coup disparait derrière le site une fois centré, comme son positionnement de 700px par rapport au bord gauche de l'écran ne change pas.

Donc j'avais pensé créer une div pour y placer l'image plutôt qu'elle soit dans le html{ }. Sa marche si je ne nome pas la div sauf que sa me bousille le reste du site. Et si je nome la div, l'image ne s'affiche même pas...c'est pas qu'elle soit mal placé ou quoi, non, elle ne s'affiche pas >_<! Enfin bref.

Encore et encore, et encore merci pour ton aide très apprécié. Je sais que je me répète mais je ne te le dirais jamais assez à mon goût ! Merci surtout pour ta patience (moi non plus je suis pas patient du tout XD) ! Mais c'est vraiment cool de trouver des personnes comme toi encore prête à prendre presque 1h par jours (voir plus je me rend pas bien compte) pour aider les petits nouveau ^^!

Bonne journée à toi et bonne continuation.

En espérant qu'on aura l'occasion de reprendre contact, que je puisse remettre à rude épreuve ta patience ^^!

Amicalement,
Guillaume.

PS: Merci aussi à "le père" qui a pris pas mal de temps pour me lire et m'aider aussi bien qu'il ai abandonné en cours de route :p ce qui peu être tout à fait compréhensible vu l'insistance de mon incompréhension ^^ !
0
pyschopathe Messages postés 1973 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
29 mai 2009 à 15:04
Envoie moi le lien du nouveau sujet par mp, je ne sais pas si j'aurai le temps d'y jeter un coup d'oeil ce weekend mais dès que j'ai cinq minutes je me penche sur la question.

Et de rien encore !
0