8797 sujets

Développement web côté serveur, CMS

Bonjour,

je souhaiterai récupérer dans une session, deux champs de ma base (db_login et id_user) après une authentification des champs de formulaires login et password.

J'arrive à récupérer et vérifier les informations pour le login et pass, mais impossible de garder en session l'id_user.


<?php
require('config.php');
	
// username and password sent from form
$myusername=$_POST['login'];
$passwd=$_POST['password'];
$mypassword = md5($passwd);

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);			

//on vérifie si c'est bon
$sql="SELECT * FROM membres WHERE db_login='".$myusername."' AND db_paswd='".$mypassword."'";
$result=mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1)
{
	// Register $myusername, $mypassword and redirect to file "login_success.php"
	session_start();
	$_SESSION['id'] = $id;
	$_SESSION['db_login'] = $myusername;
	echo 'Vous etes bien logué';
	header("location:ajout.php");
}
?>


Je dois m'y prendre comme un manche.

La session sera réutilisée dans un autre fichier pour insertion dans une autre table.
 ....
$member_id=$_SESSION['id'];


est ce que j'ai bon?
cloridriks a écrit :
Bonjour,

 ....
$member_id=$_SESSION['id'];


est ce que j'ai bon?


Ton application pour l'authentification me parait un peu bizare...Essaye en parcourant tes tables :


while($data = mysql_fetch_assoc($sql))
{
	if ( $data['db_login'] == $myusername && $data['db_paswd'] == $mypassword )
	{
		session_start();
		$_SESSION['id'] = $data['id_user'];
		$_SESSION['db_login'] = $myusername;
		echo 'Vous etes bien logué';
		header("location:ajout.php");			
	}
} 


Je pense que tu auras un petit warning a cause du header mal placé Smiley smile
Modifié par FunK (02 Oct 2008 - 16:52)
ok, je vais tenter, sinon la seconde partie du code fait partie de mon vérif.php ou je check toutes les lignes de mon formulaire.

Je donne toutes mes variables avant


session_start()
// code avant que je ne mets pas

$_member=$_SESSION[id_user]
$nickname=variable postée dans le formulaire ...

// ensuite vérification sur tout avant insertion

Modifié par cloridriks (02 Oct 2008 - 17:07)
Modérateur
FunK a écrit :



while($data = mysql_fetch_assoc($sql))
{
	if ( $data['db_login'] == $myusername && $data['db_paswd'] == $mypassword )
	{
		session_start();
		$_SESSION['id'] = $data['id_user'];
		$_SESSION['db_login'] = $myusername;
		echo 'Vous etes bien logué';
		header("location:ajout.php");			
	}
} 



Salut,

Ce code ne pas fonctionner puisqu'il y a un echo avant le header() Smiley cligne . Normalement, il devrait y avoir ce type de message :

Warning: Cannot modify header information - headers already sent by...

<<<EDIT
Je crois que ce serait plutôt ceci :


<?php
while($data = mysql_fetch_assoc($sql))
{
	if ( $data['db_login'] == $myusername && $data['db_paswd'] == $mypassword )
	{
		session_start();
		$_SESSION['id'] = $data['id_user'];
		$_SESSION['db_login'] = $myusername;
		
		ob_start();
		echo 'Vous êtes bien logué';
		header('location:ajout.php'); 
		ob_end_flush();		
	}
} 
?>

EDIT;

++
Modifié par Nolem (02 Oct 2008 - 20:47)
Nolem a écrit :


Salut,

Ce code ne pas fonctionner puisqu'il y a un echo avant le header() Smiley cligne . Normalement, il devrait y avoir ce type de message :

Warning: Cannot modify header information - headers already sent by...


C'est pour cela que je lui ai préciser juste en dessous du code Smiley cligne
J'ai réussi à résoudre ces histoire de session Smiley smile , premier soucis d'éliminé

J'ai fait ceci :

<?php
require('config.php');
	
// username and password sent from form
$myusername=$_POST['login'];
$passwd=$_POST['password'];
$mypassword = md5($passwd);

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);			

//on vérifie si c'est bon
$sql="SELECT id, db_login, db_paswd FROM membres WHERE db_login='".$myusername."' AND db_paswd='".$mypassword."'";
$result=mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$count=mysql_num_rows($result);

if (!$result) 
{
   echo "Impossible d'exécuter la requête ($sql) dans la base : " . mysql_error();
   exit;
}

if (mysql_num_rows($result) == 0) 
{
   echo "Vous n'etes pas encore identifié sur le site";
   exit;
}

$row = mysql_fetch_assoc($result); 

// on lance la session avec les enregistrements pour l'id utilisateur et le login
    session_start();
	$_SESSION['id'] = $row["id"];
	$_SESSION['myusername']= $row["db_login"];
    header("location:ajout.php");
?>


qui marche bien et qui me permet de récupérer ce qui me manquait en données.
Vérification avec un echo de l'id utilisateur une fois loggé.

