|
|
|
|
Bonjour,
J'ai un 1er fichier php, que je démarre (tout en haut) par une ouverture de session avec session_start();.
J'y mets un formulaire html pour le client de d'un restaurant qui veut passer une commande, avec action = "session.php" et un bouton submit.
Voici le contenu de mon fichier session.php :
<?php
session_start();
//cas où le champ nom a été rempli
if(!empty($_POST['nom_client'])){
// Cas où il y a erreur de saisie sur le nom (retour vers le formulaire)
if(!eregi('#^[^-][[:alpha:]-][^-]+$#',$_POST['nom_client']) OR !eregi('[^0-9.^()[]$+*|/\{}]',$_POST['nom_client']){
$_SESSION['err_nom_invalide'] = "Veuillez entrer un nom valide";
header("location:commande_restau.php");
exit();
}
// cas où tout est bon (redirection vers le fichier php de traitement de la commande)
else {
$_SESSION['err_nom_invalide'] = "";
header("location:ttt_restau.php");
exit();
}
}
// sinon, cas où le champ nom n'a pas été rempli (retour vers le formulaire)
else{
$_SESSION['err_nom_abs'] = "Veuillez entrer votre nom";
header("location:commande_restau.php");
exit();
}
?>
Problème : quand je soumets mon formulaire, j'obtiens une page blanche, quelle que soit la saisie pour le champ nom : vide, erronnée ou juste.
J'ai essayé de remplacer :
if(!empty($_POST['nom_client'])){
par if(!isset($_POST['nom_client'])){
ou if($_POST['nom_client'] !=0){
mais le résultat est le même.
Voyez-vous d'où peut venir le problème ?
Merci pour vos réponses.
Configuration: Mac OS X Firefox 2.0.0.1
Bonsoir,
header("location:script.php");
par des
header("Location: script.php");
C'est important car ça va faire partie du protocole HTTP, en fait. Et puis si ça marche toujours pas, au lieu d'un "header...", fais un "echo 'blablabla'" pour être sûr de l'endroit où la programme s'oriente. Raph |
Merci, Raph, pour ta réponse.
<?php
session_start();
//cas où le champ nom a été rempli
if(!empty($_POST['nom_client'])){
// Cas où il y a erreur de saisie sur le nom
if(!eregi('#^[^-][[:alpha:]-][^-]+$#',$_POST['nom_client']) OR !eregi('[^0-9.^()[]$+*|/\{}]',$_POST['nom_client']){
$_SESSION['err_nom_invalide'] = "Veuillez entrer un nom valide";
header("Location: commande_restau.php");
echo "blibli";
exit();
}
// cas où tout est bon
else {
$_SESSION['err_nom_invalide'] = "";
header("Location: ttt_restau.php");
echo "blublu";
exit();
}
}
// sinon, cas où le champ nom n'a pas été rempli
else{
$_SESSION['err_nom_abs'] = "Veuillez entrer votre nom";
header("Location: commande_restau.php");
echo "blabla";
exit();
}
?>
Mes pages restent blanches. Domi |
En fait, les echo, c'est fait pour remplacer les "header(...)" de manière à voir quelque chose affiché vu qu'avec un header, tu ne vois rien.
<?php
session_start();
//cas où le champ nom a été rempli
if(!empty($_POST['nom_client'])){
// Cas où il y a erreur de saisie sur le nom
if(!eregi('#^[^-][[:alpha:]-][^-]+$#',$_POST['nom_client']) OR !eregi('[^0-9.^()[]$+*|/\{}]',$_POST['nom_client'])){
$_SESSION['err_nom_invalide'] = "Veuillez entrer un nom valide";
header("Location: commande_restau.php");
exit();
}
// cas où tout est bon
else {
$_SESSION['err_nom_invalide'] = "";
header("Location: ttt_restau.php");
exit();
}
}
// sinon, cas où le champ nom n'a pas été rempli
else{
$_SESSION['err_nom_abs'] = "Veuillez entrer votre nom";
header("Location: commande_restau.php");
exit();
}
?>
|
Merci pour ta correction. C'est bon, plus de pages blanches ! J'ai mis du temps à trouver cette fichue parenthèses qui manquait !
<?php
session_start();
//cas où le champ nom a été rempli
if(!empty($_POST['nom_client'])){
$_SESSION['err_nom_invalide'] = "";
header("Location: ttt_commande.php");
exit();
}
// sinon, cas où le champ nom n'a pas été rempli
else{
$_SESSION['err_nom_abs'] = "Veuillez entrer votre nom";
header("Location: commande_restau.php");
exit();
}
//cas où le champ prenom a été rempli
if(!empty($_POST['prenom_client'])){
$_SESSION['err_prenom_invalide'] = "";
header("Location: ttt_commande.php");
exit();
}
// sinon, cas où le champ prenom n'a pas été rempli
else{
$_SESSION['err_prenom_abs'] = "Veuillez entrer votre prénom";
header("Location: commande_restau.php");
exit();
}
?>
Dans mon fichier commande_restau.php, en dessous de l'input du nom, j'écris : <? if(isset($_SESSION['err_nom_abs'])){
echo "<span style='color:red'>".$_SESSION['err_nom_abs']."</span><br />";
}
?>
et en-dessous de l'input du prénom, je mets : <? if(isset($_SESSION['err_prenom_abs'])){
echo "<span style='color:red'>".$_SESSION['err_prenom_abs']."</span><br />";
}
?>
de façon à ce que les messages d'erreur s'affichent juste au-dessous des champs appropriés. Ca marche pour le champ nom, mais pas pour le champ prénom. C'est-à-dire que quand je laisse vides les 2 champs, le message s'affiche bien sous le champ nom, mais pas sous le champ prénom.. Où est l'errer ? Domi |
Le soucis, c'est que tu fais la redirection dès que tu constates une erreur, donc s'il y a 2 erreurs, seule la première est pris en compte.
<?php
session_start();
// Cas où le champ nom n'a pas été rempli
if(empty($_POST['nom_client'])){
$_SESSION['err']['nom_abs'] = "Veuillez entrer votre nom";
}
if(empty($_POST['prenom_client'])){
$_SESSION['err']['prenom_abs'] = "Veuillez entrer votre prénom";
}
if ($_SESSION['err']) { # dans ce cas il y a au moins une erreur
header("Location: commande_restau.php");
exit;
}
$_SESSION['err_nom_invalide'] = "";
header("Location: ttt_commande.php");
exit();
?>
Les regexps que tu as sont vraiment pas terribles. En plus, tu mets des # (dièses) pour délimiter la regexp dans une fonction eregi, alors que c'est prévu pour preg_match uniquement. L'expression régulière n°1 (#^[^-][[:alpha:]-][^-]+$# ) signifie (si on utilise preg_match et non pas eregi : - début de ligne (^) - suivi d'un caractère qui peut être n'importe quoi sauf un tiret [^-] - suivi de un caractère alphabétique ou tiret [[:alpha:]-] - suivi de n'importe quels caractères sauf tiret - suivi de fin de ligne ($) Un truc qui marche avec cette expression régulière alors que ça ne te convient pas : $a@:;:: Si tu veux un nom/prénom qui ne commence ni ne se termine par un tiret (-) : preg_match('#\A:alpha:[[:alpha:]-]*:alpha:\Z#',$prenom) 1- utilisation de preg_match (donc les dièses qui entourent l'expression régulière sont considérés comme délimiteurs) 2- début de chaîne de caractère (\A) 3- un caractère alphabetique :alpha: 4- des caractères alphabétiques ou tiret [[:alpha:]-]* 5- un caractère alphabétique :alpha: 6- fin de chaîne de caractères Pour le nom du client, que veux-tu de plus que pour le prénom ? - des espaces - des apostrophes - toujours s'assurer qu'on commence et qu'on termine par une lettre preg_match("#\A:alpha:[[:alpha:]-' ]*:alpha:\Z#",$nom) et voilà. Raph |
Bonsoir, Raph,
<?php
session_start();
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
// Cas où le champ nom n'a pas été rempli
if(empty($_POST['nom_client'])){
$_SESSION['err']['nom_abs'] = "Veuillez entrer votre nom";
}
//sinon, cas où le champ nom comporte des erreurs
elseif(!preg_match("#\A:alpha:[[:alpha:]-' ]*:alpha:\Z#",$nom)){
$_SESSION['err']['nom_inv'] = "Veuillez entrer un nom valide";
}
// Cas où le champ prénom n'a pas été rempli
if(empty($_POST['prenom_client'])){
$_SESSION['err']['prenom_abs'] = "Veuillez entrer votre prénom";
}
//sinon, cas où le champ prenom comporte des erreurs
elseif(!preg_match('#\A:alpha:[[:alpha:]-]*:alpha:\Z#',$prenom)){
$_SESSION['err']['prenom_inv'] = "Veuillez entrer un prénom valide";
}
if ($_SESSION['err']) { # dans ce cas il y a au moins une erreur
header("Location: commande_restau1.php");
exit;
}
header("Location: ttt_commande.php");
exit();
?>
Dans le fichier formulaire, j'ai aussi rajouté : unset($_SESSION['err']['nom_abs']); à la fin de chaque affichage de variable, pour obtenir place nette quand je fais un rafraîchissement. Mon problème, c'est que quand je rentre des infos valides, je n'arrive plus à accéder à mon fihcier ttt_commande.php. je retombe toujours sur commande_restau1.php. Je ne comprends pas ce qui cloche. Domi |