Page 1 sur 2

comment recuperer cette variable

Posté : 12 janv. 2007, 14:34
par abricot
Salut, j'ai un probleme avec un de mes codes! pour changer lol :shock:
Donc j'ai un formulaire, je met nom, prenom admettons.. Je recupere les donnés par la variable $_POST, je redirectionne les donnés dans une autre boucle mais elles n'existent plus... Je sais pas si je suis clair :roll: j'ai crée un exemple pour que vous compreniez ce que je veux dire:

Code : Tout sélectionner

//ici $_POST['var'] et var2 on été recuperés par le biais d'un formulaire et si elles n'existent pas elles sont crées if ($_GET['form'] == "erreur1"){ $var = isset($_POST['var']) ? $_POST['var'] : ''; $var2 = isset($_POST['var2']) ? $_POST['var2'] : ''; echo '<meta http-equiv="refresh" content="3;url='.$_SERVER['PHP_SELF'].'?form=corriger">'; die(); } if ($_GET['form'] == "corriger"){ /* maintenant que $var et $var2 n'existent plus comment les recuperer? */ }

Posté : 12 janv. 2007, 14:40
par Ajoloca
Bonjour,

Tu dois les passer dans l'URI comme tu passes form=QQchose,
tu dois faire
form=QQchose&var=val1&var2=val2
N'oublie pas le & (é commerciale) entre chaque couple variable=valeur.

Re: comment recuperer cette variable

Posté : 12 janv. 2007, 14:56
par abricot
Et dans le style c'est mieux?

Code : Tout sélectionner

// si $_GET['form'] existe if (isset($_GET['form'])){ // si $_POST['var'] n'existe pas $var = rien si non $var prend la valeur de $_POST['var'] donc $var existe quoi qu'il arrive if ($_GET['form'] == "erreur1"){ $var = isset($_POST['var']) ? $_POST['var'] : ''; $var2 = isset($_POST['var2']) ? $_POST['var2'] : ''; //je recupere les donnés de mes deux variables pour les utiliser dans ma boucle corriger echo '<meta http-equiv="refresh" content="3;url='.$_SERVER['PHP_SELF'].'?form=corriger&var='.$var.'&var2='.$var2.'">'; die(); } if ($_GET['form'] == "corriger"){ //si $_GET['var'] et var 2 existe je donne leurs valeur a $var et $var2 if (isset($_GET['var']) && isset($_GET['var2'])){ $var = $_GET['var']; $var2 = $_GET['var2']; } } }

Posté : 12 janv. 2007, 15:04
par Ajoloca
Re,

Dans la première partie
if ($_GET['form'] == "erreur1"){
$var = isset($_POST['var']) ? $_POST['var'] : '';
$var2 = isset($_POST['var2']) ? $_POST['var2'] : '';

echo '<meta http-equiv="refresh" content="3;url='.$_SERVER['PHP_SELF'].'?form=corriger&var='.$var.'&var2='.$var2.'">';
die();
} 
Ça ne te sert à rien de récupérer tes valeurs,
tu ne vas pas les utiliser vu que tu arêtes ton script.

Dans la seconde partie
if ($_GET['form'] == "corriger"){

//si $_GET['var'] ou var2 n'existe pas alors $var = $_POST['var'] ou var2
$var = isset($_GET['var']) ? $_GET['var'] : $_POST['var'];
$var2 = isset($_GET['var2']) ? $_GET['var2'] : $_POST['var2'];
}
Quand tu utilises l'opérateur ternaire, tu risques d'avoir des soucis.
Nulle part tu testes si $_POST['var'] est définie. Et idem pour $_POST['var2'].

Re: comment recuperer cette variable

Posté : 12 janv. 2007, 15:20
par abricot
Et dans le style c'est mieux?
// si $_GET['form'] existe
if (isset($_GET['form'])){

     // si $_POST['var'] n'existe pas $var = rien si non $var prend la valeur de $_POST['var'] donc $var existe quoi qu'il arrive
     if ($_GET['form'] == "erreur1"){
     $var = isset($_POST['var']) ? $_POST['var'] : '';
     $var2 = isset($_POST['var2']) ? $_POST['var2'] : '';

     //je recupere les donnés de mes deux variables pour les utiliser dans ma boucle corriger
     echo '<meta http-equiv="refresh" content="3;url='.$_SERVER['PHP_SELF'].'?form=corriger&var='.$var.'&var2='.$var2.'">';
die();
     }

     if ($_GET['form'] == "corriger"){
          //si $_GET['var'] et var 2 existe je donne leurs valeur a $var et $var2
          if (isset($_GET['var']) && isset($_GET['var2'])){
          $var = $_GET['var'];
          $var2 = $_GET['var2'];
          }
     }
}
oups j'ai édité au lieu de répondre

Posté : 12 janv. 2007, 15:22
par Ultim4T0m
Bonjour,

Utilises plutôt la balise PHP que Code, on y voit bien plus clair ;)

Ca a l'air mieux, as-tu testé ?

Posté : 12 janv. 2007, 15:24
par abricot
Je n'ai pas encore testé ultim, pour l'instant j'ai éssayé que lepremier, et il marche tres bien!
par contre j'ai l'impression qu'en rajoutant des if partout ca complique beaucoup le code, lol!

Posté : 12 janv. 2007, 15:29
par Ultim4T0m
Pour le rendre plus clair, indente le un peu mieux encore :
// si $_GET['form'] existe
if (isset($_GET['form'])){

     // si $_POST['var'] n'existe pas $var = rien si non $var prend la valeur de $_POST['var'] donc $var existe quoi qu'il arrive
     if ($_GET['form'] == "erreur1"){
          $var = isset($_POST['var']) ? $_POST['var'] : '';
          $var2 = isset($_POST['var2']) ? $_POST['var2'] : '';

          //je recupere les donnés de mes deux variables pour les utiliser dans ma boucle corriger
          echo '<meta http-equiv="refresh" content="3;url='.$_SERVER['PHP_SELF'].'?form=corriger&var='.$var.'&var2='.$var2.'">';
          die(); 
      }

     if ($_GET['form'] == "corriger"){
          //si $_GET['var'] et var 2 existe je donne leurs valeur a $var et $var2
          if (isset($_GET['var']) && isset($_GET['var2'])){
               $var = $_GET['var'];
               $var2 = $_GET['var2'];
          }
     }
} 
Mais pourquoi mets-tu die() après ta balise meta ?

Posté : 12 janv. 2007, 15:34
par AB
Salut abricot,
Quand tu utilises l'opérateur ternaire, tu risques d'avoir des soucis.
Nulle part tu testes si $_POST['var'] est définie. Et idem pour $_POST['var2'].
Donc si tu souhaites que ta variable $var prenne la valeur de $_GET['var'] si $_GET['var'] existe ou la valeur $_POST['var'] si $_GET['var'] n'existe pas, tu peux faire quelque chose comme :
$var = isset($_POST['var'])? $_POST['var'] : '' ;
$var = isset($_GET['var'])? $_GET['var'] : $var ;
Edit : le temps que je poste, ton code a changé, mais bon l'exemple reste valable

Posté : 12 janv. 2007, 15:34
par Ajoloca
Re,

Dis-moi si ce que tu cherches à faire c'est,.
En cas d'erreur tu voudrais que le script se ré-exécute avec les valeurs $var et $var2 comme paramètres et 'corriger' comme action ?

C'est ça ?

Posté : 12 janv. 2007, 15:59
par abricot
Mais pourquoi mets-tu die() après ta balise meta ?
Je met die apres la balise meta car tout le script est sur une seule page, aucun include, aucune redirection vers d'autres page php pour verifier les donnés.. Donc je met die comme ca il tue le script au lieux d'executer d'autres script par dessus celui ci

AB : Pas mal ton bout de code, je n'y avais pas pensé, c'est clair que vu come ca c'est beaucoup plus clair

Ajoloca : en fait en cas d'erreur $var et $var2 doivent être redirectionnés vers la boucle corriger sans passer par un formulaire, car c'est une redirection automatique

Posté : 12 janv. 2007, 16:08
par Ajoloca
Re,

C'est bien ce que je pensait.
Dans ce cas, tu ne dois pas utiliser la balise HTML <meta> mais la fonction PHP header() avec Location.

Posté : 12 janv. 2007, 16:26
par abricot
euh, je connais pas cette fonction, je vais voir sur php.net, mais si les 2 fonctionnent pourquoi devrais je choisir celle ci?

Posté : 12 janv. 2007, 16:31
par Ajoloca
Re,

Les raisons sont multiples, mais si tu est en PHP, pourquoi basculer en HTML pour faire la même chose?

Pour la doc tu n'as qu'à "cliquer sur le nom de la fonction et tu seras automatiquement redirigé vers la page du manuel de cette fonction.

Posté : 12 janv. 2007, 16:50
par abricot
Je capte rien à cette fonction, c'est super compliqué et super mal expliqué :shock:
et les exemples font que je vois vraiment pas l'interet de cette fonction