JeuWeb - Crée ton jeu par navigateur
Confirmation a propos de l'expiration des sessions + inscription/login en session[reg - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Confirmation a propos de l'expiration des sessions + inscription/login en session[reg (/showthread.php?tid=1592)

Pages : 1 2 3 4 5 6 7 8


RE: Questions de débutant - p6Kotic - 17-08-2007

Ben voila ce que je veux faire:
-Un systeme d'inscription et de login.Cela doit etre fait de maniere a ce que chaqe utilisateurs ait son compte a l'écran.
Pour cela,il y a un code dont la requete est assez longue...

Fomulaire d'insription:
Code :
<html>
<body background="fond.jpg" TEXT="#FFFFFF">
<form method="POST" action="traitement_formulaire_inscription.php">
<center>
<p>Votre pseudo.</p>
<input type="text" name="pseudo" size="20" value="pseudo" maxlength="35"><br>
<p>Mot de passe</p>
<input type="password" name="motdepasse" size="20" value="motdepasse" maxlength="70"><br>
<p>Votre adresse e-mail.</p>
<input type="text" name="email" size="20" value="email" maxlength="70"><br>
<input type="submit" value="Envoyer" name="envoyer">
</center>
</form>
</body>
</html>

Puis le fichier de traitement:

Code :
// Pour commencer on va récupérer l'adresse IP de l'utilisateur
    $ip=$_SERVER['REMOTE_ADDR'];
// On commence par récupérer les champs
if(isset($_POST['pseudo']))      $pseudo=$_POST['pseudo'];
else      $pseudo="";
if(isset($_POST['motdepasse']))      $motdepasse=$_POST['motdepasse'];
else      $motdepasse="";
if(isset($_POST['email']))      $email=$_POST['email'];
else      $email="";
// On vérifie si les champs sont vides
if(empty($pseudo) OR empty($motdepasse) OR empty($email))
    {
    echo 'Attention,tous les champs DOIVENT etre remplis!';
    }

// Aucun champ n'est vide, on peut enregistrer dans la table
else    
    {
       // connexion à la base
$db = mysql_connect('sql.redby.info', 'spacebattle0', '356574')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

    mysql_select_db('spacebattle0',$db)  or die('Erreur de selection '.mysql_error());
    
    // on écrit la requête sql
    $sql = "INSERT INTO game( pseudo,mot_de_passe, email, ip , planeteid,lvlacier,lvlcristaux,lvldeut,lvlqg,lvlrobots,lvlhangaracier,lvlhangarcristaux,lvlhangardeut,lvllabo,lvlquai,lvlbouclier,cle,clo,intercepteur,destroyer,croiseur,battlestation,cargole,cargo,recycleur,sonde,missile,photonle,photonlo,canonion,canonelectro,fusionneur,espionnage,arme,bouclier,blindage,comb,hyperspatiale,programmation,energie,photon,techion,fusion,graviton,resacier,rescristaux,resdeut,debriacier,debricristaux)  
                     VALUES('$pseudo','$motdepasse','$email','$ip','',      '1',       '1',      '1',   '1',   '0',       '1',             '1',              '1',        '1',   '0',     '0',     '0','0','0',             '0',     '0',       '0',      '0',    '0',    '0',    '0',   '0',    '0',     '0',     '0',         '0',       '0',      '0'    ,'0',   '0',     '0',   '0',      '0',          '0',       '0',   '0',    '0',    '0',  '0'     ,'5000',     '2500',  '0',      '0',       '0')";
    
    // on insère les informations du formulaire dans la table
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

    // on affiche le résultat pour le visiteur
    echo 'Vos informations ont été stockées dans la base de données,merci de votre enregistrement.';

    mysql_close();  // on ferme la connexion
    }
?>
En ce qui concerne les inscription,tout se passe bien.(aucun probleme,tout va pour le mieux,sauf si quelqu'un a un code qui permet de générer aléatoirement les coordonnées je suis preneur Big Grin )

Passons aux login:

Le fichier formulaire:

Code :
<html>
<head>
  <title>Connexion au site</title>
</head>
<body background="fond.jpg" BODY TEXT="white">
  <form method="post" action="veriflogin.php">
   <table border="0" width="400" align="center">
    <tr>
     <td width="200"><b>Vôtre login</b></td>
     <td width="200">
      <input type="text" name="login">
     </td>
    </tr>
    <tr>
     <td width="200"><b>Vôtre mot de passe<b></td>
     <td width="200">
      <input type="password" name="password">
     </td>
    </tr>
    <tr>
     <td colspan="2">
      <input type="submit" name="submit" value="login" href="gameindex.html">
     </td>
    </tr>
   </table>
  </form>
<p>Après vous etre logé ci dessus,vous pouvez acceder a votre compte en cliquant <A href=gameindex.html TARGET="_top">ICI</A>
</body>
</html>

Là tout va bien (sauf si un quelqconque code permet une redirection...)

Ensuite le fichier de traitement:

Code :
<?php

session_start();

$loginOK = false;  

if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) ) {

extract($_POST);  

$db = mysql_connect('sql.redby.info', 'spacebattle0', '356574')  or die('Erreur de connexion '.mysql_error());

mysql_select_db('spacebattle0',$db)  or die('Erreur de selection '.mysql_error());

$sql = "SELECT pseudo, mot_de_passe from game where pseudo = '".addslashes($login)."'";

$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);

