Bonjour,
Quelqu'un pourrais-t'il m'expliquer :
Je testais les header("Location:..... en local et ça fonctionnait, mais en ligne, ça ne fonctionne plus.
Merci beaucoup.
<?php
session_start();
require('config/connect.php');
require('config/fonctions.php');
header("Content-type: text/html; charset=utf-8");
// Premièrement, on vérifie s'il les champs PSEUDO et PASSWORD envoyé contiennent des valeurs
if(!empty($_POST['pseudo']) && !empty($_POST['password']))
{
$_POST['pseudo'] = Verif_magicquotes($_POST['pseudo']);
$_POST['password'] = Verif_magicquotes($_POST['password']);
$connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_set_charset('utf8',$connection);
if (!$connection) {
die("Database connection failed: " . mysql_error());
}
$db_select = mysql_select_db(DB_NAME,$connection);
if (!$db_select) {
die("Database selection failed: " . mysql_error());
}
// Allons chercher toutes * la ligne contenent le pseudo envoyé dans la table membres
$requete = "SELECT * FROM membres WHERE pseudo = '".mysql_real_escape_string($_POST['pseudo'])."'";
$req_exec = mysql_query($requete) or die(mysql_error());
// Si on peu accéder à la base de donnée
if($req_exec)
{
// On créer un tableau associatif contenant le résultat de la demande SQL
$resultat = mysql_fetch_array($req_exec);
// On vérifier si la ligne contenent le pseudo envoyé de la base de donnée est identique a la valeur posté
if($resultat['pseudo'] == $_POST['pseudo'])
{
// Si le pseudo est bien présent dans la base de donnée, nous avons extrait les données dans un tableau, alors vérifions si le mot de passe envoyé correspond au pseudo envoyé
if($resultat['pass'] == $_POST['password'])
{
$_SESSION['login'] = $resultat['pseudo'];
header('Location: login.php');
}
// Sinon, si le mot de passe est innexacte, on affiche
else
{
$erreurConnexion = "<span style='color:red; font-weight:bold;'>Votre mot de passe est invalide</span><br />";
}
}
// Si la base de donnée ne trouve pas le pseudo, on affiche
else
{
$erreurConnexion = "<span style='color:red; font-weight:bold;'>Identifiants invalides</span><br />";
}
}
// Si on ne peu pas accéder à la base de donnée, on affiche l'erreur
else
{
echo '<p class="erreur">Erreur à la connexion <br />Erreur SQL : '.mysql_error().'<br/> avec la requete '.$requete.'</p>';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta name="description" content="description de la page" />
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div id="form-connexion">
<h1>Connexion</h1>
<form method="post" action="index.php">
<input type="text" placeholder="Identifiant" name="pseudo" class="connexion-fields" value="<?php if(isset($_POST['pseudo'])) echo $_POST['pseudo'] ?>" /><br /><br />
<input type="password" placeholder="Mot de passe" name="password" class="connexion-fields" value="<?php if(isset($_POST['password'])) echo $_POST['password'] ?>"/><br /><br />
<?php if(isset($erreurConnexion)) echo $erreurConnexion; ?>
<input type="submit" value="Se connecter" class="connexion-button" />
</form>
<p><a href="login.php">Déjà connecté?</a></p>
<p><a href="#">Mot de passe oublié?</a></p>
</div>
</body>
</html>
En localhost ça marche parfaitement!!!
Oui c'est un problème bien connu, il faut enregistrer les pages sans la signature unicode (BOM).Bonjour tout le monde!
Je voulais seulement vous tenir au courant de mon problème, au cas où quelqu'un d'autre rencontrerait le même.
L'erreur décrite plus haut indique qu'il y a du code client (autre que PHP) écrit avant votre session_start();.
Mais en regardant votre code, vous ne comprendrez rien.
Cela signifie que vous utilisez un éditeur de code qui enregistre en plaçant du BOM dans le fichier, avant votre code, invisible pour vous...
Je ne sais pas vraiment ce qu'est du BOM, mais l'important, c'est que dans Notepad++ (mon éditeur), vous pouvez choisir, en haut, "Encodage" et "UTF-8 sans BOM".
Enregistrez votre fichier, et ce sera sans ce fameux code.
Et maintenant, tout fonctionne
if($resultat['pass'] == $_POST['password'])
{
$_SESSION['login'] = $resultat['pseudo'];
header('Location: login.php');
exit;
}
C'était indiqué dans le tuto duquel tu t'es inspiré, et le "exit" n'était pas en trop même si tu n'en vois pas l'utilité de prime abord car le bug potentiel est erratique