Page 1 sur 2

Espace sécurisé : erf

Posté : 15 août 2005, 13:23
par `Jun!or
Bonjour,
Je suis un grand débutant dans le monde du php donc soyez gentil :oops:
Je suis en train de faire une zone sécuriser pour créer une zone admin :)
Mais j'ai un problème lorsque je me connecte :
<?php
// Connexion à la base de données
mysql_connect('localhost','root','');
mysql_select_db('dbhost');

$reponse = mysql_query('SELECT * FROM admin WHERE');

// Recupération de auth.php : si on les a reçu
if ( isset($_POST['pseudo']) && isset ($_POST['motdepasse']))
	{
	// On les recupère
	$pseudo = $_POST['pseudo'];
	$motdepasse = $_POST['motdepasse'];
	// On recupère les infos de la BDD
	$reponse = mysql_query('SELECT * FROM admin WHERE user_name=$pseudo');
	while ( $donnees = mysql_fetch_array($reponse) )
		{
	$donnees['user_name'];
	$donnees['password'];
		}
		if {
			// Si les infos de auth.php et de la base de données sont pareils alors on continu
			$pseudo = $donnees['user_name'];
			$motdepasse = $donnees['password'];
			$autorisation_rentrer = "oui";
			}
		else
			{
			// Vous n'êtes pas admin alors autorisation = NULL
			echo "Vos identifiants sont faux"
			}
		}
else {
	echo "Un de vos champs n'est probablement pas rempli"
	}
	
if ($autorisation_entrer = "oui")
		{
		// initialisation de la session
		session_start() ; 
		// on sauvegarde donc son nom dans la session
		$_SESSION['user_name'] = $pseudo ;
		$message = 'vous êtes correctement identifié' ;
		}
?>
Lorsque je me connecte, j'obtiens cette erreur
Parse error: parse error, unexpected '{', expecting '(' in /var/www/free.fr/4/4/teampowa/krypton/admin/verif.php on line 20
Je n'arrive pas à trouver l'origine du problème... même en cherchant dans les lignes "autour" de la vingtième.

Merci à ceux qui pourront m'aider

Posté : 15 août 2005, 13:29
par Cyrano
Tu as un if suivi immédiatement d'une accolade ouvrante : alors que ce drvait être if(qqch) {...
Ensuite je te signale qu'àla fin de l'instruction dans le else qui suit, il manque un ";" de fin d'instruction:
    if ($condition == $valeur)
    {
        // Si les infos de auth.php et de la base de données sont pareils alors on continu
        $pseudo = $donnees['user_name'];
        $motdepasse = $donnees['password'];
        $autorisation_rentrer = "oui";
    }
    else
    {
        // Vous n'êtes pas admin alors autorisation = NULL
        echo "Vos identifiants sont faux";
    }

Posté : 15 août 2005, 13:43
par `Jun!or
Merci, j'ai pu régler la plupart des "grands problèmes" mais j'ai l'impression qu'il ne recupère pas les infos de la BDD ou il y a une erreur dans ma page.
<?php
// initialisation de la session
		session_start() ; 
// Connexion à la base de données
mysql_connect('localhost','root','');
mysql_select_db('teampowa');

$reponse = mysql_query('SELECT * FROM admin WHERE') or die(mysql_error());

// Recupération de auth.php : si on les a reçu
if ( isset($_POST['pseudo']) && isset ($_POST['motdepasse']))
	{
	// On les recupère
	$pseudo = $_POST['pseudo'];
	$motdepasse = $_POST['motdepasse'];
	// On recupère les infos de la BDD
	$reponse = mysql_query('SELECT * FROM admin WHERE user_name = \' . $pseudo . \'');
	while ( $donnees = mysql_fetch_array($reponse) )
		{
	$donnees['user_name'];
	$donnees['password'];
		}
		// Si les infos de auth.php et de la base de données sont pareils alors on continu
		if ($pseudo = $donnees['user_name'] AND $motdepasse = $donnees['password'])
			{
			$autorisation_rentrer = "oui";
			}
		else
			{
			// Vous n'êtes pas admin alors autorisation = NULL
			echo "Vos identifiants sont faux";
			}
		}
