[ Script PHP ] Problème de connexion (session php)

  • Auteur de la discussion Auteur de la discussion guicara
  • Date de début Date de début
WRInaute passionné
Bonjours,

Je posséde un script sur mon site qui gère les Articles et les Tutoriaux (c'est un script de gestion d'articles). Le script marche très bien aucun sousi.

Sauf que depuis que j'ai décidé de mettre ma page de connexion (index.php)
(exemple sur cette page) au design de mon site rien ne va ! Je ne peux plus me connecter.

Quand j'entre mes identifiants, je suis reconnu sa me redirige sur la page admin.php. Mais sur cette page (ou ce trouve l'espace d'admin) je ne voit que le design de mon site, sans les informations du script.

Si la page de connexion est vide, sans design tous va bien.

Ma page index.php (au design)

Code:
				<br />
				<br />
				<h3>Articles - Administration</h3>
				<br />
			 	<? session_start();
			 	include('../configuration/configuration.php');
			 	echo'<table width="100%" cellpadding="0" border="0" cellspacing="0" align="center" valign="center">
			 	  <tr height="5"><td></td></tr>
			 	</table>';
			 	if(!empty($_GET)) {
			 	echo'<table width="95%" cellpadding="0" border="0" cellspacing="0" align="center" valign="center" class="categories">';
			 	echo'<td><center><font color="#800000">/!\ ACTION INTERDITE /!\</font></center><br><u>Informations</u> : pour des raisons de sécurité, la méthode GET génère une erreur si elle est utilisée dans une URL.<br>Une URL du type :<br>http://www.monsite.com/article/administration/index.php (<font color="green">fonctionnera</font>)<br> http://www.monsite.com/article/administration/index.php?login=blablabla&password=blablalba (<font color="red">ne fonctionnera pas</font>).'; 
			 	}
			 	else {
			 	if(!$submit) {
			 	if(!session_is_registered("admin"))
			 	{
			 	?>
			 	<table width="95%" cellpadding="0" border="0" cellspacing="5" align="center" valign="center" class="categories">
			 	<form action="" method="post" name="add" OnSubmit="return champsok()">
			 		<tr height="10">
			 		<td align="center" valign="center" colspan="2"></td>
			 	  </tr>
			 	  <tr>
			 	   <td align="right" valign="center">Login : </td><td><input type="text" name="login" style="width:150px;"></input></td>
			 	  </tr>
			 	  <tr>
			 	   <td align="right" valign="center">Pass : </td><td><input type="password" name="password" style="width:150px;"></input></td>
			 	  </tr>
			 		  <tr>
			 	   <td align="right" valign="center" class="sommaire"></td><td><input type="submit" name="submit" value="Connexion" style="width:150px;"></input></td>
			 	  </tr>
			 		</form>
			 		<tr>
			 		<td align="center" valign="center" colspan="2"></td>
			 	  </tr>
			 	</table> 
			 	<?
			 	}
			 	else {
			 	?>
			 	<script LANGUAGE="JavaScript">
			 	    setTimeout("window.location='admin.php'",0); 
			 	    // delai d'attente en ms
			 			</script>
			 	<?
			 	}
			 	}
			 	elseif($submit) {
			 	echo'<table width="50%" cellpadding="0" border="0" cellspacing="0" align="center" valign="center" class="admin">';
			 	echo'<td align="center" valign="center">';
			 	// on se connecte à MySQL 
			 	$db = mysql_connect($host, $login_host, $pass_host);  
			 	
			 	// on seléctionne la base 
			 	mysql_select_db($hostname,$db);  
			 	
			 	// On n'effectue les traitement qu'à la condition que 
			 	// les informations aient été effectivement postées
			 	if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password']))) {
			 				 	
			 	  extract($_POST); 
			 	
			 	  // On va chercher le mot de passe afférent à ce login
			 	  $sql = "SELECT * FROM ".$prefixe."_admins WHERE login='".secure($login)."'";
			 	  $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
			 	  
			 	  // On vérifie que l'utilisateur existe bien
			 	  if (mysql_num_rows($req) > 0) {
			 	     $data = mysql_fetch_assoc($req);
			 	    $password = secure(md5($password));
			 	    // On vérifie que son mot de passe est correct
			 	    if ($password == $data['password']) {
			 			$niveau = $data['niveau'];
			 			if ($niveau == "1") {
			 			$_SESSION['super_admin'] = $login;
			 			} else {}
 			 	      $_SESSION['admin'] = $login;
			 				 // on crée la requete SQL
			 				 $date = date("y-m-d");
			 				 $sql = "UPDATE ".$prefixe."_admins SET date='$date' WHERE login= '".secure($login)."'";
			 				 $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
			 				 ?>
			 	<script LANGUAGE="JavaScript">
 			 	    setTimeout("window.location='admin.php'",0); 
			 	    // delai d'attente en ms
			 	</script>
			 			<?
			 	    }
  
			 	else { ?>
			 	<span class="normal"><font class="normal" color="#800000">Erreur :</font> Pseudo ou password invalide.</font></span>
			 	<script LANGUAGE="JavaScript">
			 	    setTimeout("window.location='index.php'",4000); 
			 	    // delai d'attente en ms
			 				 	</script>
			 	<? }
			 	// on ferme la connexion à mysql 
			 	mysql_close();
			 	}
			 	else { ?>
			 	<span class="normal"><font color="#800000">Erreur :</font> Pseudo ou password invalide.</font></span>
			 	<script LANGUAGE="JavaScript">
			 	    setTimeout("window.location='index.php'",4000); 
			 	    // delai d'attente en ms
			 	</script>
			 	<? }
			 	}
			 	else { ?>
			 	<font color="#800000">Erreur :</font> Aucun champs ne doit rester vide.</font>
			 	<script LANGUAGE="JavaScript">
			 	    setTimeout("window.location='index.php'",4000); 
			 	    // delai d'attente en ms
			 	</script>
			 	<? }
			 	}
			 	}
			 	?></body></html>
			 	<br />
			 	<br />
			 	<br />
			 	<br />

