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) )
{
?>
cs_PoFMaN
Messages postés58Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention21 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
cs_PoFMaN
Messages postés58Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention21 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
pastis51forever
Messages postés172Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention 8 septembre 20061 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.
pastis51forever
Messages postés172Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention 8 septembre 20061 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
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 ;)
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 ???!!!
<?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 ?
cs_PoFMaN
Messages postés58Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention21 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
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 ?
pastis51forever
Messages postés172Date d'inscriptiondimanche 29 juin 2003StatutMembreDernière intervention 8 septembre 20061 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...
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)
cs_PoFMaN
Messages postés58Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention21 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 (
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)