else {
	echo "Un de vos champs n'est probablement pas rempli";
	}
	
if ($autorisation_entrer = "oui")
		{
		// on sauvegarde donc son nom dans la session
		$_SESSION['user_name'] = $pseudo ;
		$message = 'vous êtes correctement identifié' ;
		}
?>
J'obtiens une erreur
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Merci pour l'aide que vous m'apporterai :)

Posté : 15 août 2005, 13:53
par Cyrano
Il y a d'abord un problème dans l'écriture de ta requête et ensuite dans l'utilisation des résultats. Attention, une comparaison dans un if() se fait avec "==" et non "=". Proposition de corrigé:
<?php
// initialisation de la session
session_start() ;
// Connexion à la base de données
mysql_connect('localhost','root','');
mysql_select_db('teampowa');

$reponse = mysql_query('SELECT * FROM admin WHERE');

// Recupération de auth.php : si on les a reçu
if ( isset($_POST['pseudo']) && isset ($_POST['motdepasse']))
{
    // On les recupère
    $pseudo = $_POST['pseudo'];
    $motdepasse = $_POST['motdepasse'];
    // On recupère les infos de la BDD
    $reponse = mysql_query("SELECT `password` FROM admin WHERE user_name = '". $pseudo ."' LIMIT 0,1");
    if(mysql_num_rows($reponse) > 0)
    {
        while ( $donnees = mysql_fetch_array($reponse) )
        {
            $donnees['user_name'];
            $donnees['password'];
            // Si les infos de auth.php et de la base de données sont pareils alors on continue
            if ($motdepasse == $donnees['password'])
            {
                $autorisation_rentrer = "oui";
            }
            else
            {
                // Vous n'êtes pas admin alors autorisation = NULL
                $autorisation_rentrer = null;
                echo "Vos identifiants sont faux";
            }
        }
    }
    else
    {
        // Pseudonyme non trouvé dans la base... ajuster tes instructions d'affichage dans ce cas.
        $autorisation_rentrer = null;
    }
}
else
{
    echo "Un de vos champs n'est probablement pas rempli";
}

if ($autorisation_entrer = "oui")
{
    // on sauvegarde donc son nom dans la session
    $_SESSION['user_name'] = $pseudo ;
    $message = 'vous êtes correctement identifié' ;
}
?>

Posté : 15 août 2005, 15:03
par `Jun!or
Merci ca a l'air effectivement de marcher :)
Je vais mettre [resolu] et si j'ai un problème je re sur ce post :wink:

Posté : 15 août 2005, 17:07
par `Jun!or
Finalement ca ne marche pas impecablement.
Il à l'air visiblement de creer des sessions ( vu qu'ils sont stocké dans le dossiers sessions chez l'hébergeur free ) mais lorsque je vais dans une page qui est sécurisé, il me renvoi le formulaire d'identification ( à cause du fichier secure.php ).
<?php
// initialisation de la session
session_start() ;

if(!isset($_SESSION['login'])) {
  echo 'Vous n\'êtes pas autoriser à acceder à cette zone';
  include('adminkrypton.php');
  exit;
}
?> 
Le fait d'utiliser des includes ne change rien pour les sessions?

Posté : 15 août 2005, 17:13
par Cyrano
Est-ce que ta session ne se perdrait pas en route quelque part quand tu passes par une page qui ne commencerait pas par session_start ?

