Pb de conception

Résolu
Utilisateur anonyme - 2 juin 2006 à 10:33
 Utilisateur anonyme - 3 juin 2006 à 12:10
Bonjour à tous, alors voila, je vous explique avant de vous balancer tout le code :p
J'ai un code mini-chat, et un code page protegé par mot de passe, j'ai fais un mix des 2 bien sur!
Donc dans le code du motdepasse, IF mot de passe = "" et la j'ai copier TOUT le code du mini-chat, ELSE, retaper le mot de passe,
Je rentre la pass tout va bien je rentre dans partie du code mini-chat, mais lorsque je rentre le pseudo et un message, je clique sur envoyer, ben la bimbamboum, je suis de retour sur la page du mot de passe (enfin je suis sortie du code mini-chat quoi),
Je ne comprend pas pourquoi (parceque si on prend QUE le code du chat seul, il va se repeter comme un grand, donc on pourra chatter, mais des que je l'insere,il ne se repete plus,sniif)

voilou vous pouver faire un copier/coller si vous voulez

<?php
// J'ai choisi le mot de passe "kangourou"


if (isset($_POST['mot_de_passe'])) // Si la variable existe
{
    // On se crée une variable $mot_de_passe avec le mot de passe entré
    $mot_de_passe = $_POST['mot_de_passe'];
}
else // La variable n'existe pas encore
{
    $mot_de_passe = ""; // On crée une variable $mot_de_passe vide
}




if ($mot_de_passe == "kangourou") // Si le mot de passe est bon
{
// On affiche la page cachée.
?>


   


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>Mini-chat</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <style type="text/css">
    form
    {
    text-align:center;
    }
    </style>
   


 


 
 
 
<?php
if (isset($_POST['pseudo']) AND isset($_POST['message'])) // Si les variables existent
{
    if ($_POST['pseudo'] != NULL AND $_POST['message'] != NULL) // Si on a quelque chose à enregistrer
    {
        // D'abord, on se connecte à MySQL
        mysql_connect("localhost", "root", "");
        mysql_select_db("minichat");


        // On utilise la fonction PHP htmlentities pour éviter d'enregistrer du code HTML dans la table
        $message = htmlentities ($_POST['message']);
        $pseudo = htmlentities ($_POST['pseudo']);
  $heure = date('H:i:s');


        // Ensuite on enregistre le message
        mysql_query("INSERT INTO msnix VALUES('', '$pseudo', '$message', '$heure')");


        // On se déconnecte de MySQL
        mysql_close();
    }



// Que l'on ait enregistré des données ou pas...
// On affiche le formulaire puis les 20 derniers messages


// Tout d'abord le formulaire :
?>


 


<form action="pass.php" method="post">



Pseudo :

Message : 




</form>




<?php
mysql_connect("localhost", "root", ""); //connection à la base
mysql_select_db("minichat"); //selection base
$retour = mysql_query("SELECT count( * )  as nbmess FROM msnix") or die (mysql_error()); //compte le nombre de message dans le chat dans la table msnix
$donnees = mysql_fetch_array($retour);


if ($donnees['nbmess'] > 19) //s'il y a plus de 19 messages, la base se vide
{
mysql_query("DELETE FROM msnix");
echo "base vidé";
}
?>


<?php


// Maintenant on doit récupérer les 20 dernières entrées de la table
// On se connecte d'abord à MySQL :
mysql_connect("localhost", "root", "");
mysql_select_db("minichat");


// On utilise la requête suivante pour récupérer les 20 derniers messages :
$reponse = mysql_query("SELECT * FROM msnix ORDER BY ID DESC LIMIT 0,20");


// On se déconnecte de MySQL
mysql_close();


// Puis on fait une boucle pour afficher tous les résultats :
while ($donnees = mysql_fetch_array($reponse) )
{
?>


(<?php echo $donnees['heure'];?>) <?php echo $donnees['pseudo']; ?> : <?php echo $donnees['message']; ?>


 


<?php
}
// Fin de la boucle, le script est terminé !
?>


   
</html>


<?php
}


 


else // le mot de passe n'est pas bon
{
// On affiche la zone de texte pour rentrer le mot de passe.
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns ="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>Page protégée par mot de passe</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
   
Veuillez entrer le mot de passe pour accèder :

<form action="pass.php" method="post">



</form>
Cette page est réservée au IG. Si vous n'en faites pas parti, inutile d'insister vous ne trouverez jamais le mot de passe ! ;-)

   
</html>


<?php


} // Fin du else


// Fin du code
?>

20 réponses

cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006
2 juin 2006 à 10:42
Salut,
Si j'ai tout suivi quand tu envoi ton message pour ton chat et bien tu revien sur la mêm page mais sans passer de variable $_POST['mot_de_passe'] du coup ta variable $mot_de_passe prend une chaîne vide et du coup ton test
"if ($mot_de_passe == "kangourou") " foire donc le mot de passe est pas bon et du coup tu demande le saisir
3
cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006
2 juin 2006 à 11:15
Ouaip ou si tu veu pas t'enbêter avec les sessions tu peut changer ce if:
"if ($mot_de_passe == "kangourou")"
en
"if (isset($_POST['pseudo']) || $mot_de_passe == "kangourou")"

Si tu reçoit $_POST['pseudo'] sur ta page ca veut dire que t'a déjà vérifié le mot de passe du gars donc plus besoin de la faire. Bon coté sécurité c'est pas à toutes épreuve mais comme c'est des variables post c'est deja pas mal
3
pastis51forever Messages postés 172 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 8 septembre 2006 1
2 juin 2006 à 10:43
Bonjour!
Une fois que le mot de passe est rentré une fois, mets un champs
dans ton formulaire, sinon, la variable $mot_de_passe" ne sera pas enregistrée quand tu enverras ton formulaire avec le pseudo et le texte.

Brice
0
Utilisateur anonyme
2 juin 2006 à 10:45
ha oui c'est pas bete de retenir la valeur de motdepasse, merci les gars
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
2 juin 2006 à 10:56
mierda, marche pas, je suis un gros débutant, je ne sais ou rentrer ton input ... ?
0
pastis51forever Messages postés 172 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 8 septembre 2006 1
2 juin 2006 à 11:07
C'est une solution, mais dis toi bien que le mot de passe est renvoyé a chaque fois, et surtout que du coup il apparait en clair dans le code source de la page...
(j'avais pas beaucoup réfléchi...)
Tu devrais peut-etre mieux prendre une variable de session determinant si l'utilisateur s'est loggé ou pas:

<?php
session_start();//Pour demarrer la session. Il faut placer ca au tout début de ta page
?>
--------------------
...
--------------------
<?php
//On rajoute une condition permettant l'affichage et l'envoi
if (($mot_de_passe "kangourou") OR (isset($_SESSION['connection']) AND $_SESSION['connection']) 'oui')) // Si le mot de passe est bon ou si la variable de session 'connection' est bien à 'oui'
{
// On met à 'oui' la variable de session
$_SESSION['connection']='oui';
?>

Si tu veux en savoir plus, recherche "session" sur ce site

Brice
0
pastis51forever Messages postés 172 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 8 septembre 2006 1
2 juin 2006 à 11:11
Pour la premiere solution (la moins sûre), il faut faire:
<form action="pass.php" method="post">
Pseudo :

Message :



</form>

Comme tu as pu le voir, y'a une erreur dans ma 2eme solution (pas testée, mal relue...):

if (($mot_de_passe "kangourou") OR (isset($_SESSION['connection']) AND $_SESSION['connection'] 'oui'))
Y'avait une parenthese de trop...
0
Utilisateur anonyme
2 juin 2006 à 11:21
PoFMaN ton 2eme if marche nickel, il est très bien pensé (de mon point de vue de débutant lol)
pastis51forever pour les sessions je vais essayer après ;)
0
Utilisateur anonyme
2 juin 2006 à 11:52
pour les sessions:
if (($mot_de_passe "kangourou") or ($_SESSION['pass'] "kangourou"))  // Si le mot de passe est bon ou si $_SESSION['pass'] = kangourou

{
$_SESSION['pass'] = $mot_de_passe; // $mot_de_passe = kangourou donc 'pass' prend "kangourou" et je rejoint ainsi mon IF ci dessus
// On affiche la page cachée.
?>

compris...

De la ca marche,enfin presque, j'arrive sur la page de chat, je lance une phrase ca marche,mais je lance une seocnde phrase,je reviens sur la page des mots de page, c'est bizarre que ca marche une fois et pas 2

Et en changeant:
$_SESSION['pass'] = $mot_de_passe    en     $_SESSION['pass'] = "kangourou"
ca marche !!!!!!! mais pourtant $mot_de_passe = "kangourou", c'est louche ???!!!  
0
Utilisateur anonyme
2 juin 2006 à 11:57
Je retire ma réponse, ca ne marche pas, j'ai redemarré le serveur et la base, ca bug a nouveau, il suffit que j'efface la base pour que ca plante lol
0
cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006
2 juin 2006 à 12:03
tu pourrai changer ton $_SESSION['pass'] par $_SESSION['estConnecte'] par exemple
après ton if deviendrai:

if (($mot_de_passe == "kangourou") || (isset($_SESSION['estConnecte']) && $_SESSION['estConnecte'])
{
if($mot_de_passe == "kangourou")
$_SESSION['estConnecte']=true;


Et puis quand tu déconnecte le gars tu met $_SESSION['estConnecte'] à false ou tu détruit la session
0
Utilisateur anonyme
2 juin 2006 à 12:06
<?php
session_start();//Pour demarrer la session
?>


 


<?php
// J'ai choisi le mot de passe "kangourou"


if (isset($_POST['mot_de_passe'])) // Si la variable existe
{
    // On se crée une variable $mot_de_passe avec le mot de passe entré
    $mot_de_passe = $_POST['mot_de_passe'];
}
else // La variable n'existe pas encore
{
    $mot_de_passe = ""; // On crée une variable $mot_de_passe vide
}



if (($mot_de_passe "kangourou") or ($_SESSION['pass'] "kangourou"))  // Si le mot de passe est bon
{
$_SESSION['pass'] = "kangourou";
// On affiche la page cachée.
?>

voilou, avec ca, malgrès qu'au 1er chargement de la page, il me marque, error (parceque sessio[pass] n'est pas defini), ca marche ! et après comme session[pass] existe il ne m'embete plus ^^

comment on deconnecte ? parceque je n'ai pas de bouton quitter,mais je pense qu'il y a moyen de faire, si le cas quitte la page alors session close ?
0
cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006
2 juin 2006 à 12:12
Ba pour ton erreur du premier chargement tu change
($_SESSION['pass'] == "kangourou")
en
(isset($_SESSION['pass']) && $_SESSION['pass'] == "kangourou")

Et pour deconncter tu peu faire un lien du style
[maPage?deco Se deconnecter]

Et en haut de maPage tu met un truc comme ça:
if(isset($_GET['deco']))
session_destroy(); // ca détruit la session et donc la variable $_SESSION['pass'] et donc ca passe plus dans ton if après
0
Utilisateur anonyme
2 juin 2006 à 12:25
Ouais merci j'essayerais plus tard ^^
Mais euh pour ton session_destroy(), c'est vrai que je l'avais oublier donc je ne fermé pas la session donc meme quend je quitter et que je revenais je n'avais plus a taper le pass
Mais sinon le top se serais de faire un bouton, si il clique dessus, il revient a la page du mot de passe, et la session se ferme egalement (mais bon la je suis en VB6 lol, pas en PHP faut pas rever), donc je ne pense pas qu'il y ait des boutons, n'existe-t-il pas  une solution quasi-identique ?
0
pastis51forever Messages postés 172 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 8 septembre 2006 1
2 juin 2006 à 17:46
Je pense que si tu mets un bouton du genre:
<form action="se_deconnecter.php">

</form>

Et que dans l'autre page (se_deconnecter.php) tu mets:
<?php
session_start()
session_detroy()
header("location: la_page_qui_contient_le_chat.php");
exit;
?>
ca devrait faire l'affaire...
sans vb...

Brice
0
pastis51forever Messages postés 172 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 8 septembre 2006 1
2 juin 2006 à 17:47
oups...
0
Utilisateur anonyme
2 juin 2006 à 18:21
Ouais merci, j'ai posté sur d'autre forum aussi, et en fait moi j'ai UNE page .php, je n'en veux pas d'autres (meme si c'est plus facile mais je veux pas), donc j'ai su que c'était impossible de fermer la session, de la facon: si l'utilisateur ferme la fenetre avec la croix:session_destroy()


Mais je ne peux pas c'est bete, de plus, le fait de faire une autre page pour destroy, c'est bien, mais le probleme, c'est que si le gars ne veux pas cliquer sur "terminer" et qu'il prefere quitter avec la croix, ben je l'ai dans le *** et sa session ne sera pas fermé.


On m'a dit aussi que les session se fermées toutes les 24h, donc a mon avis je penche pour une solution du type: si l'utilisateur a creer sa session depuis plus d'une heure,alors je change son mot de passe,ce qui fait qu'il devrai le retaper


(mais en ecrivant la derniere phrase: ne puis-je pas: si ca fait plus d'une heure alors session_destroy !!!! avec mySQL)
0
cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006
2 juin 2006 à 22:25
Avec un bouton ben dans le même principe (et avec juste ta page)
ton bouton tu le fait comme ca

et pis en haut de ta page tu met
if(isset($_GET['deco']))
  session_destroy();
0
cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006
2 juin 2006 à 22:42
Il me semble que la session est détruite quand on ferme le navigateur,
mais si tu veut être sur tu peut toujours utiliser l'evenement
javascript onUnload (
0
Utilisateur anonyme
3 juin 2006 à 12:10
ouep, je vais essayer tout ca, mais euh non les sessions ne sont pas detruite, j'ai fait le test, meme après avoir fermer le navigateur, je n'avais pas à retaper le mot de passe et j'arriver directement dans le chat, donc les sessions sont detruite automatiquement toutes les Xheures (24), si jamais tu ne les détruits pas toi meme bien sur (ce que je veux faire)


Merci
0
Rejoignez-nous