et il y a aussi un code javascript entre head (si on n'a pas renseigner les cases login et pass).

Et le code sans le design

Code:
<? session_start();
include('../configuration/configuration.php');
echo'<table width="100%" cellpadding="0" border="0" cellspacing="0" align="center" valign="center">
  <tr>
   <td align="center" valign="center" class="titre">Zone Administration</td>
  </tr>
  <tr height="5"><td></td></tr>
</table>';
if(!empty($_GET)) {
echo'<table width="95%" cellpadding="0" border="0" cellspacing="0" align="center" valign="center" class="categories">';
echo'<td><center><font color="#800000">/!\ ACTION INTERDITE /!\</font></center><br><u>Informations</u> : pour des raisons de sécurité, la méthode GET génère une erreur si elle est utilisée dans une URL.<br>Une URL du type :<br>http://www.monsite.com/article/administration/index.php (<font color="green">fonctionnera</font>)<br> http://www.monsite.com/article/administration/index.php?login=blablabla&password=blablalba (<font color="red">ne fonctionnera pas</font>).'; 
}
else {
if(!$submit) {
if(!session_is_registered("admin"))
{
?>
<script language="javascript">
<!--
function champsok()
{
if (document.add.login.value.length == 0)
{
alert("Veuillez inscrire votre login !");
return false;
}
if (document.add.password.value.length == 0)
{
alert("Veuillez inscrire votre mot de passe !");
return false;
}
return true;
}
//-->
</script>
<table width="50%" cellpadding="0" border="0" cellspacing="5" align="center" valign="center" class="categories">
<form action="" method="post" name="add" OnSubmit="return champsok()">
	<tr height="10">
	<td align="center" valign="center" colspan="2"></td>
  </tr>
  <tr>
   <td align="right" valign="center">Login : </td><td><input type="text" name="login" style="width:150px;"></input></td>
  </tr>
  <tr>
   <td align="right" valign="center">Pass : </td><td><input type="password" name="password" style="width:150px;"></input></td>
  </tr>
	  <tr>
   <td align="right" valign="center" class="sommaire"></td><td><input type="submit" name="submit" value="Connexion" style="width:150px;"></input></td>
  </tr>
	</form>
	<tr>
	<td align="center" valign="center" colspan="2"></td>
  </tr>
  <tr>
	<td align="center" valign="center" colspan="2"><small>[<A HREF="javascript:window.close()" class="d">fermer la fenêtre</a>]</small></td>
  </tr>
</table> 
<?
}
else {
?>
<script LANGUAGE="JavaScript">
    setTimeout("window.location='admin.php'",0); 
    // delai d'attente en ms
		</script>
<?
}
}
elseif($submit) {
echo'<table width="50%" cellpadding="0" border="0" cellspacing="0" align="center" valign="center" class="admin">';
echo'<td align="center" valign="center">';
// on se connecte à MySQL 
$db = mysql_connect($host, $login_host, $pass_host);  

// on seléctionne la base 
mysql_select_db($hostname,$db);  

// On n'effectue les traitement qu'à la condition que 
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password']))) {

  extract($_POST); 

  // On va chercher le mot de passe afférent à ce login
  $sql = "SELECT * FROM ".$prefixe."_admins WHERE login='".secure($login)."'";
  $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
  
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);
    $password = secure(md5($password));
    // On vérifie que son mot de passe est correct
    if ($password == $data['password']) {
		$niveau = $data['niveau'];
		if ($niveau == "1") {
		$_SESSION['super_admin'] = $login;
		} else {}
       $_SESSION['admin'] = $login;
			 // on crée la requete SQL
			 $date = date("y-m-d");
			 $sql = "UPDATE ".$prefixe."_admins SET date='$date' WHERE login= '".secure($login)."'";
			 $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
			 ?>
<script LANGUAGE="JavaScript">
    setTimeout("window.location='admin.php'",0); 
    // delai d'attente en ms
</script>
		<?
    }
  
else { ?>
<span class="normal"><font class="normal" color="#800000">Erreur :</font> pseudo ou password invalide.</font></span>
<script LANGUAGE="JavaScript">
    setTimeout("window.location='index.php'",4000); 
    // delai d'attente en ms
</script>
<? }
// on ferme la connexion à mysql 
mysql_close();
}
else { ?>
<span class="normal"><font color="#800000">Erreur :</font> pseudo ou password invalide.</font></span>
<script LANGUAGE="JavaScript">
    setTimeout("window.location='index.php'",4000); 
    // delai d'attente en ms
</script>
<? }
}
else { ?>
<font color="#800000">Erreur :</font> aucun champs ne doit rester vide.</font>
<script LANGUAGE="JavaScript">
    setTimeout("window.location='index.php'",4000); 
    // delai d'attente en ms
</script>
<? }
}
}
?></body></html>

