Page 1 sur 2

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

Posté : 21 août 2010, 06:29
par dexon
Bonjours, c'est encore moi :D J'ai cherché a plusieurs endroits comme site du zero et plus encore mais je n'ai pas trouver exactement se que je cherchais...

Je voudrais savoir comment on fais un Formulaire d'inscription qui envoi les information vers des base de données MySQL ?

Le formulaire comporte sa :
-Nom de compte
-Mot de passe
-vérification du mot de passe *comment on crée une verification de mot de passe ?*
-date de naissance ( AAAA-MM-JJ )

Mais je voudrais aussi savoir comment faire une sorte de vérification pour que la date comporte les bonne info ( AAAA-MM-JJ ) avec les "-"

Mais pas de code pour l'envoi par e-mail mais sa enregistre direct dans mes db.
Genre avec ses db: name,password et birthday

Merci d'avance!

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

Posté : 21 août 2010, 11:46
par xTG
Pour la vérification du mot de passe c'est juste un second champ où l'utilisateur retape son mot de passe.
Dans la réception tu ne fais donc que vérifier la concordance :
if( $_POST['mdp'] != $_POST['mdp_verif'] )
  echo "Votre mot de passe a été mal tapé.";
Pour la date de naissance le plus simple reste d'utiliser des listes déroulantes (select).
Tu en fais une pour le jour, une pour le mois et une pour l'année. Ensuite il ne te reste plus qu'à les concaténer et à rajouter les tirets avant de mettre le résultat dans ta base.
Il existe des scripts sur le net qui te créerons dynamiquement cette partie afin de ne pas tout faire à la main.

Quand tu as bien toutes les informations que tu voulais tu n'as plus qu'à créer l'enregistrement via une requête INSERT.

Voici un article qui t'aidera : http://phpdebutant.org/article67.php

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

Posté : 21 août 2010, 19:47
par dexon
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 ?

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

Posté : 21 août 2010, 20:50
par dexon
j'ai une erreur voici mon script :

PAGE HTML :
<form method="POST" action="registeradd.php">

Votre nom de compte : 					<input type="text" name="name" size="20" value="" maxlength="15"><br />
Votre mot de passe : 						<input type="text" name="password" size="20" value="" maxlength="20"><br />
R&eacute;p&eacute;tez votre mot de passe : 	<input type="text" name="password_verif" size="20" value="" maxlength="20"><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 de votre date de naissance*<br /><br />
<center><input type="submit" value="Envoyer" name="envoyer"></center>

</form>

PAGE PHP:
<?php
// On commence par récupérer les champs
if(isset($_POST['name']))      $name=$_POST['name'];
else      $name="";

if(isset($_POST['password']))      $password=$_POST['password'];
else      $password="";

if( $_POST['password'] != $_POST['password_verif'] )
  echo "Vous avez mal retranscrit votre mot de passe.";

if(isset($_POST['birthday']))      $birthday=$_POST['birthday'];
else      $birthday="";

// On vérifie si les champs sont vides
if(empty($name) OR empty($password) OR empty($password_verif) OR empty($birthday))
    {
    echo '<font color="red">Attention, des champs sont rester vide !</font>';
    }

// Aucun champ n'est vide, on peut enregistrer dans la table
else     
    {
       // 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('Erreur SQL ! veuillez prévenir un admin.'.$sql.'<br>'.mysql_error());

    // on affiche le résultat pour le visiteur
    echo 'Vos infos on été ajoutées.';

    mysql_close();  // on ferme la connexion
    } 
?>

Quand je clique sur Envoyer, je reçois le message : Attention, des champs sont rester vide !

Mais je les est tous remplis...

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

Posté : 21 août 2010, 21:01
par AB
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:

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

Posté : 21 août 2010, 21:03
par xTG
$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?

Posté : 22 août 2010, 02:50
par dexon
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?

Posté : 22 août 2010, 07:39
par dexon
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?

Posté : 22 août 2010, 09:21
par xTG
<?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?

Posté : 22 août 2010, 09:35
par dexon
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?

Posté : 22 août 2010, 10:27
par xTG
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?

Posté : 22 août 2010, 19:52
par AB
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?

Posté : 22 août 2010, 20:25
par dexon
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?

Posté : 22 août 2010, 20:38
par AB
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?

Posté : 22 août 2010, 20:44
par dexon
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