8791 sujets

Développement web côté serveur, CMS

Bonjour,
Je voudrais créer un espace membres en PHP sur mon site web, et j'ai donc commencé le script. J'ai créé mes pages d'inscription et mes pages d'identification.
Pour enregistrer les cookies contenant les infos des membres, j'ai créé un lien d'activation sur ma page login.php qui contient l'id du membre qui s'est identifié. Ma page index.php récupère cet id et selectionne les infos qui y sont associées dans la base de données. Une fois ces données séléctionnées, je les mets en session et je place les variables dans des cookies.
Seulement, mes cookies ne fonctionnent pas. Voilà le code entier de la page index.php (avant le code HTML) :

<?php
if(isset($id_membre))
{
$base_de_donnee = mysql_connect('mysql5-2', 'metroidmSQL', 'mot_de_passe')  or die('Erreur de connexion '.mysql_error());
mysql_select_db('metroidmSQL',$base_de_donnee)  or die('Erreur de selection '.mysql_error());

$sql = "SELECT id, login, mot_de_passe, email, url_site, code_ami_mph FROM membres WHERE id = '".$id_membre."'";
$req = mysql_query($sql) or die('Erreur SQL : '.$sql);

$data = mysql_fetch_assoc($req);

session_start();

$_SESSION['id_membre'] = $data['id'];
$_SESSION['login'] = $data['login'];
$_SESSION['mot_de_passe'] = $data['mot_de_passe'];
$_SESSION['email'] = $data['email'];
$_SESSION['url_site'] = $data['url_site'];
$_SESSION['code_ami_mph'] = $data['code_ami_mph'];

$timestamp = time() + 365*24*3600;
setcookie('metroidmaster_id', $_SESSION['id_membre'], $timestamp);
setcookie('metroidmaster_login', $_SESSION['login'], $timestamp);
setcookie('metroidmaster_mot_de_passe', $_SESSION['mot_de_passe'], $timestamp);
setcookie('metroidmaster_email', $_SESSION['email'], $timestamp);
setcookie('metroidmaster_url_site', $_SESSION['url_site'], $timestamp);
setcookie('metroidmaster_code_ami_mph', $_SESSION['code_ami_mph'], $timestamp);
}
?>


En espérant avoir été clair, je vous remercie d'avance pour vos réponses !

MetroidMaster
Salut Smiley cligne ,

je ne vois pas de problème avec l'écriture des cookies mais j'ai un petit doute sur la récupération de ta variable $id_membre Smiley rolleyes

