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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : comment faire une formulaire qui envoi les infos vers un DB?

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

par dexon » 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.

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

par AB » 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>

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

par AB » 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 !

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

par AB » 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:

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

par dexon » 22 août 2010, 20:44

ok je viens de tester j'ai des message d'érreur : Erreur SQL ! veuillez prvénir un admin.INSERT INTO accounts(id, name, password, birthday) VALUES('','','','')
Duplicate entry '' for key 'name'

Voila le code du formulaire :
<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>

<?php

/* 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;
$pass = (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 ($pass == null) $message[] = 'le champ pass doit être rempli';
if ($pass != $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';
    
    // 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
    mysql_query($sql) or die('<font color="red">Erreur SQL ! veuillez prv&eacute;nir un admin.</font>'.$sql.'<br>'.mysql_error());

    // on affiche le résultat pour le visiteur
    echo 'Vos infos on &eacute;t&eacute; ajout&eacute;es. Vous pouvez vous connecter sur le jeu.';

    mysql_close();  // on ferme la connexion
	
?>
j'ai retiré :

Code : Tout sélectionner

header('Content-type: text/html; charset=UTF-8');
car il est déjà dans mon head

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

par AB » 22 août 2010, 20:38

Bonjours,
AB, merci pour cette aide. Mais le script que tu a posté c'est pour la vérification des champs vides ? Je vais aller le tester.
C'est l'adaptation du tuto que je t'ai donné en lien faq-tutoriels/inscription-connexion-dan ... 42539.html, avec une gestion plus poussée des erreurs : teste et indique quels sont les champs vide et si password != verif_password et en reprenant les champs de ton formulaire : name, password, password_verif et birthday

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

par dexon » 22 août 2010, 20:25

Bonjours,

AB, merci pour cette aide. Je vais aller le tester.


xTG, c'est possible de faire une transformation du password en
algorithme qui ressort une chaîne de 32 caractères
en envoyant les infos ?

Oui ta réponse m'a aidé maintenant je sais mètre mon password en md5 mais mon mini jeu, apatament prend que les algorithme de 32 caractères.

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

par AB » 22 août 2010, 19:52

Et alors ce tuto, t'es aller y faire un tour ?

La différence avec ce que tu veux est l'incorporation du champ date de naissance et la confirmation du mot de passe mais au moins tu partirais sur un code correctement structuré et documenté que tu n'aurais plus qu'à compléter. En fin de page j'indique comment coder les mots de passe en sha1 qu'il faut préférer au md5.

Si j'insiste sur ce tuto c'est qu'il est justement prévu pour les débutants et que d'autre part il ne comporte que le code minimum nécessaire (excepté les lignes pour travailler en UTF-8 mais c'est une bonne habitude à prendre).

Si tu ne comprends pas tout ben il faut prendre le temps de comprendre ou poser des questions car c'est le minimum à connaître pour faire un code qui tienne la route. En plus tu n'as qu'à faire deux copié-collé pour tester... (un pour créer la table, l'autre pour copier le code).

Concernant la gestion des erreurs (je parle toujours du tuto) c'est un peu sommaire puisque ma façon de faire est d'indiquer qu'un champ nécessaire n'a pas été rempli mais bon sur trois ou quatre champs indispensables, normalement c'est suffisamment clair pour le visiteur. Cela dit si tu tiens à avoir une gestion des erreurs précise et exhaustive, il faut enregistrer tes erreurs dans un tableau.

Par exemple en adaptant le code php du tuto à ton formulaire voilà ce que donnerait un code à peu près bien structuré :
<?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;
$pass = (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 ($pass == null) $message[] = 'le champ pass doit être rempli';
if ($pass != $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)

{
//...
}
}

?>

<!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 ="#">
...
</form>
</body>
</html>

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

par xTG » 22 août 2010, 10:27

Oui il est possible via javascript de transformer le mot de passe en md5 avant de l'envoyer.
Voilà ce que j'ai trouvé : http://actuel.fr.selfhtml.org/articles/ ... /index.htm

Donc en gros tu aurais ton bouton submit qui réagit sur l'attribut onClick pointant sur une fonction javascript.
Dedans tu récupères la valeur du mot de passe que tu convertis en md5, puis tu modifies le champ de ton formulaire.
Et ensuite tu postes le formulaire.

A moins que ta question restait toute simple et que tu voulais savoir comment convertir en md5 via PHP ?
Dans ce cas relis mon dernier post, je t'y ai mis un exemple convertissant une chaîne en md5 avec ou sans clé.

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

par dexon » 22 août 2010, 09:35

Ah lol merci !

Connais-tu une façon de transformer l'envoi du password (du formulaire) en algorithme de 32 caractère ? (si c'est possible sa ma l'aire bien poussé là... :shock: )

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

par xTG » 22 août 2010, 09:21

<?php
if( !empty($_POST) ) // On vérifie que le tableau de la méthode POST n'est pas vide
{
  // Notre traitement du formulaire qui ne s'exécutera que si le formulaire a été posté
}
?>
:)

Sinon il existe "plusieurs MD5", en général on utilise une clé de hachage, de ce fait utiliser md5() sur la chaîne ne suffit pas.
Exemple :
$cle = "Ma clé qui va tout changer !";
$mdp_hash_md5 = hash("md5", $mdp . $cle );
$mdp_md5 = hash("md5", $cle );
Tu peux utiliser cet exemple et tu verras bien la différence. ^^

Pour ce qui est du mot de passe de ton jeu ce n'est aucunement du md5, c'est un algorithme qui ressort une chaîne de 32 caractères.

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

par dexon » 22 août 2010, 07:39

J'ai réussi ! c’est tout bête se que j'ai fais mais sa marche maintenant :D j'explique :

j'ai remplacer :
if(empty($name) OR empty($password) OR empty($password_verif) OR empty($birthday))
    {
    echo '<font color="red">Attention, des champs sont rester vide !</font>';
    }
Par :
if(empty($name))
    {
    echo '<font color="red">Veuillez remplir "Votre nom de compte"</font>';
    }
if(empty($password))
    {
    echo '<font color="red">Veuillez remplir "Votre mot de passe"</font>';
    }
if(empty($birthday))
    {
    echo '<font color="red">Veuillez remplir "Votre date de naissance (aaaa-mm-jj)"</font>';
    }
Et voila sa marche !

Mais il me reste un tout petit problème... quand j'accède à la page d'inscription, toute les phrases rouge qui disent que les champ son vide apparaissent. Mais j'ai pas encore cliquer sur Envoyer :shock:...

Et comment faire pour que quand on clique sur envoyer, le password ne s’envoie pas tel quel ? Je veux dire, comment faire pour que le password se transforme en code md5 lors de l'envoi ?

Merci encore pour votre aide et j’espère ne pas trop vous énerver avec toute mes question :oops: :lol:

P.S. Y a-t il plusieurs version de md5 ? car moi j'ai une sorte de petit jeu qui prend les mots de passe md5 seulement et je ne peu pas le changer.
Mais quand j'utilise mais info, pseudo et passe, il refuse mon mot de passe md5 que j'ai pris de sure un site mais il accepte une autre sorte de md5 je pennse... Voyer par vous même

MD5 convertit sur un site : ab3642da1e6ef41071c178dc85474bde
code que le mini jeu accepte: 84052437f0672503a0e6c28dd7d6ee08efaf0090299ba1db98c69076b8b4d552aef232ce3279a2142b7b5ef95ab6bec252a3617bbe7eb77339afaa1cd1c386f0


Comme sa : f81e14c61bd5943707588d1f758a479f2193cfe3d91f3dfe021cab0bb373ae57be3c20a07fe6eb98dc3d91adcd0c3f0c9633ca9c190c4313b1ccef6920caac06
sa veux dire : admin

Voyez la différence :shock:

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

par dexon » 22 août 2010, 02:50

sa devien in tentiné tro poussé pour moi la dsl y aurait-il moyen de faire un peux plus simple ? :oops: :( :roll:

c'est quoi qu'on place où ? Mais surtout, a quoi sa sert 8-|

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

par xTG » 21 août 2010, 21:03

$sql est juste une variable, son contenu (la requête) est utilisé dans la fonction mysql_query().

Tu peux mettre sur une même page le formulaire et son traitement.
En général on procède comme suit :
<!-- notre formulaire -->
<?php
if( !empty($_POST) ) // On vérifie que le tableau de la méthode POST n'est pas vide
{
  // Notre traitement du formulaire
} 
?>
Pour ton erreur, rajoutes print_r($_POST); au début de ta page afin de voir si les données sont bien envoyées.

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

par AB » 21 août 2010, 21:01

Bonjours,

je te remercie pour ces info mais je voudrais savoir encore une chose, dans http://phpdebutant.org/article67.php,
<?
$sql = "INSERT INTO infos_tbl(id, nom, prenom,email, icq, titre, url) VALUES('','$nom','$prenom','$email','$icq','$titre','$url')"; 
?>
le "$sql" , dans les 2 scripts je ne vois rien qui y fait référence. Cette commande est t'elle faite pour s'exécuter automatiquement lorsqu’on clique sur le bouton envoyé ?

Et c’est possible de faire notre formulaire en une seul page ? Si oui dois-je ajouter le script php dans la même page et modifier
<form method="POST" action="add.php">
add.php par le nom de la même page ?
Le $sql c'est l'écriture de la requête qui est exécutée ensuite dans l'exemple de phpdebutant avec
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

Dans l'exemple que je t'ai donné dans ce message je l'avais nommé $query mais tu peux bien l'appeler comme tu veux (ex : $toto) à partir du moment ou tu reprends ce nom dans mysql_query qui est la fonction qui exécute la requête.
$toto = "INSERT INTO infos_tbl(id, nom, prenom,email, icq, titre, url) VALUES('','".mysql_real_escape_string($nom)."','".mysql_real_escape_string($prenom)."','".mysql_real_escape_string($email)."','".mysql_real_escape_string($icq)."','".mysql_real_escape_string($titre)."','".mysql_real_escape_string($url)."')"; 

$resultat = mysql_query($toto) or die(mysql_error());
Prends soin de bien utiliser mysql_real_escape_string comme dans mon exemple (ce qui n'est pas mentionné dans le tuto de phpdebutant car ce tuto est pour le principe et date un peu).

Y'a un tuto et un script complet d'inscription dans un espace membre ici, c'est le même principe que ce que tu veux faire, tu peux l'essayer et le compléter pour tes besoins.

Pour appeler un script dans une même page le plus simple est d'utiliser le #
<form method="POST" action="#">

Pour vérifier qu'une date est valide il existe la fonction checkdate.

Mais commence par aller voir le tuto que je viens de mentionner, ça devrait t'éclairer pas mal :wink: