8795 sujets

Développement web côté serveur, CMS

Bonjour voilà je vous explique le principe je fait une page de connexion qui va recherche dans une base de données si le pseudo et le mot de passe existe si c'est le cas la fenetre indique le nom d'utilisateur sinon elle se recharge avec le pseudo et le mot de passe. j'ai une erreur Parse error: syntax error, unexpected T_ELSE in C:\wamp\www\Projet\connexion.php on line 16 je ne la trouve pas merci de m'aider voici mon code.

<?php
mysql_connect("localhost", "root", "");
	mysql_select_db("site_voyage"); 
	$reponse = mysql_query("SELECT * FROM membres");

while ($donnees = mysql_fetch_array($reponse)){

if ($_SESSION['pseudo']==$donnees['pseudo'] AND $_SESSION['passe']==$donnees['passe'] ){

$mot_de_passe==$_SESSION['passe'] ;
$pseudo==$_SESSION['pseudo'];

}
}
else if (isset($_POST['mot_de_passe'])) {
    
   $mot_de_passe = $_POST['mot_de_passe'];
	$_SESSION['passe']="$mot_de_passe"; 
	$pseudo=$_POST['pseudo'];
	$_SESSION['pseudo']="$pseudo";
}
else 
{
	$pseudo=""; 
    $mot_de_passe = ""; 
	$_SESSION['passe']="$mot_de_passe";
	$_SESSION['pseudo']="$_pseudo"; 
}

while ($donnees = mysql_fetch_array($reponse) ){
if ($_SESSION['pseudo']==$donnees['pseudo'] AND $_SESSION['passe']==$donnees['passe'] ){




        
        
echo "Bienvenue {$_SESSION['pseudo']}"; 
 }
 }
 mysql_close();    
 ?> 
 <form action="Co.php" method="post">

 <input type="submit" value="D&eacute;connexion" />
 </form>

<?php

else 
{

?>
<head>
        <title>Page prot&eacute;g&eacute;e par mot de passe</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>

<form action="accueil.php" method="post">
<input type="text" name="pseudo" value="pseudo"/>
<input type="password" name="mot_de_passe" value="passe" /> <input type="submit" value="Valider" />

</form>
<?php
} // Fin du else
// Fin du code [smile]
?>
    </body>
</html>


Modifié par anthonydb1 (09 Oct 2008 - 18:59)
Salut, sa aurai été bien que tu indique quel est la ligne 16.

Je pense déjà pour commencer que le while ne sert à rien, car tu a besoin de prendre juste les valeurs d'un enregistrement


SELECT * FROM `membres` WHERE `pseudo`= $_POST['pseudo']

Au préalable fait une requête pour vérifier si le pseudo existe bien.
Après tu récup la valeur du mot de passe et tu la compare avec celui qui est rentré dans le formulaire.

Après j'ai du mal à comprendre ton code à quoi il sert et surtout son fonctionnement, et je pense pas que stocker un mot de passe en SESSION est super. Il serai aussi bon de protéger tes valeurs $_POST.

Voilà je pense ne pas m'être trompé.
J'ai reussi a enlever les erreurs de parse mon souci maintenant c'est que lorsque je charge la page et que je m'identifie avec des valeurs entres dans ma base de donne je n'arrive pas a avoir le message bienvenue a pseudo, je retombe sur ma page qui me demande le pseudo et le pass quelqu'un peut m'aider le code est celui-ci.

<?php
mysql_connect("localhost", "root", "");
	mysql_select_db("site_voyage"); 
	$reponse = mysql_query("SELECT * FROM membres");

while ($donnees = mysql_fetch_array($reponse)){
       $a=$donnees['pseudo'];
	   $b=$donnees['passe'];
if ($_SESSION['pseudo']=="$a"){

$mot_de_passe==$_SESSION['passe'] ;
$pseudo==$_SESSION['pseudo'];

}



else if (isset($_POST['mot_de_passe'])) {
    
   $mot_de_passe = $_POST['mot_de_passe'];
	$_SESSION['passe']="$mot_de_passe"; 
	$pseudo=$_POST['pseudo'];
	$_SESSION['pseudo']="$pseudo";
}
else 
{
	$pseudo=""; 
    $mot_de_passe = ""; 
	$_SESSION['passe']="$mot_de_passe";
	$_SESSION['pseudo']="$_pseudo"; 
}



if ($_SESSION['pseudo']=="$a" AND $_SESSION['passe']=="$b" ){




        
        
echo "Bienvenue {$_SESSION['pseudo']}"; 

 
 
     
 ?> 
 <form action="Co.php" method="post">

 <input type="submit" value="D&eacute;connexion" />
 </form>

<?php
}
else 
{

?>
<head>
        <title>Page prot&eacute;g&eacute;e par mot de passe</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>

<form action="accueil.php" method="post">
<input type="text" name="pseudo" value="pseudo"/>
<input type="password" name="mot_de_passe" value="passe" /> <input type="submit" value="Valider" />

</form>
<?php
} 
}

?>
    </body>
</html>


Modifié par anthonydb1 (08 Oct 2008 - 22:26)
normal tes tests sont dans la boucles while

même si tu as une validation et tu fini sur une non validation tu n'auras rien.

je pousse plus loin



<?php

if(!empty($_POST['pseudo']) & $_POST['pseudo']!='pseudo' & !empty($_POST['mot_de_passe']) & $_POST['mot_de_passe']!='passe'){

	mysql_connect("localhost", "root", "");
	mysql_select_db("site_voyage");

	// les deux lignes c'est pour éviter les injection SQL
	$a=mysql_real_escape_string(htmlspecialchars($_POST['pseudo'],ENT_QUOTES));
	$b=mysql_real_escape_string(htmlspecialchars($_POST['passe'],ENT_QUOTES));
	// fin protection anti injection sql

	// ici plutot que de ramener tous les champs on récupère en 
 général le numéro de client par exemeple IDclient Et on travail avec.
	$reponse = mysql_query("SELECT * FROM membres WHERE pseudo='".$a."' AND passe='".$b."';");


	// ici tu testerai si IDclient existe. Sinon tu mets le client par défaut. Mais dans ton cas.
$donnees = mysql_fetch_array($reponse);
       $log=$donnees['pseudo'];
	   $pass=$donnees['passe'];
}


?>
<html>
<head>
	<title>Page prot&eacute;g&eacute;e par mot de passe</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<?
if ($_SESSION['pseudo']==$log & $_POST['passe']==$pass){

$_SESSION['passe']=$_POST['passe'];
$_SESSION['pseudo']=$_POST['pseudo'];

echo "Bienvenue {$_SESSION['pseudo']}";

?>
 <form action="Co.php" method="post">

 <input type="submit" value="D&eacute;connexion" />
 </form>
<?


}
else{
$_SESSION['passe']="";
$_SESSION['pseudo']="";
?>
<form action="accueil.php" method="post">
<input type="text" name="pseudo" value="pseudo"/>
<input type="password" name="mot_de_passe" value="passe" /> 
<input type="submit" value="Valider" />

</form>
</body>
</html>




je t'envoie une correction, maisle code de base est assez incohérent, par rapport au règle de "bonne conduite php"

récupère le num du compte et travail avec.

Les lignes de sécurité ne sont pas a prendre à la légère, je te conseille de les utiliser pour éviter un piratage de ta base de données.
Modifié par alexiase (09 Oct 2008 - 15:09)