REDIRECTION PHP surprenante header("Locati [Résolu/Fermé]

Signaler
Messages postés
584
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
25 mai 2019
-
Messages postés
584
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
25 mai 2019
-
Bonjour,

J'ai un formulaire HTML qui transmet ses données à un module intégralement PHP.
Je sais qu'il ne faut aucune instruction HTML avant une redirection mais, là, ce ne peut être le cas !

Pour autant, j'ai 5 redirections à faire, dépendantes de test. Aucun test ne se fait sur les données, elles-mêmes: elles proviennent exclusivement de boutons radio avec values.
J'ai contrôlé la réception des 5 valeurs : toutes sont conformes !

Pourtant, toutes les redirections se font sur une seule adresse quelle que soit la lettre spécifiant le choix.
Je précise que j'ai créé tous les modules adressés ce qui est sans effet...
Lors des tests, c'était toujours la deuxième adresse qui était ciblée alors que je n'ai pas eu ce type de difficulté en redirection précédemment en utilisant le même modèle qui fonctionne :
	if (empty($_SESSION['Initiales']) )          // pas d'initiales donc pas d'autorisation en BD
		{
		Header('Location:/pgUTL/ConsPlanning.php');  // Aucun choix : seule Consult planning possible
		}
	else
		{
		Header('Location:/pgUTL/identifK.php');    // Envoi sur Choix traitement MàJ
		exit();
		}


Je joins donc le code à problème :
<?php              // MàJ RJL2725 
session_start();   // Ouvrir la session (venant de IdentifK)
// Prise en compte du choix :
$choix =($_POST['ChoixRep']);
// echo $Choix;
if ($choix = 'C') 
	{ 
	Header("Location:/pgUTL/ConsPlanning.php"); // Consultation Planning)
	}
if ($choix = 'M') 
	{
	Header("Location:/pgUTL/AdhMaJ.php");		// Modification (yc ajout|modif n° carte adh.)
	}	
if 	($choix = 'P') 
	{ 
	Header("Location:/pgUTL/FormPreInsc.php"); // PréInscription sans n° carte
	}
if ($choix = 'I')
	{ 
	Header("Location:/pgUTL/AdhInsc.php"); 	// Inscription (avec n° carte adh.)
	}
if ($choix = 'S')
	{
	Header("Location:/pgUTL/AdhSup.php");   	// Supression adhérent
	}	
?>


IMPORTANT : Incidemment, j'ai noté que l'adresse toujours utilisée était celle où existait un exit suite au header !
J'ai donc mis un exit, également, à la suite du premier Header : cette seule adresse était alors utilisée !
J'ai supprimé les 5 exit qui suivaient les Header...
Seule la dernière adresse AdhSup.php a été alors utilisée quelle que soit mon choix !

Merci des idées, conseils ou solutions que vous pourrez me transmettre
Bien cordialement RJL2725



7 réponses

Messages postés
1061
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
23 octobre 2013
141
Salut,

Petit souci dans tes if à vrai dire.
Tu fais if($choix = 'LETTRE') : à chaque condition, tu modifies la valeur de $choix en lui assignant la nouvelle valeur !
Pour comparer, tu dois faire $choix == 'LETTRE'. Tout rentrera dans l'ordre, mais n'oublie pas les exit après le header('Location...), toujours conseillé !
https://www.php.net/manual/fr/function.header.php
Messages postés
331
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
22 avril 2014
42
tu transmet tes variables comment sur
$choix =($_POST['ChoixRep']);
c'est un champ iden hidden un input ? les valeur transmit sont elles bien attendu?

sinon tu peut aussi utiliser else if pour ton code
if ($choix = 'C') 
	{ 
	Header("Location:/pgUTL/ConsPlanning.php"); // Consultation Planning)
	}
else if ($choix = 'M') 
	{
	Header("Location:/pgUTL/AdhMaJ.php");		// Modification (yc ajout|modif n° carte adh.)
	}	
else if ($choix = 'P') 
	{ 
	Header("Location:/pgUTL/FormPreInsc.php"); // PréInscription sans n° carte
	}
else if ($choix = 'I')
	{ 
	Header("Location:/pgUTL/AdhInsc.php"); 	// Inscription (avec n° carte adh.)
	}
else($choix = 'S')
	{
	Header("Location:/pgUTL/AdhSup.php");   	// Supression adhérent
	}	
?>


tient moi au courant
Messages postés
584
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
25 mai 2019
48
Bonjour Adrien,

Bon, je n'ai pas testé, mais j'y crois et j'aurai du penser que tu serais le premier à répondre !
BRAVO.
Je ne mets pas résolu mais je me dois de corriger et faire le test préalablement !
Il est vrai que, tout nouveau en PHP, j'ai du mal à utiliser le == pour les comparaisons qui marchent quad ce sont des signes doubles ou autres... Je vasi peut-être me mettre à employer !<> (lol)
@ bientôt RJL2725
Messages postés
584
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
25 mai 2019
48
Bonsoir harderpod,
merci de l'intérêt porté au sujet.
J'avais contrôlé la transmission de mes 5 codes, bonne au moment de l'essai pour lequel j'avais supprimé les autres tests et headers !
De même, j'avais bien, initialement employé des else if mais je les ai bazardés pour passer au plus simples (on réduis la voilure dans les bourrasques).
Je mets la solution en autre réponse à Autumn'Tears pour lui confirmer son diagnostic.
Merci et au plaisir. RJL2725
Messages postés
584
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
25 mai 2019
48
Salut Adrien,

La correction et le test n'ont pas été bien long et j'ai, au passage ajouté mes 5 EXIT.
J'ai regardé le cas qui fonctionnait : c'était surtout des tests par EMPTY !
Encore merci... car j'y ai passé une très large partie de l'après-midi... Je ne le regrette quand même pas car je serai alors impardonnable (voire irércupérable) si j'oublie le == de comparaison !
Amicalement RJL2725
Messages postés
1061
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
23 octobre 2013
141
Aucun souci !
Tu pourrais faire les mêmes conditions avec la structure switch/case !
Pour info, il y a aussi '===' :)
('a' == 0) => Vrai
('a'===0) => Faux

A utiliser quand on veut également tester le type de la variable
Messages postés
584
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
25 mai 2019
48
Bonjour,
Ça davrait aller : je vais intégrer ce test qui, il est vrai, n'est pas équivalant à d'autres langages où le égal (=) fait tant affectation que comparaison, ces langages faisant la distinction par la présence ou non du IF préalable.
J'ai aussi approfondi le == comparé au ===, là aussi conséquence de variables non déclaratives : les facilités dans un sens se paient autrement !
Pour ma part, j'étais assez favorables aux déclaratives que je rendais obligatoires (option) :ça me signalais une faute d'orthographe dans une variable !
J'aime bien aussi la structure switch/case mais doit la voir plus en détail en PHP.
Bonne journée. RJL2726
Messages postés
1061
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
23 octobre 2013
141
En vérité, en PHP tu peux créer une variable dans un IF, il est effectivement beaucoup plus permissif que le C par exemple, mais il ne faut pas en profiter pour faire un tas de cochonneries...
Messages postés
584
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
25 mai 2019
48
Je partage pleinement : il faut un minimum de rigueur faute de quoi on en arrive à ne plus pouvoir se relire : perte de temps et compréhension bien difficile quelques années après !
J'ai à la maison depuis 2000 une compta perso en Access (ayant transité par plusieurs versions) que mon épouse apprécie et ne veut pas quitter ; je suis presque catastrophé quand elle me demande une modif car c'est fou ce que l'on peut oublier... non seulement la logique mais même le langage (Access) que je ne pratique plus suffisamment !
Amiacalement RJL2726