Redirections et PHP ...

SveDec

Membre actif
12 Mai 2004
676
44
Paris
Bonsoir :)
Voilà, je vous expose la situation :
J'ai fait un formulaire, calssique, en HTML, sur une page index.php qui envoie ses infos à une page verif.php qui vérifie si les infos données sont bien.
Voilà le code du formulaire :
<FOM ACTION="verif.php" METHOD=POST ENCTYPE="text/plain">
Tu es
<SELECT NAME="liste">
<OPTION VALUE="noname">Choisis ton nom !
<OPTION VALUE="dupond">Monsieur Dupond
<OPTION VALUE="durand">Mr Durand
</SELECT>
et tu sera
<SELECT NAME="liste">
<OPTION VALUE="nodecision">Alors ? ^^
<OPTION VALUE="present">Pr&eacute;sent(e)
<OPTION VALUE="absent">Absent(e)
</SELECT>
<BR><BR>
<INPUT TYPE="submit" VALUE="Envoyer">
</FORM>
Jusque là rien de particulier ^^
Mais maintenant ca se corse ^^
Je débute en PHP, donc premièrement je voulais savoir si le code de verif.php est bon, et deuxièmement, savoir comment rediriger une deuxième fois (donc cette fois-ci pas avec un tableau html mais avec du php !) les informations données si elle sont bonnes. Ici, je veux que quand "Choisis ton nom" et/ou "Alors ? ^^" sont sélectionnés s'affiche un message d'erreur, mais que Quand Monsieur Dupond ou Monsieur durand, avec "Présent(e)" ou "Absent(e)" soit sélectionnés, Le texte "Merci d'avoir répondu, + Mr Dupond ou + Mr Durand", et que les inofs que Mr Dupond ou Mr Durand ont entré soient redirigés une nouvelle fois, vers index.php, ou siège un tableau qui doit être rempli ^^
Et donc j'en suis bloqué à la redirection ...
Voici le code :
<?php
$noname = $_POST['noname'];
$nodecision = $_POST['nodecision'];
if($noname)
{
print("<CENTER>Tu n\'a pas mis ton nom !</CENTER>");
}
if($nodecicion)
{
print("<CENTER>Tu n\'a pas dit si tu &eacute;tais disponible ou non</CENTER>");
exit();
}
$phrase = 'Merci d\'avoir r&eacute;pondu, ';
$dupond = $_POST['dupond'];
if($dupond)
{
print("<CENTER>$phrase $dupond");
exit();
}
$durand = $_POST['durand'];
if($durand)
{
print("<CENTER>$phrase $durand");
exit();
}
?>
J'espère m'être fait comprendre, car moi-même je m'embrouille un peu, alors que ca ne doit pas être si difficile ^^
Merci d'avance !
 
Bon, alors...

D'abord 2 remarques:
- Le Code HTML est pas top (les 2 <br> là...), et dans le code PHP il vaut mieux éviter d'ouvrir une balise sans la fermer (<CENTER>), sauf si tu es certain qu'elle va être fermée.
- J'aime pas trop ton code, mais c'est une question de goût et d'habitude... perso je n'aime pas trop les exit() dans les instructions conditionnelles. Et je trouve ça pas très clair à lire (mais encore, question d'habitude).

Pour transmettre des infos entre les pages, tu as basiquement 4 solutions: GET, POST, cookies, sessions. Les sessions représentent la solution classique que l'on utilise en général pour conserver des valeurs de page en page (genre pour un formulaire d'identification, ce à quoi ton code ressemble un peu).

Tu mets ça en haut de tes fichiers:
session_start();

Puis tu travailles avec le tableau $_SESSION[], comme avec n'importe quel tableau. Les données seront conservées pendant un court moment (en général 30min-1 heure), ou jusqu'à ce que le visiteur ferme son navigateur. Tu pourras donc accéder à ces données de page en page.

