JeuWeb - Crée ton jeu par navigateur
Inscription => ecriture dans table - 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 : Inscription => ecriture dans table (/showthread.php?tid=429)



Inscription => ecriture dans table - Archange - 12-11-2006

CC, donc voila je rencontre a petit probleme sur lequel sa fait 1/4 d'heure je planche je m'explique, j'ai crée deux table une membres et une autre ressources,

Table membres
Code :
id       
     pseudo      
     mot_passe      
     confirmation      
     confirmation_code
     email      
     cash  
     point      
     timestamp

Table ressources
Code :
id
metal
timestamp
joueur

Je souhaiterais qu'a linscription, les entrées de la table ressources soit crée en concordance avec celle de la table membres cad id = id, pseudo = joueur et pr le reste une valeur defini dans un fichier de config ( bref donc la table membres se crée tres bien mais pas la table ressources je vous mais mon code pr que vous voyez de vous meme

Code PHP :
<?php
//Identifiants de connexion à la base de données.
require("config.inc.php");

//Connexion à la base de données.
mysql_connect($host,$username,$password);
mysql_select_db($bdd_name);

//On vérifie que la variable $_POST['inscription'] existe
if (isset($_POST['inscription']))
{
//Si les variables contenant le pseudo, le mot de passe et l'email existent et contiennent quelque chose.
if (isset($_POST['pseudo'], $_POST['mot_passe'], $_POST['email']) && !empty($_POST['pseudo']) && !empty($_POST['mot_passe']) && !empty($_POST['email']))
{
//Si le pseudo est supérieur à 3 caractères et inférieur à 35 caractères.
if (strlen(trim($_POST['pseudo'])) > 3 && strlen(trim($_POST['pseudo'])) < 35)
{
//Si le mot de passe est supérieur à 4 caractères.
if (strlen(trim($_POST['mot_passe'])) > 4)
{
//Mesure de sécurité.
$pseudo = htmlspecialchars($_POST['pseudo']);
$mot_passe = htmlspecialchars($_POST['mot_passe']);
$email = htmlspecialchars($_POST['email']);

//On vérifie que le pseudo n'existe pas.
$sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM membres WHERE pseudo='".$pseudo."'");
if (
mysql_result($sql, 0, 'nb_pseudo') == 0)
{
//Hashage du mot de passe avec md5().
$mot_passe = md5($mot_passe);

//Génération du code de confirmation.
$lettres_chiffres = 'abcdefghijklmnopqrstuvwxyz0123456789';
$lettres_chiffres_melanges = str_shuffle($lettres_chiffres);
$code_confirmation = substr($lettres_chiffres_melanges, 1, 10);

//Envoi du mail de confirmation.
$message = '
Bonjour '
.$pseudo.'<br />
Vous venez de vous inscrire sur "nom_du_site" et pour valider votre inscription, vous devez cliquer sur le lien suivant : <a href="http://s.free.fr/confirmation.php?code='
.$code_confirmation.'&amp;pseudo='.$pseudo.'">http://s.free.fr/confirmation.php?code='.$code_confirmation.'&amp;pseudo='.$pseudo.'</a>
'
;



//Si le mail a été envoyé on peut enregistrer le membre
if (mail($email, 'Confirmation de l\'inscription sur [Nom_du_site]', $message))
{
//On éxécute la requête qui enregistre un nouveau membre.

mysql_query("INSERT INTO membres (pseudo, mot_passe, confirmation, confirmation_code, email, cash, point, timestamp) VALUES ('".$pseudo."', '".$mot_passe."', '0', '".$code_confirmation."', '".$email."', '". $cash ."', '". $point ."', '". $timestamp ."')");
$pseudo == $joueur;

mysql_query("INSERT INTO ressources (metal, timestamp, joueur,) VALUES ('".$metal."', '".$timestamp.", '".$joueur.")");

echo
'Message : votre compte a bien été créé ! Un e-mail vient de vous être envoyé contenant un lien de confirmation de votre inscription.';
}
else
{
echo
'Erreur : echec lors de l\'envoi du mail ! veuillez vous ré-inscrire';
}
}
else
echo
'Erreur : le pseudo existe déjà !';
}
else
echo
'Erreur : le mot de passe est trop court !';
}
else
echo
'Erreur : le pseudo est soit trop court, soit trop long !';
}
else
echo
'Erreur : vous avez oublié d\'entrer votre pseudo ou votre mot de passe ou votre adresse email !';
}

//Déconnection de la base de données.
mysql_close();
?>

c'est cette partie du code qui ne veu pas fonctionner

Code PHP :
<?php 
//On éxécute la requête qui enregistre un nouveau membre.

mysql_query("INSERT INTO membres (pseudo, mot_passe, confirmation, confirmation_code, email, cash, point, timestamp) VALUES ('".$pseudo."', '".$mot_passe."', '0', '".$code_confirmation."', '".$email."', '". $cash ."', '". $point ."', '". $timestamp ."')");
$pseudo == $joueur;

