comment faire une formulaire qui envoi les infos vers un DB?

ViPHP
AB
ViPHP | 5818 Messages

22 août 2010, 20:53

Ou là mais il en manque... Va pas trop vite et essaies de comprendre. Dans le tuto, avant la requête d'insertion, il y a justement une requête pour vérifier que le nom n'est pas déjà pris. Et puis les variables sont protégées par mysql_real_escape_string. Fait exactement comme dans le tuto mais en reprenant tes valeurs et champs supplémentaires :wink:
Modifié en dernier par AB le 22 août 2010, 20:57, modifié 1 fois.

ViPHP
AB
ViPHP | 5818 Messages

22 août 2010, 20:56

Ah oui aussi, faits comme dans l'exemple que je t'ai donné ou comme dans le tuto, mets le code php AVANT le code html !

ViPHP
AB
ViPHP | 5818 Messages

22 août 2010, 22:19

Alors ça avance ?

ça devrait donner quelque chose comme ça :
<?php
// Indique le bon format des entêtes (par défaut apache risque de les envoyer au standard ISO-8859-1)
header('Content-type: text/html; charset=UTF-8');

/* Création d'une fonction - utilisée dans la récupération des variables - qui teste la configuration get_magic_quotes_gpc du serveur.
Si oui, supprime avec la fonction stripslashes les antislashes "\" insérés dans les chaines de caractère des variables gpc (GET, POST, COOKIE) */
function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
}

$message = array();

// Si le formulaire est envoyé
if (isset($_POST['name']))
{
$name = (isset($_POST['name']) && trim($_POST['name']) != '')? Verif_magicquotes($_POST['name']) : null;
$password = (isset($_POST['password']) && trim($_POST['password']) != '')? Verif_magicquotes($_POST['password']) : null;
$password_verif = (isset($_POST['password_verif']) && trim($_POST['password_verif']) != '')? Verif_magicquotes($_POST['password_verif']) : null;
$birthday = (isset($_POST['birthday']) && trim($_POST['birthday']) != '')? Verif_magicquotes($_POST['birthday']) : null;

if ($name == null) $message[] = 'le champ nom doit être rempli';
if ($password == null) $message[] = 'le champ pass doit être rempli';
if ($password != $password_verif) $message[] = 'la confirmation du mot de passe n\'est pas valide';
if ($birthday == null) $message[] = 'le champ date de naissance doit être rempli';

//si le tableau des messages d'erreur est vide on poursuit le code php d'insertion des données en base de données (cf tuto en adaptant avec les champs de tes tables)
if (count($message) == 0)

{
       // connexion à la base
        include 'includes/config.php';

         mysql_query("SET NAMES 'utf8'");

         // Préparation des données pour la requête de vérification avec la fonction mysql_real_escape_string
         $name = mysql_real_escape_string($name );

         // Requête pour compter le nombre d'enregistrements répondant à la clause : champ du nom de la table = nom posté dans le formulaire
         $requete = "SELECT count(*) as nb FROM accounts WHERE name= '".$name ."'";
   
         // Exécution de la requête
         $req_exec = mysql_query($requete) or die(mysql_error());
   
         // Création du tableau associatif du résultat
         $resultat = mysql_fetch_assoc($req_exec);
   

         // nb est le nom de l'allias associé à count(*) et retourne le résultat de la requête dans le tableau $resultat;
         if ($resultat['nb'] == 0)
         // Résultat du comptage = 0 pour ce pseudo, on peut donc l'enregistrer
         {
                // Préparation des données pour la requête d'insertion avec la fonction mysql_real_escape_string + hashage du passe
                $password = mysql_real_escape_string(sha1($password));
                $birthday = mysql_real_escape_string($birthday);     
         
                // on écrit la requête sql
                $sql = "INSERT INTO accounts(id, name, password, birthday) VALUES('','".$name."','".$password."','".$birthday."')";
   
                // on insère les informations du formulaire dans la table
                $inser_exec = mysql_query($sql);

                /* Si l'insertion s'est faite correctement (une requête d'insertion retourne "true" en cas de succès, je peux donc utiliser
                l'opérateur de comparaison strict '==='  c.f. http://fr.php.net/manual/fr/language.op ... arison.php) */
                if ($inser_exec === true)
                       {
                             /* Démarre la session et enregistre le pseudo dans la variable de session $_SESSION['login']
                             qui donne au visiteur la possibilité de se connecter.  */
                             session_start();
                             $_SESSION['login'] = $name;
           
                             $message[] = 'Votre inscription est enregistrée. Vous pouvez vous connecter';
                     }
          }
           else
          {
                $message[] = 'Ce nom est déjà pris, choisissez-en un autre';
          }
}
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Formulaire d'inscription</title>
</head>
<body>
<div id = "message_erreurs">
<?php if(count($message) > 0) foreach ($message as $value) echo $value.'<br />';?>
</div>
<form method="POST" action="#">

Votre nom de compte :                                           <input type="text" name="name" size="20" value="" maxlength="15"><br /><br />
Votre mot de passe :                                            <input type="password" name="password" size="20" value="" maxlength="20"><br /><br />
R&eacute;p&eacute;tez votre mot de passe :      <input type="password" name="password_verif" size="20" value="" maxlength="20"><br /><br />
Votre date de naissance (aaaa-mm-jj) :          <input type="text" name="birthday" size="20" value="0000-00-00" maxlength="10"><br />
*N'oubliez pas de metre les "-" entre les nombre*<br /><br />
<center><input type="submit" value="Envoyer" name="envoyer"></center>

</form>
</body>
</html>

Eléphanteau du PHP | 41 Messages

22 août 2010, 22:50

Bonjours,

Je viens de faire les derniers test et oui les dernier ! sa marche ! Je ne sais comment vous remercier =D> :D :mrgreen: AB et xTG je vous adore ! lol


Merci encore ! La connexion au mini jeu fonctionne les messages d'erreurs apparaisse en temps voulut.