Mais si tu veux faire une simple redirection, il vaut peut être mieux utiliser GET:
if (martin et dupont c'est bon) { echo code javascript de redirection: machin.php?q=ok }
else { echo code javascript de redirection: machin.php?q=pasok }

Et dans machin.php:
if($_GET['q'] == 'ok') {code si c'est ok}
else {code si c'est pas ok}

Enfin voilà :p après faudrait savoir exactement ce que tu veux faire pour mieux conseiller.
 
  • J’aime
Réactions: SveDec
Oui les <BR> et les <CENTER> sont des erreurs d'inatention ^^
Alors ensuite j'ai aps tt suivi, parce que je n'ai jamais entendu parler de la méthode SESSIONS ^^
Tu pourrais expliquer, ou réécrire le code avec cette méthode d'envoi ?
Parce qu'en plus je fais un peu la confusion ds tes explications entre le code de machin.php et verif.php
dsl et merci :rose:
 
Me révoilà :)
Alors, la tête du formulaire dans index.php serait donc :
<FOM ACTION="verif.php" METHOD=SESSION ENCTYPE="text/plain">
N'est ce pas ?
Et dans verif.php, un code comme celui-ci marcherait-il :
<?php
session_start();
$noname*=*$_SESSION['noname'];
$nodecision*=*$_SESSION['nodecision'];
if($noname)
{
print("<CENTER>Tu n\'a pas mis ton nom !</CENTER>");
}
if($nodecicion)
{
print("<CENTER>Tu n\'a pas dit si tu &eacute;tais disponible ou non</CENTER>");
and exit(
<script language="javascript" type="text/javascript">
<!--
window.location.replace("http://moi.free.fr/dossier/index.php");
-->
</script>
);
}
$phrase = 'Merci d\'avoir r&eacute;pondu, ';
$anais*=*$_SESSION['anais'];
if($anais)
{
print("<CENTER>$phrase $anais</CENTER>");
and exit(
<script language="javascript" type="text/javascript">
<!--
window.location.replace("http://moi.free.fr/dossier/index.php");
-->
</script>
);
}
$balthazar*=*$_SESSION['balthazar'];
if($balthazar)
{
print("<CENTER>$phrase $balathazar</CENTER>");
and exit(
<script language="javascript" type="text/javascript">
<!--
window.location.replace("http://moi.free.fr/dossier/index.php");
-->
</script>
);
}
?>
Ou je me goure totalement, avec les exit() et tt ça ? ^^
 
Je viens de penser à autre chose ... à défaut d'avoir une redirection automatique, une simple redirection sous forme de lien HTML permettrait-il à index.php d'obtenir les informations du formulaire ?
 
euh... attendez !!

quand tu as un formulaire sous la forme :
<FOM ACTION="verif.php" METHOD="POST" ENCTYPE="text/plain">
Tu es
<SELECT NAME="liste">
<OPTION VALUE="noname">Choisis ton nom !
<OPTION VALUE="dupond">Monsieur Dupond
<OPTION VALUE="durand">Mr Durand
</SELECT>
et tu sera
<SELECT NAME="liste">
<OPTION VALUE="nodecision">Alors ? ^^
<OPTION VALUE="present">Pr&eacute;sent(e)
<OPTION VALUE="absent">Absent(e)
</SELECT>
<BR><BR>
<INPUT TYPE="submit" VALUE="Envoyer">
</FORM>
je te conseil d'ecrire tout le html en minuscule et de mettre tout les valeurs des attributs entre guillemets double :)

le PHP ne récupère pas $_POST['noname'] mais il recupère le nom de la liste ($_POST['nom_de_la_liste']) et lui donne comme valeur la selection faite par l'utilisateur donc déjà t'es deux liste ne doivent pas s'appeler pareil !! donc remplace "<SELECT NAME="liste">" par "<select name="nom">" et "<select name="desision">" ton code PHP devraie ressembler à ça :
<?php
$name = $_POST['nom'];
$decision = $_POST['decision'];

if ($name == 'noname') {
echo 'Tu n\'as pas mis ton nom !!';
}
esleif ($desision == 'nodecision') {
echo 'Tu n\'a pas dit si tu &eacute;tais disponible ou non.';
}
else {
echo 'Merci d'avoir répondu que tu serais ' . $desision . ', ' . $name . '.';
}
?>

voila...

ensuite, je te conseil d'aller faire un petit (je veut dire GRAND et LONG) tour sur le Site du Zéro / section php

pour la redirection après, utilise les sessions comme te le conseil SveDec ;)

:zen:
 
  • J’aime
Réactions: SveDec
truk2oof a dit:
le PHP ne récupère pas $_POST['noname'] mais il recupère le nom de la liste ($_POST['nom_de_la_liste']) et lui donne comme valeur la selection faite par l'utilisateur donc déjà t'es deux liste ne doivent pas s'appeler pareil !! donc remplace "<SELECT NAME="liste">" par "<select name="nom">" et "<select name="desision">"
Ah oui merci j'avais pas vu !

truk2oof a dit:
ton code PHP devraie ressembler à ça :
<?php
$name = $_POST['nom'];
$decision = $_POST['decision'];

if ($name == 'noname') {
echo 'Tu n\'as pas mis ton nom !!';
}
esleif ($desision == 'nodecision') {
echo 'Tu n\'a pas dit si tu &eacute;tais disponible ou non.';
}
else {
echo 'Merci d'avoir répondu que tu serais ' . $desision . ', ' . $name . '.';
}
?>
Aaah mais oui, j'avais oublié esleif() ^^

truk2oof a dit:
ensuite, je te conseil d'aller faire un petit (je veut dire GRAND et LONG) tour sur le Site du Zéro / section php
Ok je vais aller voir ^^

truk2oof a dit:
pour la redirection après, utilise les sessions
Tu pourrais me donner un site qui explique comment faire, ou même me donner le code ? :love:

truk2oof a dit:
comme te le conseil SveDec ;)
:zen:
Euh, c'est moi SveDec :p
 
