Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: leaweb le le 16-01-2011 a 09:38:51

Titre: creation table
Posté par: leaweb le le 16-01-2011 a 09:38:51

Bonjour,

Je suis en train de créer un site avec un espace membre.

J'ai un peu de mal à créer la sctucture de ma table :

Code:
CREATE TABLE membre (
id int(11) NOT NULL auto_increment,
nom` varchar(32) NOT NULL,
prenom` varchar(32) NOT NULL,
login text NOT NULL,
mail` varchar(32) NOT NULL,
pass_md5 text NOT NULL,
PRIMARY KEY (id)
derniere_visite` bigint(20) NOT NULL,


Alors, je ne sais pas :
confirmer mot de passe
La croix pour accepter les cgu
La question secrête et la réponse
anti spam 9+9, le resultat doit être 18

Merci d'avance pour vos conseils.
Lea

Titre: Re:creation table
Posté par: Krash le le 16-01-2011 a 11:18:34

Bonjour Lea,

Alors déjà, il ya aurait peut être quelques petites modifications à apporter à ta table.

Le champs email, mettre plus de 32 caractères. Déjà mon adresse n'est pas si longue que ça et fait déjà 23 caractères. Beaucoup de gens mettent prénom, nom @..., ca va vite.

Pour le champs pass_md5, ne pas le mettre en text mais varchar 32, vu que c'est un md5 et qu'un md5 fait 32 caractères.

login pareil, mieux vaut limiter le nombre de caractères. Après ça devient de moins en moins utile car maintenant la plupart des sites utilisent l'adresse mail comme login, c'est parfois mieux de garder cette norme pour ne pas dépayser l'internaute.

En ce qui concerne le "confirmation du mdp" pas besoin de l'enregistrer, il est là uniquement afin d'assurer à celui qui s'inscrit qu'il a bien tapé son mot de passe, ce sera juste une vérification en php et peut être javascript.

Idem pour la validation des CGU.

L'anti spam on s'en fiche.

La question secret, rajouter deux champs.
Un champs pour la question, le mieux serait un champs int, et mettre dans le value du select un numéro pour chaque question, de cette manière, l'entrée dans la base sera plus facile, et plus sécurisé en castant la variable avant enregistrement.
et pour la question, un varchar.

Pour le code postal, un varchar limité, avec une vérification php que ce sont bien des chiffres qui ont été entrés.

Pour la date de naissance, tu peux faire des selectbox à l'aide d'un boucle for par exemple pour pas te faire trop de boulot et automatiser l'ajout des prochaines années (2012, 2013 etc ou s'il y a une limite d'age).
L'enregistrement est ensuite simple, ce sera ici un champs date dans la base.

Voila si tu as d'autres questions, n'hésites pas.


Edit : dernière petite chose, en ce qui concerne l'anti spam. Je serais même pas étonné qu'un robot lise ton 9+9
Tu pourrais peut être écrire ça en toute lettre. Ou par exemple neuf additionné à neuf.
Simple suggestion. Après il existe de nombreux captcha à installer.

Titre: Re:creation table
Posté par: leaweb le le 16-01-2011 a 12:23:52

Merci beaucoup pour votre réponse rapide.
Je vais étudier tout ca et je reviendrai certainement vers vous.
Bonne après midi
Lea

Titre: Re:creation table
Posté par: leaweb le le 16-01-2011 a 14:29:54

Alors, j'y vais petit à petit :
J'ai fait :

Code:
nom varchar(40) Nonnul
prenom varchar(40) Nonnul
id int(11) Nonnul auto_increment
login text Non
pass_md5 text nonnul


après j'ai fait :

Code:
Nom :<input type="text" name="nom" size="25"value="<?php if (isset($_POST['nom'])) echo htmlentities(trim($_POST['nom'])); ?>">
Prénom :<input type="text" name="prenom" size="25"value="<?php if (isset($_POST['prenom'])) echo htmlentities(trim($_POST['prenom'])); ?>">

<b>Pseudo</b> :<input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>">

<b><br><br>

Mot de passe <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>">

Confirmer : <input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>">


et en haut de la page ::


Code:
<?php
// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
   // on teste l'existence de nos variables. On teste également si elles ne sont pas vides
   if ((isset($_POST['login']) && !empty($_POST['login']))&& (isset($_POST['nom']) && !empty($_POST['nom']))&& (isset($_POST['prenom']) && !empty($_POST['prenom'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) {
      // on teste les deux mots de passe
      if ($_POST['pass'] != $_POST['pass_confirm']) {
         $erreur = 'Les 2 mots de passe sont différents.';
      }
      else {
      $base = mysql_connect ('xxxxxxxxx', 'xxxxxxxx', 'xxxxxxxx');
         mysql_select_db ('xxxxxxxx', $base);

         // on recherche si ce login est déjà utilisé par un autre membre
         $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'"';
         $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
         $data = mysql_fetch_array($req);

         if ($data[0] == 0) {
            $sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'","'.mysql_escape_string($_POST['nom']).'","'.mysql_escape_string($_POST['prenom']).'", "'.mysql_escape_string(md5($_POST['pass'])).'")';
            mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

            session_start();
            $_SESSION['login'] = $_POST['login'];
            header('Location: membre.php');
            exit();
         }
         else {
            $erreur = 'Un membre possède déjà ce login.';
         }
      }
   }
   else {
      $erreur = 'Au moins un des champs est vide.';
   }
}
?>
Et ben le problème c'est qu'a chaque fois, j'ai le message :
Au moins un des champs est vide.

Y'a certainement une erreur !!!

Titre: Re:creation table
Posté par: Krash le le 16-01-2011 a 14:42:02

Aurais tu le lien vers cette page ?
As tu bien remplis tous les champs ?

Titre: Re:creation table
Posté par: leaweb le le 16-01-2011 a 14:52:37

http://www.toovosges.fr/essai/inscription.php
oui oui je rempli bien les 4 champs

Titre: Re:creation table
Posté par: Krash le le 16-01-2011 a 15:00:10

Ce qui est bizarre c'est que même avant de soumettre le formulaire il est affiché "Au moins un des champs est vide."
Alors qu'à ce moment là, $_POST['inscription'] n'existe pas.
Il doit y avoir un autre soucis dans ton code.

Titre: Re:creation table
Posté par: leaweb le le 16-01-2011 a 15:01:32

ok merci, je vais recommancer :(

Titre: Re:creation table
Posté par: leaweb le le 18-01-2011 a 21:48:53

Bonsoir,

J'ai fait un espace membre avec session mais cela marche pas :

J'ai fait :
formulaire inscription

Code:
<form action="verif.php" method="post">
<b>Pseudo</b> :<input type="text" name="login_user" maxlength="15"><b><br><br>
Mot de passe <font size="1.5">6 caractéres</font> : <input type="password" name="pass_user"maxlength="6">
<input type="submit" name="inscription" value="Inscription">


Fichier verif.php

Code:
<?php
/*
si les champs de login et de mot de passe ne sont pas vides
on insère l'utilisateur.
*/
if($_POST["login"] != "" && $_POST["mot_de_passe"] != "")
{
$login = $_POST["login"];
$pass = md5($_POST["mot_de_passe"]) ;

//connexion au serveur
$cnx = mysql_connect ('xxxxxx, 'xxxxxx', 'xxxxxxxx');
         mysql_select_db ('xxxxxxx', $base);


//création de la requête SQL
$sql = "INSERT INTO user (login_user, pass_user) VALUES ('".$login."', '".$pass."')"   ;
//exécution de la requête SQL
$requete = @mysql_query($sql, $cnx) or die($sql."<br>".mysql_error());

//si la requête s'est bien passé, on affiche un message de succès
if($requete)
{
echo "L'inscription s'est bien déroulée, <a href=\"index.php\">se connecter</a>" ;
} //fin if
/*
sinon on retourne à la page d'inscription
*/
else
{
header("Location: index.php") ;
}//fin else
?>


Et bien j'ai une erreur, ca marche pas !!!

Avez vous une idée ?

merci d'avance

Titre: Re:creation table
Posté par: Bluely le le 23-01-2011 a 22:53:04

manque une accolade à la fin du script

Titre: Re:creation table
Posté par: Wolf18 le le 24-01-2011 a 20:28:11

Oui, si on décale chaque fois les accolades quand on ouvre un if ou un else c'est justement pour ne pas oublier de les fermer :)

Avant d'ouvrir ton dernier else tu as oublié de fermer le premier IF ;)

Le mieux quand tu codes pour t'y retrouver c'est soit de mettre des commentaires de partout, soit, chaque fois que tu ouvres un if tu le fermes dans la foulée (avec éventuellement le else derrière). Tu mets les accolades de suite avant le contenu, comme ça t'es sur de ne pas en oublier.


Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.