Donc j'aurais remplacé :
if(isset($id_membre))
{
par
if(isset($_POST['id_membre']))
{
$id_membre = $_POST['id_membre'];
ou par
if(isset($_GET['id_membre']))
{
$id_membre = $_GET['id_membre'];
en fonction de la méthode d'appel de ta page.

A+ Smiley smile
Salut !
Ma variable est contenue dans l'url, je vais essayer comme ça, mais je ne pense pas que le problème vienne de là, puisque dans ma page index.php, j'utilise des codes du type :
if($section= 'jeux' && $page == 'metroid')
{
include('metroid.php')
}

Les variables $section et $page sont contenues dans l'url et y'a pas de problèmes de ce côté...
Bon, j'essaie quand même et j'édite le message.

Edit : En fait, je viens de remarquer que j'avais tout simplement écrit $_COOKIE['login'] au lieu de $_COOKIE['metroidmaster_login'].... Désolé d'avoir créé un topic pour rien alors Smiley confus

Par contre, j'aimerais profiter de ce topic pour poser une autre question.. Lorsqu'un membre est connecté, j'aimerais afficher dans mes menus la page online.php, alors que si le membre est déconnecté (ou alors que la personne est un visiteur), je voudrais afficher la page login.html.

Pour ça, j'ai écrit ce code :
<?php
if($_POST['login'] == $_COOKIE['metroidmaster_login'] && $_POST['mot_de_passe'] == $_COOKIE['mot_de_passe'])
{
include('http://www.metroidmaster.com/membres/online.php');
}
else
{
include('http://www.metroidmaster.com/membres/login.htm');
}
?>


Ca ne fonctionne pas, et j'ai pas trop d'idées pour le faire fonctionner. Quelqu'un aurait-t-il une idée ?
Modifié par MetroidMaster (01 Jul 2007 - 17:36)
Ben ça devrait fonctionner si tu ne fais pas ce test juste après avoir créé les cookies car il ne seront effectifs qu'après un rechargement de la page.


*Edit:le plus simple étant en général de faire un echo de tes variables pour vérifier leur valeur Smiley cligne
Modifié par Heyoan (01 Jul 2007 - 17:50)
Beh non, justement, le problème c'est que ça n'affiche pas la page online.php seulement chez moi... Je me suis loggé, j'ai rechargé la page et la page online.php s'est correctement affichée à la place du formulaire d'identification. J'ai demandé à quelqu'un d'aller voir la page et chez lui aussi la page online.php est affichée (alors qu'il n'est pas inscrit, j'ai vérifié dans la base de données, je suis le seul inscrit).
Donc, soit les cookies contenant mes infos sont enregistrées sur le pc de tous les visiteurs (et dans ce cas c'est assez gênant), soit c'est ce script qui est mauvais...

Edit : Je sais bien, mais quand j'avais fait ça avant de poser la question, le contenu du cookie est apparu et a disparu après rechargement de la page, il n'apparaissait plus après. Cette fois, j'ai fait un echo de chaque cookie et tout a fonctionné, je sais pas d'où ça venait...

Edit 2 : J'ai demandé à quelqu'un d'aller voir une page où j'ai fait un echo de $_COOKIE['metroidmaster_login'] (ce qui, chez moi, affiche mon login). Chez lui ça n'affiche rien, donc je suis rassuré, les cookies ne sont enregistrés que sur mon ordinateur. Le problème ne peut venir que du script.
Modifié par MetroidMaster (01 Jul 2007 - 18:05)
D'après ce que tu me dis, je pense que le problème principal vient de ce que tu ne testes pas l'existence de tes variables avant de t'en servir Smiley langue . Comme ton register_global est à 'on' (cf. Google pour plus d'infos) php considère que toutes les variables existent et ils les initialise à blanc donc ton test :
if($_POST['login'] == $_COOKIE['metroidmaster_login'] && $_POST['mot_de_passe'] == $_COOKIE['mot_de_passe'])
devient
if('' == '' && '' == '')
et du coup la page online.php est included Smiley ohwell

Donc c'est une très bonne habitude de ne pas utiliser les variables sans préciser d'où elles viennent ($_GET, $_POST, $_COOKIE, ...) et de tester leur existence avec if (isset($_POST['variable'])...

Ton test deviendrait :
if(isset($_POST['login']) && isset ($_COOKIE['metroidmaster_login']) && $_POST['login'] == $_COOKIE['metroidmaster_login'] && $_POST['mot_de_passe'] == $_COOKIE['mot_de_passe']) 


Et en passant un cookie ne peut être que lié à un navigateur Smiley cligne

A+
D'après ce que tu me dis, je déduis que le problème vient surtout du fait que je n'ai pas utilisé de register_globals() Smiley rolleyes
Je pense qu'il faut que je me reporte à la doc PHP, je ne sais même pas à quoi ça sert...
Je te remercie pour tes explications, j'ai comme l'impression que ce register_globals() va résoudre mon problème...

A + !
Ben pas vraiment parce que c'est dans le php.ini et qu'à priori c'est ton hébergeur qui décide (même s'il exite des solutions pour le simuler). Un bon compromis est de le modifier sur ton poste (le php.ini de EasyPHP ou de Wamp) et de coder de façon à ce que ça fonctionne chez toi Smiley langue
Ah, mais je n'utilise ni EasyPHP, ni Wamp, ni quoi que ce soit... Je fais mes tests directement dans un dossier "Test" de mon serveur ^^.
Enfin, si ça sert à rien, autant que je trouve une autre solution...
Modifié par MetroidMaster (01 Jul 2007 - 18:44)
Ben je pense que ça pourrait t'aider d'installer EasyPHP ou Wamp (à comprendre comment ça marche et plus tard à pouvoir faire des tests avant de mettre en ligne) et pour ce qui est de trouver une autre solution, c'est 4 posts plus haut. Smiley ravi
Ah oui, exact, comme je pensais que mon problème venait de register_globals(), j'ai pas essayé de comprendre la suite. J'ai bien compris ton code, on affiche la page que si la variable existe, et qu'elle est égale à la valeur du cookie. Je te remercie, ça devrait fonctionner, maintenant !

Edit : Ca ne fonctionne toujours pas, mais cette fois, ça s'affiche même pas chez moi Smiley fache Enfin, ça s'affiche seullement lorsque je suis sur la page login.php, ça m'avance pas trop...
Bon, je vais pas t'embêter plus longtemps, je vais chercher seul et je posterais la solution au problème.
Merci encore !

Salut !
Modifié par MetroidMaster (01 Jul 2007 - 19:07)