Posté : 15 août 2005, 17:18
par `Jun!or
Bah euh non je ne pense puisque je me connecte et je vais directement dans la page sécurisé.
Mais j'ai remarqué un truc, c'est mon fichier modules.php qui inclu les differentes page, hors je suis obliger de mettre le session start dans le modules.php sinon si je met dans la page que je veu protéger et que j'enlève la session start () de modules.php ya une erreur.

Posté : 15 août 2005, 17:21
par Cyrano
J'entends bien, mais une fois identifié, je présume que tu vérifies une variable de session particulière pour vérifier que tu as bien un droit d'accès : à partir de la, il faut que tu aies un session_start() au début de chaque page sur l'ensemble du site. S'il y a un trou, la session est perdue.

Posté : 15 août 2005, 17:24
par `Jun!or
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/free.fr/4/4/teampowa/krypton/modules.php:6) in /var/www/free.fr/4/4/teampowa/krypton/modules/membres/liste_membres.php on line 5
Voilà ce que ca me fais lorsque je met le session start() dans liste_membres.php ( la page inclu par modules.php ) et pas dans le modules.php

Posté : 15 août 2005, 17:27
par Cyrano
Attention, j'ai dit "au début de chaque page" et non "au début de chaque script", donc il faut que le session start soit au début de chaque script qui commence une page. Si ta page se compose de entete.php, page.php et pied.php, tu ne mettras le session_start() qu'au début de entete.php mais surtout pas dans les deux autres sous peine d'avoir le message d'erreur que tu viens de me montrer.

Il y a peut-être un problème avec ta manière de vérifier la variable de session établie lors de l'identification ?

Posté : 15 août 2005, 17:32
par `Jun!or
Ah oui je n'y avais plus penser que j'avais une page du style entete.php. J'ai donc mis la session start dans ce fichier mais l'erreur persiste.
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/free.fr/4/4/teampowa/krypton/modules.php:6) in /var/www/free.fr/4/4/teampowa/krypton/themes/balise.php on line 3
EDIT :
J'ai oublié que supprimer des commentaires de debut de page :? Maintenant plus d'erreur mais quand je me connecte et que je vais sur la page il me remet la page d'autenfication

Posté : 15 août 2005, 18:04
par Cyrano
Il reste un session_start surnuméraire :
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/free.fr/4/4/teampowa/krypton/modules.php:6) in /var/www/free.fr/4/4/teampowa/krypton/themes/balise.php on line 3

Posté : 15 août 2005, 18:06
par `Jun!or
Il reste un session_start surnuméraire :
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/free.fr/4/4/teampowa/krypton/modules.php:6) in /var/www/free.fr/4/4/teampowa/krypton/themes/balise.php on line 3
J'ai édité mon post suivant, je n'ai plus ce message maintenant :) . Mais maintenant pour me facilité la tache, enfin pour trouver mon problème, j'ai crée un dossier sur mon FTP avec ma page de connection (auth.php) , de vérification des infos ( verif.php ), et de la page secure.php ainsi qu'une page sécurisé par secure.php

Mais j'ai l'impression que sur la page il ne recupère pas la session :?

EDIT :
J'ai compris l'origine du problème, dans le secure.php, j'ai mis dans $_SESSION un mauvais nom, j'ai mis login a la place de user_name.
Maintenant ca marche à 100%

Posté : 15 août 2005, 23:52
par `Jun!or
Voilà, maintenant je suis passé à l'ajout de membres par une zone admin et j'ai un problème lors d'une modification de membres ou d'ajout.
Il se compose de deux pages : liste_membres.php et ajout_membres.php

Voici liste_membres.php:
<? include 'secure.php' ?>
<a href="adminkrypton.php?page=ajout_membres">Ajouter un membres</a>

<?
mysql_connect("localhost", "root", "") or die (mysql_error());
mysql_select_db("host");

//-----------------------------------------------------
// Vérification 1 : est-ce qu'on veut ajouter un membre ?
//-----------------------------------------------------

if (isset($_POST['pseudo']) AND isset($_POST['prenom']) AND isset($_POST['age']) AND isset($_POST['ville']) AND isset($_POST['pays']) AND isset($_POST['msn']) AND isset($_POST['processeur']) AND isset($_POST['memoire']) AND isset($_POST['cm']) AND isset($_POST['cg']) AND isset($_POST['resolution_win']) AND isset($_POST['son']) AND isset($_POST['souris']) AND isset($_POST['clavier']) AND isset($_POST['connexion']) AND isset($_POST['sensi_win']) AND isset($_POST['resolution_cs']) AND isset($_POST['sensi_cs']) AND isset($_POST['armes']))
{
    $pseudo = ($_POST['pseudo']);
	$prenom = ($_POST['prenom']);
    $age = ($_POST['age']);
	$ville = ($_POST['ville']);
	$pays = ($_POST['pays']);
	$msn = ($_POST['msn']);
	$processeur = ($_POST['processeur']);
	$memoire = ($_POST['memoire']);
	$cm = ($_POST['cm']);
	$cg = ($_POST['cg']);
	$resolution_win = ($_POST['resolution_win']);
	$son = ($_POST['son']);
	$souris = ($_POST['souris']);
	$clavier = ($_POST['clavier']);
	$connexion = ($_POST['connexion']);
	$sensi_win = ($_POST['sensi_win']);
	$resolution_cs = ($_POST['resolution_cs']);
	$sensi_cs = ($_POST['sensi_cs']);
	$armes = ($_POST['armes']);
	
    // On vérifie si c'est une modification de membre ou pas
    if ($_POST['id_membres'] == 0)
    {
        // Ce n'est pas une modification, on crée une nouvelle entrée dans la table
        mysql_query("INSERT INTO team VALUES('', '" . $pseudo . "', '" . $prenom . "', '" . $age . "', '" . $ville . "', '" . $pays . "', '" . $msn . "', '" . $processeur . "', '" . $memoire . "', '" . $cm . "', '" . $cg . "', '" . $resolution_win . "', '" . $son . "', '" . $souris . "', '" . $clavier . "', '" . $connexion . "', '" . $sensi_win . "', '" . $resolution_cs . "', '" . $sensi_cs . "', '" . $armes . "')") or die (mysql_error());
    }
    else
    {
        // C'est une modification, on met juste à jour 
        mysql_query("UPDATE team SET pseudo='" . $pseudo . "', prenom='" . $prenom . "', age='" . $age . "', ville='" . $ville . "', pays='" . $pays . "', msn='" . $msn . "', processeur='" . $processeur . "', memoire='" . $memoire . "', cm='" . $cm . "', cg='" . $cg . "', resolution_win='" . $resolution_win . "', son='" . $son . "', souris='" . $souris . "', clavier='" . $clavier . "', connexion='" . $connexion . "', sensi_win='" . $sensi_win . "', resolution_cs='" . $resolution_cs . "', sensi_cs='" . $sensi_cs . "', armes='" . $armes . "' WHERE id=" . $_POST['id_membres']) or die (mysql_error());
    }
}


//--------------------------------------------------------
// Vérification 2 : est-ce qu'on veut supprimer un membre ?
//--------------------------------------------------------

if (isset($_GET['supprimer_membres'])) // Si on demande de supprimer un membre
{
    // Alors on supprime le membre correspondant
    mysql_query('DELETE FROM team WHERE id=' . $_GET['supprimer_membres']);
}
?>

<table>
<tr>
<th>Modifier</th>
<th>Supprimer</th>
<th>Pseudo</th>
</tr>

<?
$retour = mysql_query('SELECT * FROM team ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les membres
{
?>

<tr>
<td><? echo '<a href="adminkrypton.php?page=ajout_membres&modifier_membres=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><? echo '<a href="adminkrypton.php?page=listings_membres_team&supprimer_membres=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><? echo stripslashes($donnees['pseudo']); ?></td>
</tr>

<?
} // Fin de la boucle qui liste les membres
?>
</table>
Voici ajout_membres.php :
<? include 'secure.php'; ?>
<a href="adminkrypton.php?page=listings_membres_team">Retour à la liste des membres</a>
<?
mysql_connect("localhost", "root", "") or die (mysql_error());
mysql_select_db("host");

if (isset($_GET['modifier_membres'])) // Si on demande de modifier un membre
{
    // On récupère les infos
    $retour = mysql_query('SELECT * FROM team WHERE id=' . $_GET['modifier_membres']) or die (mysql_error());
    $infos = mysql_fetch_array($retour) or die (mysql_error());
    
    // On place tous dans des variables simples
    $pseudo = $infos['pseudo'];
	$prenom = $infos['prenom'];
	$age = $infos['age'];
	$ville = $infos['ville'];
	$pays = $infos['pays'];
	$msn = $infos['msn'];
	$processeur = $infos['processeur'];
	$memoire = $infos['memoire'];
	$cm = $infos['cm'];
	$cg = $infos['cg'];
	$resolution_win = $infos['resolution_win'];
	$son = $infos['son'];
	$souris = $infos['souris'];
	$clavier = $infos['clavier'];
	$connexion = $infos['connexion'];
	$sensi_win = $infos['sensi_win'];
	$resolution_cs = $infos['resolution_cs'];
	$sensi_cs = $infos['sensi_cs'];
	$armes = $infos['armes'];
    $id_membres = $infos['id']; // Cette variable va servir pour se souvenir que c'est une modification
}
else // C'est qu'on ajoute un membre
{
    // Les variables sont vides, puisque c'est un nouveau membres
    $pseudo = '';
	$prenom = '';
	$age = '';
	$ville = '';
	$pays = '';
	$msn = '';
	$processeur = '';
	$memoire = '';
	$cm = '';
	$cg = '';
	$resolution_win = '';
	$son = '';
	$souris = '';
	$clavier = '';
	$connexion = '';
	$sensi_win = '';
	$resolution_cs = '';
	$sensi_cs = '';
	$armes = '';
	$id_membres = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification
}
?>

<form action="adminkrypton.php?page=listings_membres_team" method="post">
<p>Pseudo : <input type="text" size="30" name="pseudo" value="<? echo $pseudo; ?>" /></p>
<p>Prénom : <input type="text" size="30" name="titre" value="<? echo $prenom; ?>" /></p>
<p>Age : <input type="text" size="30" name="titre" value="<? echo $age; ?>" /></p>
<p>Ville : <input type="text" size="30" name="titre" value="<? echo $ville; ?>" /></p>
<p>Pays : <input type="text" size="30" name="titre" value="<? echo $pays; ?>" /></p>
<p>MSN : <input type="text" size="30" name="titre" value="<? echo $msn; ?>" /></p>
<p>Processeur : <input type="text" size="30" name="titre" value="<? echo $processeur; ?>" /></p>
<p>Mémoire : <input type="text" size="30" name="titre" value="<? echo $memoire; ?>" /></p>
<p>Carte mère : <input type="text" size="30" name="titre" value="<? echo $cm; ?>" /></p>
<p>Carte graphique : <input type="text" size="30" name="titre" value="<? echo $cg; ?>" /></p>
<p>Resolution Windows : <input type="text" size="30" name="titre" value="<? echo $resolution_win; ?>" /></p>
<p>Carte son : <input type="text" size="30" name="titre" value="<? echo $son; ?>" /></p>
<p>Souris : <input type="text" size="30" name="titre" value="<? echo $souris; ?>" /></p>
<p>Clavier : <input type="text" size="30" name="titre" value="<? echo $clavier; ?>" /></p>
<p>Connexion : <input type="text" size="30" name="titre" value="<? echo $connexion; ?>" /></p>
<p>Sensibilité Windows : <input type="text" size="30" name="titre" value="<? echo $sensi_win; ?>" /></p>
<p>Resolution Cs : <input type="text" size="30" name="titre" value="<? echo $resolution_cs; ?>" /></p>
<p>Sensibilité Cs : <input type="text" size="30" name="titre" value="<? echo $sensi_cs; ?>" /></p>
<p>Armes : <input type="text" size="30" name="titre" value="<? echo $armes; ?>" /></p>
    <input type="hidden" name="id_membres" value="<? echo $id_membres; ?>" />
    <input type="submit" value="Envoyer" />
</form>
Lorsque je modifie ou ajout un membre aucune erreur SQL se produit malgrès les mysql_error() donc ca ne vient pas de la je pense. Je ne trouve pas du tout mon erreur. Pourriez-vous de nouveau m'aider? Merci