Merci d'avance
Ou est mon problème ??
 
WRInaute discret
guicara a dit:
Code:
				<br />
				<br />
				<h3>Articles - Administration</h3>
				<br />
			 	<? session_start();
			 	include('../configuration/configuration.php');

Bonjour,

En PHP le session_start() se met avant tout affichage, y compris les sauts de ligne.
Met ton session_start() avant les <br> et le <h3>, ca devrait aller mieux je pense.

Bolbo
 
WRInaute passionné
Ok, j'y met au tous début de ma page, car ce que j'ai donné n'est que un petit copier collé de mon code source.

Donc avant head ?
 
WRInaute discret
Oui voila, en fait session_start() doit être appelé avant tout affichage par le navigateur.

-http://cyberzoide.developpez.com/php4/faqsession/ a dit:
Tentative d'envoie d'entêtes
Warning: Cannot add header information - headers already sent by (output started at /home/SiteWeb/SiteAnalyse/index.php:3) in /home/SiteWeb/SiteAnalyse/index.php on line 25

Cette erreur survient lorsqu'on tente d'envoyer des entêtes grâce à la fonction header() après avoir écrit dans la page.

On ne peut pas commencer une session après que le serveur ait envoyé au client les entêtes HTTP/1.0 (ou supérieures) de la page.

Ainsi, la commande session_start() doit impérativement être exécutée avant tout envoi par le serveur d'entêtes HTTP au navigateur.

L'identifiant de session étant envoyées sous forme de cookies au client, ce dernier doit être envoyé avant que la page ne s'affiche car l'affichage force l'envoie d'entêtes.

Tout contenu texte placé avant session_start() (même un saut de ligne) provoque un affichage et donc l'envoie d'entêtes qui doivent précéder contenu de la page.

Ce qu'il ne faut pas faire :

<html>
<body>
<?php session_start();
...

ceci non plus :

<?php echo "<html>";
...
session_start();

Car cela provoque l'envoi d'entêtes au navigateur. Donc ces deux essais sont erronés. Il faut faire le session_start() avant toute chose !!!

Même un simple saut de ligne dans le script avant session_start() provoque cette erreur.
 
WRInaute passionné
Encore quelques erreur pour moi, personne ne peux m'integrer ce script a une page de mon design vierge ?

page vierge ici >http://www.design-graph.info/aide/index.php

Merci d'avance
Guicara
 
Discussions similaires
Haut