mysql_query("INSERT INTO ressources (metal, timestamp, joueur,) VALUES ('".$metal."', '".$timestamp.", '".$joueur.")");

donc j'espere trouver de l'aide aupres de vous

Merci


RE: Inscription => ecriture dans table - Helifyl - 12-11-2006

Moi aussi je galère avec ma BDD en ce moment. Mais bon déjà je peux te dire que ta structure n'est pas bonne: tu ne peux pas faire concorder ton id de ta table membres et ton id de la table ressources, ce sont deux identifiants indépendants.

Ce que tu peux faire par contre c'est joueur (table ressources) = id_joueur (table membres) pour établir un lien. Ensuite pour ton code je ne comprends pas trop ta requête, essaies:

Code :
mysql_query('INSERT INTO ressources VALUES (""," '.$metal.' ", " '.$timestamp.' ", " '.$id_joueur.' ")');

Le "" est pour l'id_ressources, que tu auras fixé en auto_increment et clé primaire. Le problème est que tu dois faire un accès à la table membres pour sortir id_joueur avant de l'insérer dans ressources.

Pense à lire le tuto de gtsoul: http://www.jeuweb.org/board/showthread.php?tid=559


RE: Inscription => ecriture dans table - Archange - 12-11-2006

Donc voila j'ai fais les seconde modif que tu as dit sa me donne sa

Code PHP :
<?php 
mysql_query
("INSERT INTO membres VALUES ("",'".$pseudo."', '".$mot_passe."', '0', '".$code_confirmation."', '".$email."', '". $cash ."', '". $point ."', '". $timestamp ."')");

mysql_query('INSERT INTO ressources VALUES (""," '.$metal.' ", " '.$timestamp.' ", " '.$id_joueur.' ")');

Et donc pr
Citation :joueur (table ressources) = id_joueur (table membres) pour établir un lien
tu veu dire que je doi faire apres mon premier insert_into
Code PHP :
<?php 
$user
= mysql_query("SELECT * FROM membres ");
while (
$donnees = mysql_fetch_array($user) )
{
$pseudo = $donnees['pseudo];
Et apres le second
Code PHP :
<?php 
$user_2
= mysql_query("SELECT * FROM ressources ");
while (
$donnees = mysql_fetch_array($user_2) )
{
$joueur = $donnees['joueur];
et enfin lié
Code PHP :
<?php 
$joueur
== $pseudo
comme ceci ?


RE: Inscription => ecriture dans table - Helifyl - 12-11-2006

Fais attention avec les " et les ', ta première ligne devra être:
Code PHP :
<?php 
mysql_query
("INSERT INTO membres VALUES ('','".$pseudo."', '".$mot_passe."', '0', '".$code_confirmation."', '".$email."', '".$cash."', '". $point ."', '".$timestamp."')");

ou
Code PHP :
<?php 
mysql_query
('INSERT INTO membres VALUES ("","'.$pseudo.'", "'.$mot_passe.'", "0", "'.$code_confirmation.'", "'.$email.'", "'.$cash.'", "'.$point.'", "'.$timestamp.'")');
suivant que tu utilises ' ou ".


Pour le lien entre les deux en fait tu enregistres en premier ton joueur dans la table membres puis tu récupères l'id que lui a attribué l'auto_increment comme ceci:

Code PHP :
<?php 
$user
= mysql_query('SELECT * FROM membres WHERE pseudo="'.$pseudo.'" ');
while (
$donnees = mysql_fetch_array($user) )
{
$id_joueur=$donnees['id'];
}

Et ensuite tu fais ton insertion dans la table ressources, en connaissant cette fois la valeur de id_joueur.

Code PHP :
<?php 
mysql_query
('INSERT INTO ressources VALUES ("","'.$metal.'", "'.$timestamp.'", "'.$id_joueur.'")');

Comme ça tu pourras retrouver le joueur dans la table membres à partir de la valeur de l'attribut id_joueur de ta table ressources, ce qui est ce que tu voulais au départ si j'ai bien tout compris.


RE: Inscription => ecriture dans table - Archange - 12-11-2006

Je vais testé tout a l'heure, mais je pense que c'est sa, et pour les ' et " en relisant mes lignes j'avai remarqué mais je savais pas trop quoi mettre ^^

Merci en tous cas


RE: Inscription => ecriture dans table - Helifyl - 12-11-2006

Y a pas de quoi ^^

Par contre si je peux te donner un conseil c'est de bien créer ta BDD dès le départ. Moi quand j'ai commencé j'ai créé les tables au fur et à mesure que j'en avais besoin et c'est pas bon du tout (vraiment pas même)....

Bon courage pour la suite !


RE: Inscription => ecriture dans table - Archange - 12-11-2006

dacord merci du conseil, bon courage a toi aussi