<FOM ACTION="verif.php" METHOD=SESSION ENCTYPE="text/plain">

Pour les sessions, ça ne fonctionne pas du tout comme ça ! (mais alors pas du tout du tout :p )

Si j'ai bien compris, tu veux que le visiteur fasse:
Page A (formulaire) -> Page B (vérif des données soumises) -> Page A (traitement des données)

Dans le fichier qui reçoit les résultats du formulaires, tu écris en haut (avant tout output):
session_start();

Cette commande permet de créer la session (enfin ça dépend aussi de la config de ton serveur PHP, mais normalement ça devrait marcher).

Ensuite, tu récupères les valeurs:

$_SESSION['machin'] = $_POST['machin'];
$_SESSION['truc'] = $_POST['truc'];
$_SESSION['bidule'] = $_POST['bidule'];

Tu crées une variable pour contrôler que la vérification a réussi:
if (vérif réussie)
{ $_SESSION['verif'] = "ok";
echo '<a href="Page A.php">Retour vers la Page A</a>';
}
else
{
//code pour dire que la vérif n'a pas réussi
}

Dans le fichier qui contient ton formulaire, tu devrais avoir une structure du genre:
if ($_SESSION['verif'] == "ok")
{
//traitement des données
}
else
{
// le code du formulaire ici
}
 
pour le code :

======================================
// machintrucbidulechoutte.html
<form action="verif.php" method="post" enctype="text/plain">
Tu es :
<select name="nom">
<option value="noname">Choisis ton nom !</option>
<option value="dupond">Monsieur Dupond</option>
<option value="durand">Mr Durand</option>
</select>
et tu sera :
<select name="decision">
<option value="nodecision">Alors ? ^^</option>
<option value="present">Présent(e)</option>
<option value="absent">Absent(e)</option>
</select>
<br /><br />
<input type="submit" value="envoyer" />
</form>
======================================

======================================
// verif.php
<?php
session_start();
$_SESSION['nom'] = $_POST['nom'];
$_SESSION['decision'] = $_POST['decision'];
?>
<html>
<head>
<?php
if ($_SESSION['nom'] != 'noname' AND $_SESSION['decision'] != 'nodecision') {
echo '<meta http-equiv="refresh" content="10; url=http://tonsiteatoi.com/index.php">'; // redirection si formulaire valide au bout de 10 secondes
}
?>
</head>
<body>
if ( == 'noname') {
echo 'Tu n\'as pas mis ton nom !!<br />';
echo '<a href="javascript:history.go(-1)" title="retour">retour</a>.';
}
esleif ($_SESSION['desision'] == 'nodecision') {
echo 'Tu n\'a pas dit si tu étais disponible ou non.';
echo '<a href="javascript:history.go(-1)" title="retour">retour</a>.';
}
else {
echo 'Merci d'avoir répondu que tu serais ' . $desision . ', ' . $name . '.<br />';
echo '<span style="color:red;">Patientes quelques instants, tu vas être redirigé vers index.php au bout de 10 secondes</span>';
}
?>
</body>
</html>
======================================
 
Anabys a dit:
Pour les sessions, ça ne fonctionne pas du tout comme ça ! (mais alors pas du tout du tout :p )

Si j'ai bien compris, tu veux que le visiteur fasse:
Page A (formulaire) -> Page B (vérif des données soumises) -> Page A (traitement des données)

Dans le fichier qui reçoit les résultats du formulaires, tu écris en haut (avant tout output):
session_start();

Cette commande permet de créer la session (enfin ça dépend aussi de la config de ton serveur PHP, mais normalement ça devrait marcher).

Ensuite, tu récupères les valeurs:

