Page 1 sur 1

Redirection avec Header

Posté : 12 oct. 2012, 20:50
par rickphp
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.

Re: Redirection avec Header

Posté : 12 oct. 2012, 22:32
par rickphp
J'ai ces erreurs dans mon de :

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/idevfor/domains/idevforyou.com/public_html/login/index.php:1) in /home/idevfor/domains/idevforyou.com/public_html/login/index.php on line 41

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/idevfor/domains/idevforyou.com/public_html/login/index.php:1) in /home/idevfor/domains/idevforyou.com/public_html/login/index.php on line 41

Warning: Cannot modify header information - headers already sent by (output started at /home/idevfor/domains/idevforyou.com/public_html/login/index.php:1) in /home/idevfor/domains/idevforyou.com/public_html/login/index.php on line 43

Je comprend pas trop, je vois que l'on doit mettre session_start(); au début complètement du code (il l'est) et le header également.

Mais c'est insensé!

Re: Redirection avec Header

Posté : 12 oct. 2012, 22:39
par dix2
salut,

il ne doit pas y avoir d'espace ou de saut de ligne au début de ton fichier
il doit commencer par <?php

@+
dix2

Re: Redirection avec Header

Posté : 13 oct. 2012, 21:44
par rickphp
Pourtant je n'est aucun espace...

Voici les erreurs :

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/idevfor/domains/idevforyou.com/public_html/login/index.php:1) in /home/idevfor/domains/idevforyou.com/public_html/login/index.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/idevfor/domains/idevforyou.com/public_html/login/index.php:1) in /home/idevfor/domains/idevforyou.com/public_html/login/index.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at /home/idevfor/domains/idevforyou.com/public_html/login/index.php:1) in /home/idevfor/domains/idevforyou.com/public_html/login/index.php on line 6

Voici le code de mon index..
<?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!!!

J'ai également une page login.php et deconnexion.php qui on un session_start et un header location qui ne fonctionne pas en ligne...

Re: Redirection avec Header

Posté : 15 oct. 2012, 20:35
par rickphp
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 :)

Re: Redirection avec Header

Posté : 16 oct. 2012, 01:42
par AB
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 :)
Oui c'est un problème bien connu, il faut enregistrer les pages sans la signature unicode (BOM).

J'ajoute au passage qu'un header de redirection devrait toujours être suivi d'un "exit", conformément à ce qu'indique la doc. Sinon parfois sans trop savoir pourquoi il se peut que la redirection ne fonctionne pas dans certains cas.
Ton code devrait donc être :
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 :wink:

Re: [RESOLU] Redirection avec Header

Posté : 16 oct. 2012, 14:36
par rickphp
Et bien! Je te remercie, je vais ajouter cela :)