Maintenant que cette partie marche, l'insert des données merde ... je joue au chat et à la souris avec mes pages ///

<?php
session_start();
?>
<?php include('top.php');?>
	  <div id="main">
		<div class="right_side">
              <h2>De nouveaux personnages?</h2>
              <h3>Ajoutez vos h&eacute;ros favoris &agrave; notre base</h3>
              <p>
                <script type="text/javascript" src="js/livevalidation.js"></script>
              </p>
<?php
// vérification du formulaire avant insertion
if ($_POST['valide'] == 1) 
{
	// Ajout membre_id 
	$member_id = $_SESSION['id'];
	$nickFR = $_POST['nickFR'];
	$nickGB = $_POST['nickGB'];
	$nom = $_POST['nom'];
	$univers = $_POST['univers'];
	$pouvoirs = $_POST['pouvoirs'];
	$shortdesc = $_POST['shortdesc'];
	$S1 = $_POST['S1'];
	$S2 = $_POST['S2'];
	$S3 = $_POST['S3'];
	$S4 = $_POST['S4'];
	$S5 = $_POST['S5'];
	$apparition = (htmlentities ($_POST['apparition']));
	$situation = (htmlentities ($_POST['situation']));
	$equipe = (htmlentities ($_POST['equipe']));
	$description = (htmlentities ($_POST['description']));
 
	if ($nickFR == '' || $nickGB == '' || $nom == '' || $pouvoirs == '' ||
	    $shortdesc == '' || $S1 == '')
	{
		if($nickFR == '')
			echo "<b>Merci de renseigner le champ nom du personnage français</b><br>";
		if($nickGB == '')
			echo "<b>Merci de renseigner le champ nom du personnage anglais</b><br>";
		if($nom == '')
			echo "<b>Merci de renseigner le champ nom civil</b><br>";
		if($pouvoirs == '')
			echo "<b>Merci de renseigner le champ pouvoirs</b><br>";
		if($shortdesc == '')
			echo "<b>Merci de renseigner le champ résumé</b><br>";
		if($S1 == '')
			echo "<b>Merci de renseigner au moins une source</b><br>";
	}
 	else
	{
// Connexion a la base
require("configCD.php");
 
		// On vérifie si le nomFR et nomGB existe déjà ou pas
		$sql =	"SELECT * FROM heros WHERE nickFR = '". addslashes($nickFR)."' OR nickGB = '".addslashes($nickGB)."'";
		$req =	mysql_query($sql);
 
		// On compte le nombre de ligne reçu par la requête
		$count = mysql_num_rows($req);
		
		if($S2 == '') {
			$S2=='0';
			}
		if($S3 == '') {
			$S3=='0';
			}
		if($S4 == '') {
			$S4=='0';
			}
		if($S5 == '') {
			$S5=='0';
			}

		$sources = $S1."|".$S2."|".$S3."|".$S4."|".$S5;
		
// FORMULAIRE - Si le nom n'existe pas
		if ($count == 0)
		{
			// HISTO ajout un member_id
			$sql = 	"INSERT INTO heros (member_id, nickFR, nickGB, nom, univers, apparition, situation, equipe, pouvoirs, shortdesc, description, source)
				 VALUES ('$member_id','$nickFR', '$nickGB', '$nom', '$univers', '$apparition', '$situation', '$equipe', '$pouvoirs', '$shortdesc', '$description', '$sources')";
 
			mysql_query($sql) or die('Erreur SQL '.mysql_error().'<br />Requête utilisée : '.$sql);
 
					
			// Affichage d'un message pour décrire le bon déroulement
			echo("<br><div align=\"center\"><font color=\"green\"><b>Merci ".$_SESSION["myusername"]." Le nouveau personnage a été ajouté</b></div><br/>") ;
			
		}
		else
		{
			echo "<br><div align=\"center\"><font color=\"red\"><b>Le personnage est déjà en base, merci de refaire une saisie.</b></div>";
		}
 
		// On ferme la connexion à la base de données
		mysql_close();
	}
}
?>
	    </div>
			<? include('gauche.php');?>
	  </div>
<? include('footer.php');?>
	</div>
</body>
</html>


Je me retrouve avec une page blanche sans insertion de données ... je continue de creuser les étapes pour trouver l'erreur.
Modifié par cloridriks (03 Oct 2008 - 08:55)
@Funk et Nolem > de toute façon cet echo était totalement inutile puisqu'avec une redirection le message n'aurait pas eu le temps d'être lu. Smiley cligne

@cloridriks > sans aller plus loin : ta page est forcément invalide.

Soit tu as mis tout le code et dans ce cas il te manque tous les éléments DOCTYPE, HTML, HEAD, BODY...

Soit ces éléments sont avant le session_start et c'est incorrect puisque cette fonction doit être utilisée avant toute écriture Html. Smiley murf