PB syntaxe header
Résoluj'ai un soucis avec la syntaxe de mon header en php pour un serveur local.
j'utilise easyphp.
merci
Configuration: Windows XP Internet Explorer 7.0
40 réponses
Problème d'implémentation de header() en PHP et l'impact des sorties prématurées sur les redirections, notamment avec EasyPHP sous Windows, où une ligne blanche ou un écho avant l'appel peut bloquer la redirection. Des échanges conseillent d'initialiser les variables, de vérifier les données POST avant leur utilisation et d'appeler header() avant toute sortie HTML, tout en confirmant la sélection de la base de données et l'exécution conditionnelle. Plusieurs corrections évoquent aussi l'usage des sessions et des tests d'authentification, avec des exemples montrant comment rediriger via Location et comment corriger une non sélection de base ou de variable.
-
voici mon code final :
<?php require_once('connexion.php'); ?>
<?php session_start();
$_SESSION['user']='';
$_SESSION['mdp']='';
$verif='';
$utilisateur='';
$uti='';
$motpass='';
if (isset($_POST['valider']) && !empty($_POST['valider']) )
{
if ( isset($_POST["user"]) && !empty($_POST["user"]) )
{ // execution apres envoi du formulaire
$uti = $_POST['user'];// mise en variable du nom d'utilisateur
if ( isset($_POST["mdp"]) && !empty($_POST["mdp"]) )
{
$motpass = $_POST['mdp']; // mise en variable du mot de passe crypté
mysql_select_db('marche_public');
$verif_query=("SELECT * FROM user WHERE uti='$uti' AND mdp='$motpass'"); // requête sur la table user
$verif = mysql_query($verif_query, $dbmarchpub) or die(mysql_error());
$utilisateur = mysql_num_rows($verif);
echo $utilisateur;
}
else
{
echo ('ne passe pas ligne 23');
}
}
else
{
echo ('valider vide');
}
if ($utilisateur == 1)
{// On test s'il y a un utilisateur correspondant
$_SESSION['connexion'] = "ok";
header("location:menup.php");// redirection si OK
exit;
//echo ('c bon');
}
else
{
header("location:index.php?erreur=login");// redirection si utilisateur non reconnu
exit;
echo ('ne passe pas ligne 39');
}
}
else
{
echo ('ne passe pas ligne 45');
}
?> -
oui, je l'ai corrigé. et c'est celà qui bloquait. merci pour ton aide. Je suis nulle mais bon peut être que je peux t'aider sur quelque chose. ;)
merci de ton aide précieuse. -
ContributeurUn test se fait sur la double égalité.
Change ton :
if ($utilisateur = 1)
en :
if ($utilisateur == 1)
-
<?php require_once('connexion.php'); ?>
<?php session_start();
$_SESSION['utilisateur']='';
$_SESSION['mdp']='';
$verif='';
$utilisateur='';
$uti='';
$motpass='';
if (isset($_POST['valider']) && !empty($_POST['valider']) )
{
if ( isset($_POST["user"]) && !empty($_POST["user"]) )
{ // execution apres envoi du formulaire
$uti = mysql_real_escape_string($_POST['user']);// mise en variable du nom d'utilisateur
if ( isset($_POST["mdp"]) && !empty($_POST["mdp"]) )
{
$motpass = md5($_POST['mdp']); // mise en variable du mot de passe crypté
mysql_select_db('marche_public');
$verif_query=("SELECT * FROM user WHERE uti='$uti' AND mdp='$motpass'"); // requête sur la table user
$verif = mysql_query($verif_query, $dbmarchpub) or die(mysql_error());
$utilisateur = mysql_num_rows($verif);
echo $utilisateur;
}
else
{
echo ('ne passe pas ligne 23');
}
}
if ($utilisateur = 1)
{// On test s'il y a un utilisateur correspondant
$_SESSION['connexion'] = "ok";
header("location:menup.php");// redirection si OK
exit;
//echo ('c bon');
}
else
{
header("location:index.php?erreur=login");// redirection si utilisateur non reconnu
exit;
echo ('ne passe pas ligne 39');
}
}
else
{
echo ('ne passe pas ligne 45');
}
?>
j'en suis à là. -
ContributeurReposte voir ton code en l'état actuel s'il te plait.
-
toujours le même problème que les cases soit vides où remplies, ça passe. quelque soit ce que je mets, ça passe.
-
ha ok.c'était au lieu de mettre $resultat. ;)
j'ai complètement tout changé dans mon code et je ne m'y retrouve plus.
je te le mets
<?php require_once('connexion.php'); ?>
<?php session_start();
$_SESSION['utilisateur']='';
$_SESSION['mdp']='';
$verif='';
$utilisateur='';
$uti='';
$motpass='';
if (isset($_POST['valider']) )
{
if ( isset($_POST["user"]) && !empty($_POST["user"]) )
{ // execution apres envoi du formulaire
$uti = mysql_real_escape_string($_POST['user']);// mise en variable du nom d'utilisateur
if ( isset($_POST["mdp"]) && !empty($_POST["mdp"]) )
{
$motpass = md5($_POST['mdp']); // mise en variable du mot de passe crypté
mysql_select_db('marche_public');
$verif_query=("SELECT * FROM user WHERE uti='$uti' AND mdp='$motpass'"); // requête sur la table user
$verif = mysql_query($verif_query, $dbmarchpub) or die(mysql_error());
$row_verif = mysql_fetch_assoc($verif);
$utilisateur = mysql_num_rows($verif);
echo $utilisateur;
}
else
{
echo ('ne passe pas ligne 23');
}
}
if ($utilisateur = 1)
{// On test s'il y a un utilisateur correspondant
$_SESSION['connexion'] = "ok";
header("location:menup.php");// redirection si OK
exit;
//echo ('c bon');
}
else
{
header("location:index.php?erreur=login");// redirection si utilisateur non reconnu
exit;
echo ('ne passe pas ligne 39');
}
}
else
{
echo ('ne passe pas ligne 45');
}
?> -
ContributeurC'est rien oubli ça je n'avais pas vu que $utilisateur correspondais au nombre de ligne retourné par ta requête.
-
pourkoi me mets tu $_POST['utilisateur'] ?
-
ContributeurOui c'est logique tu as changé ta requête SQL en sélectionnant un COUNT(*). Du coup, même s'il ne trouve aucun résutltat il te retournera bien un résultat (une seule ligne) équivalant à 0.
Remet ta requête précédente elle était correcte.
Et par contre corrige ceci :$row_verif = mysql_fetch_assoc($verif); $utilisateur = mysql_num_rows($verif);
En :$utilisateur = mysql_num_rows($verif);
(suppression de la première ligne.
Pourquoi ? Parce que dans la première ligne tu récupère le contenu du résultat retourner s'il y en a un, ce qui a pour conséquence de vider ton ResultSet. Du coup dans ta deuxième ligne, lorsque tu veux récupérer la taille du résultat retourner, il n'y a plus rien dedans et ton nombre vaut 0.
Enfin... c'est ce que je pense que ça fait, regarde pour voir si c'est bien ça.
-
tu vas rire, mais maintenant, sans rentrer de non d'utilisateur et de mot de passe, je passe à l'autre page.
je te montre ce que j'ai fait.
<?php require_once('connexion.php'); ?>
<?php session_start();
$_SESSION['utilisateur']='';
$_SESSION['mdp']='';
$verif='';
$utilisateur='';
$uti='';
$motpass='';
if (isset($_POST['valider']) )
{
if (!empty($_POST['user']))
{ // execution apres envoi du formulaire
$uti = mysql_real_escape_string($_POST['user']);// mise en variable du nom d'utilisateur
$motpass = md5($_POST['mdp']); // mise en variable du mot de passe crypté
mysql_select_db('marche_public');
$verif_query=("SELECT count(*) FROM user WHERE uti='$uti' AND mdp='$motpass'"); // requête sur la table user
$verif = mysql_query($verif_query, $dbmarchpub) or die(mysql_error());
$row_verif = mysql_fetch_assoc($verif);
$utilisateur = mysql_num_rows($verif);
echo $utilisateur;
}
else
{
echo ('ne passe pas ligne 23');
}
if ($utilisateur = 1)
{// On test s'il y a un utilisateur correspondant
$_SESSION['connexion'] = "ok";
header("location:menup.php");// redirection si OK
exit;
//echo ('c bon');
}
else
{
header("location:index.php?erreur=login");// redirection si utilisateur non reconnu
exit;
//echo ('ne passe pas ligne 34');
}
}
else
{
echo ('ne passe pas');
}
?> -
ContributeurEffectivement je suis allé un peu vite sur la conclusion, mais ma remarque vaut aussi pour les variables suivantes alors :
$uti='';
$motpass='';
Elle ne sont pas remplies, d'où le fait que ta requête SQL ne retourne aucun résultat.
-
non, ce n'était pas ça, enfin je pense. car $utilisateur ne récupère pas une chaine de caractères mais un nombre. Donc dans ma requête, je dois compter le nombre d'enregistrements qui répondent à ma requête.
Si je ne me trompe pas. ;) -
ContributeurJe reposte pour être sur que tu vois mon message.
Tu ne rempli pas ta variable, c'est donc normal que ton test échoue.
Il faut que tu récupère cette variable au début de ton script :
$utillisateur = "";
if ( isset($_POST["utilisateur"]) && !empty($_POST["utilisateur"]) )
$utilisateur = $_POST["utilisateur"];
Et ton test plus loin :
if ( $utilisateur > 0 ){
// Ton code
}
-
c bon, je pense que j'ai un soucis avec ma requête.
car c'est bien cela. ;)
Donc je vais me pencher sur ma requête. si tu trouves l'erreur ou d'autres erreur, fais moi signe. merci -
ContributeurOui bonne initiative.
Pense donc bien à mettre des traces un peu partout lorsque tu rencontre une erreur de manière à comprendre d'où vient l'erreur et pourquoi. Tu ne pourra en ressortir que meilleur.
ps: regarde bien ou tu rempli ta variable en question, tu t'apercevra qu'elle n'est remplie nulle part.
-
ha oui, c'est vrai!!! merci. maintenant ça bloque pour le if ($utilisateur ==1), même si je fais supérieur à 0 ça bloque.
Je vais afficher le contenu de ma variable pour voir. -
ContributeurEvidemment, tu fais un test : si c'est vide, alors j'exécute mon script, c'est l'inverse qu'il faut faire ^^
Si c'est pas vide, j'exécute le script :
if ( ! empty($_POST['user']))
-
il y avait ça aussi, mais cela ne passe toujours pas.
ma page s'affiche mais apparement j'ai un problème au niveau du if (empty($_POST['user'])) car j'ai mis des echo pour voir où était mon erreur.
donc il va directement dans le else. donc il ne fait pas les traitements qui sont après.
et le pire c'est que je ne vois pas mon erreur. -
ContributeurC'était donc bien du au problème de header, et effectivement un oubli de sélection de la base de données.
- 1
- 2