if (mysql_num_rows($req) > 0) {

$data = mysql_fetch_assoc($req);

if ($password == $data['mot_de_passe']) {

$loginOK = true;
}
}
}
if ($loginOK) {
  $_SESSION['pseudo'] = $pseudo;
}
if ($loginOK) {
echo "Session créée";
}
else {
  echo 'Une erreur est survenue, veuillez réessayer !';
}
?>

La session se crée(en principe)

ensuite le fichier du jeu(page d'accueil,pas encore fini)

Code :
<?php
session_start();
?>

<HTML><body background="fond.jpg" BODY TEXT="white">
<center>

<?php
echo " Bonjour $_SESSION['pseudo']";
?>
<?php
$date = date("d-m-Y");
$heure = date("H:i");
Print(Date et heure du serveur: $date   $heure");
?>

</center>


</BODY></HTML>

C'est ici que j'ai un probleme:

Alors que $_SESSION['pseudo'] devrait donner le pseudo,rien ne s'affiche,enfin si:
Citation :Bonjour Nous sommes le 17-08-2007 et il est 06:31


Donc j'aimerais bien savoir comment ca se fait et comment remédier...
Merci d'avence


edit:niveau organisation j'ai jamais été top :/


RE: Questions de débutant - p6Kotic - 17-08-2007

je soupçonne la session de ne pas se creer ^o\

Et sinon il ya pas un autre moyen que sa pour garder un pseudo en mémoire ?

EDIT


Code :
<?php
// On appelle la session
session_start();
?>

<HTML><body background="fond.jpg" BODY TEXT="white">
<center>

<p>Bonjour <?php echo $_SESSION['pseudo']; ?></p>
<?php
$date = date("d-m-Y");
$heure = date("H:i");
Print("Nous sommes le $date et il est $heure");
?>



</center>
</BODY></HTML>

=> sa marche! :good::good::good:
au faite... c'est bizarre quand meme :/
La session elle doit etre obligatoirement toute sseule dans sa balise ??? :heuuu:


RE: Questions de débutant - Sephi-Chan - 17-08-2007

Non il n'y a pas d'autre moyen de conserver les variables d'une page à l'autre.

Code PHP :
<?php
$date
= date("d-m-Y");
$heure = date("H:i");
Print(
Date et heure du serveur: $date $heure");
?>
Ca m'étonnerai que ça envoie quelque chose d'autre qu'une parse error. Il manque un guillemet après le print(). D'ailleurs autant faire un echo par souci de cohérence. Tu as fais des echo dans tout le script et à la fin : "Tiens j'vais mettre un p'tit print() pour varier les plaisirs" ? Smile

Concernant ton script, il y a du bon, du moins bon.

Comme il y a du volume je vais me concentrer sur la fin (mais j'ai des tas de conseils à donner sur le début aussi.

Code PHP :
<?php 
if ($loginOK) {
$_SESSION['pseudo'] = $pseudo;
}
if (
$loginOK) {
echo
"Session créée";
}
else {
echo
'Une erreur est survenue, veuillez réessayer !';
}
Pourquoi faire 2 if qui testent la même chose ?
Code PHP :
<?php 
if ($loginOK) {
$_SESSION['pseudo'] = $pseudo;
if (
$_SESSION['pseudo']) { echo "La session a été créée"; }
else { exit(
"La session n'a pas été créée."); }
}
else { exit(
"Une erreur est survenue, veuillez réessayer !"); }
exit() (ou son alias die(), que je trouve plus esthétique :p) est très pratique, ça te permet d'éviter d'imbriquer les conditions.


RE: Questions de débutant - Sephi-Chan - 17-08-2007




RE: Questions de débutant - p6Kotic - 17-08-2007

Voui ça a l'air de marcher aussi (h)
Merci !
et sinon...
Possibilité de faire des requete sql avec la sessions? (je suppose que oui )
Ainsi que la convertir en "simple variable"?
=> <?php $_SESSION['pseudo'] = $pseudo ; ?>

?

Et aussi(escusez nmoi de vs emmerder avec ttes ces questions mais j'ai besoin de savoir ^^):
Est ce qu'il y a moyen que le fichier de traitement de formulaire de login donne directement sur la page gameindex.html?

Car actuellement c'est pas pratique DU TOUT
(il faut dabord se loger,puis revenir au formulaire de login,et cliquer sur un lien qui donne sur la page :/ ,de plus,un abruti peut acceder a cette page et faire des conneries enfin bref... )


RE: Questions de débutant - kunutheking - 17-08-2007

Citation :escusez nmoi de vs emmerder avec ttes ces questions mais j'ai besoin de savoir

Tu n'est pas obligé de demander à chaque fois, il y a certaines questions que tu peux résoudre en faisant des tests. Enfin c'est comme ça que je faisais au tout début.

Pour la 1ère question c'est plutôt comme ça qu'il faut faire :
Code PHP :
<?php 
$pseudo
= $_SESSION['pseudo'];



Je ne sais pas si j'ai compris ta 2eme question mais je crois que c'est ça :
Code :
<form method="post" action="gameindex.php">

</form>



RE: Questions de débutant - Sephi-Chan - 17-08-2007

Concernant ta deuxième question, je suppose que tu veux que le logg se fasse de manière transparente ?

C'est à dire que si la personne remplit le formulaire correctement, elle est redirigé sur la page d'accueil (ou une autre de ton choix), mais que si la connexion échoue, il soit redirigé vers le formulaire de connexion, avec en prime un petit message d'erreur lui signalant que ça a foiré. Le tout se faisant donc sans jamais afficher la page de traitement.

C'est bien ça ?


Sephi-Chan


RE: Questions de débutant - p6Kotic - 17-08-2007

Exactement =D

kunutheking a écrit :
Citation :escusez nmoi de vs emmerder avec ttes ces questions mais j'ai besoin de savoir

Tu n'est pas obligé de demander à chaque fois, il y a certaines questions que tu peux résoudre en faisant des tests. Enfin c'est comme ça que je faisais au tout début.

Pour la 1ère question c'est plutôt comme ça qu'il faut faire :
Code PHP :
<?php 
$pseudo
= $_SESSION['pseudo'];


ok merci je vais essayer EDIT: Oui sa marche merci bcp.Sa va me permettre d'avoir beaucoup plus facile dans mes pages Cool
Je ne sais pas si j'ai compris ta 2eme question mais je crois que c'est ça :
Code :
<form method="post" action="gameindex.php">

</form>
Sa par contre sa me parait douteux :/
Vu que le gars sera directement sur la pagee du jeu sans qu'il y ait de vérifications :nonon:
sauf si on met tout le code de vérification sur la page d'accueil du jeu,mais si unn gars revient sur la page d'accueil,il va recevoir un beau petit message d'eereur "Tous les champs DOIVENT etre remplis" :mauvais:



RE: Questions de débutant - Sephi-Chan - 17-08-2007

Alors voici la marche à suivre.

Dans ta page de traitement, il faudra ne mettre aucune sortie HTML, donc aucun echo, print et compagnie. Ce sera exclusivement du traitement.

En début de page (après le session_start()), tu crée 2 constantes, l'URL de redirection en cas de réussite, et l'URL de redirection... en cas d'echec. Par exemple :
Code PHP :
<?php 
define
('URL_SUCCES', 'http://www.monsite.net/accueil.php');
define('URL_ECHEC', 'http://www.monsite.net/connexion.php?erreur=1');

N'oublie pas de rajouter une variable à l'URL ?erreur=1, ça permettra d'afficher un message d'erreur sur la page de connexion si ça foire.

En fin de page, dans le if qui dit normalement que la session a été créer correctement, tu remplacera le echo par :
Code PHP :
<?php 
header
("Location: URL_SUCCES");
et à la place des messages d'erreur, tu mets :
Code PHP :
<?php 
header
("Location: URL_ECHEC");

Ensuite, sur ton formulaire de connexion, tu mets une condition qui vérifie s'il y a eu une erreur, ça évitera à l'utilisateur de croire qu'il se retrouve sur la même page alors qu'il a validé le formulaire :
Code PHP :
<?php 
if(isset($_GET['erreur'])) { echo '<p>Veuillez faire un nouvel essai.</p>'; }

Tu comprends le concept ? Si tu as un souci n'hésite pas à demander.


Sephi-Chan


RE: Questions de débutant - p6Kotic - 17-08-2007