$_SESSION['machin'] = $_POST['machin'];
$_SESSION['truc'] = $_POST['truc'];
$_SESSION['bidule'] = $_POST['bidule'];

Tu crées une variable pour contrôler que la vérification a réussi:
if (vérif réussie)
{ $_SESSION['verif'] = "ok";
echo '<a href="Page A.php">Retour vers la Page A</a>';
}
else
{
//code pour dire que la vérif n'a pas réussi
}

Dans le fichier qui contient ton formulaire, tu devrais avoir une structure du genre:
if ($_SESSION['verif'] == "ok")
{
//traitement des données
}
else
{
// le code du formulaire ici
}
merde tu m'as grillé :p

bon, deux explications vallent mieux qu'une !! ;)
 
Ouaou, merci :love:
Je vais donc recopier votre code (vous inquiétez pas je mettrais un petit commentaire (invisible hein, qd même :p) sur vous ^^)
 
Mmh, en fait ce code va pas ^^
Tu t'es emmêlé dans le placement de ton code avant entre après <html>, <head> et <body> ^^
Et j'ai l'impression que tu as oublié des trucs ^^
Le code est donc celà, n'est ce pas ? ^^
verif.php a dit:
<?php
session_start();
$_SESSION['nom'] = $_POST['nom'];
$_SESSION['decision'] = $_POST['decision'];
?>
<html>
<head>
<title>
V&eacute;rification des informations
</title>
<?php
if ($_SESSION['nom'] != 'noname' AND $_SESSION['decision'] != 'nodecision') {
echo '<meta http-equiv="refresh" content="10; url="index.php">'; // redirection si formulaire valide au bout de 10 secondes
}
?>
</head>
<body>
<?php
if ($_SESSIOn['nom'] == 'noname') {
echo 'Tu n\'as pas mis ton nom !!<br />';
echo '<center><a href="javascript:history.go(-1)" title="retour">Retour</a></center>';
}
esleif ($_SESSION['desision'] == 'nodecision') {
echo 'Tu n\'a pas dit si tu étais disponible ou non.';
echo '<center><a href="javascript:history.go(-1)" title="retour">retour</a></center>';
}
else {
echo 'Merci d\'avoir répondu que tu serais ' . $desision . ', ' . $name . '.<br />';
echo '<span style="color:red;">Patientes quelques instants, tu vas être redirigé vers index.php au bout de 10 secondes</span>';
}
?>
</body>
</html>
Et dans index.php, que dois-je mettre dans ce tableau pour que à la ligne de Mr Dupond par ex corresponde sa décision ?
<?php
session_start();
$_SESSION['nom'] = $_POST['nom'];
$_SESSION['decision'] = $_POST['decision'];
?>
<html>
<head>
<title>
LISTE DES INVIT&Eacute;S
</title>
</head>
<body>
<center>
<h2>
Personnes invit&eacute;es &agrave; la f&ecirc;te du samedi 8 octobre 2005
</h2>
<p>
Allez, on va faire dans l'ordre alphab&eacute;tique pour pas faire de jaloux ^^
<P>
<table border="1" width="500">
<tr>
<th width="50%">
Pr&eacute;nom
</th>
<th width="50%">
Disponibilit&eacute;
</th>
</tr>
<tr>
<td>
Mr Dupond
</td>
<td>
<?php
// Quel code mettre ???
?>
</td>
</tr>
<tr>
<td>
Mr Durand
</td>
<td>
<?php
// Quel code mettre ???
?>
</td>
</tr>
</table>
LA SUITE DU CODE ...
Merci :)
 
Concernant le code de verif.php, il a l'air totalement foireux ^^
J'ai beau essayer de le manipuler et de le changer, rien à faire, rien ne marche ...
 
Je vais être honnête, alors ne le prend pas mal, mais tu devrais aller lire des articles d'introduction au PHP, car tu n'as pas les bonnes bases. Tu peux aller voir PHPDébutant.

Ton index est mal codé pour ce que tu veux faire, c'est normal que ça ne fonctionne pas.

Tu as une structure comme ça:
<?php
//code
?>
<html>
<!-- code html -->
</html>
<?php
//code
?>

alors qu'il te faut une structure comme celle-ci:
<?php
//code php

$output = '<html>';
$output .= '<!-- Code html -->';
$output .= '</html>';

echo $output;

?>
 
Ben j'ai recopié le code donné lol
Je veux volontiers croire que je suis mauvais (pour l'instant ^^), car je viens de débuter ...
Je vais réessayer avec ta structure ...
Merci :)