par
flolegueu » 18 oct. 2016, 11:55
Bonjour, j'ai suivi le tuto "Formulaire d'inscription - tutoriel PHP France" mais je ne comprend pas pourquoi j'ai ce message d'erreur
Problème dans la requête d'insertion Donc pour le moment, un message d'erreur et toujours aucune valeur dans la bdd.
je l'ai modifié pour mes besoins, j'ai rajouté des champs et je ne veux pas de pseudo mais l'adresse mail à la place voici la table dont je veux insérer les valeurs récupérées par le formulaire.
Merci de votre aide.
CREATE TABLE IF NOT EXISTS `clients` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(255) NOT NULL,
`prenom` varchar(255) NOT NULL,
`mail` varchar(255) NOT NULL,
`adresse` varchar(255) NOT NULL,
`codepostal` varchar(255) NOT NULL,
`naissance` varchar(255) NOT NULL,
`age` varchar(255) NOT NULL,
`mdp` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `mail` (`mail`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
<?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');
/* Initialisation de la variable du message de réponse*/
$message = null;
/* Récupération des variables issues du formulaire par la méthode post*/
$nom = filter_input(INPUT_POST, 'nom');
$prenom = filter_input(INPUT_POST, 'prenom');
$adresse = filter_input(INPUT_POST, 'adresse');
$codepostal = filter_input(INPUT_POST, 'codepostal');
$ville = filter_input(INPUT_POST, 'ville');
$mail = filter_input(INPUT_POST, 'mail');
$phone = filter_input(INPUT_POST, 'phone');
$naissance = filter_input(INPUT_POST, 'naissance');
$age = filter_input(INPUT_POST, 'age');
$mdp = filter_input(INPUT_POST, 'mdp');
/* Si le formulaire est envoyé */
if (isset($nom,$prenom,$adresse,$codepostal,$ville,$mail,$phone,$naissance,$age,$mdp))
{
/* Teste que les valeurs ne sont pas vides ou composées uniquement d'espaces */
$nom = trim($nom) != '' ? $nom : null;
$prenom = trim($prenom) != '' ? $prenom : null;
$adresse = trim($adresse) != '' ? $adresse : null;
$codepostal = trim($codepostal) != '' ? $codepostal : null;
$ville = trim($ville) != '' ? $ville : null;
$mail = trim($mail) != '' ? $mail : null;
$phone = trim($phone) != '' ? $phone : null;
$naissance = trim($naissance) != '' ? $naissance : null;
$age = trim($age) != '' ? $age : null;
$mdp = trim($mdp) != '' ? $mdp : null;
/* Si $mail et $pass différents de null */
if(isset($nom,$prenom,$adresse,$codepostal,$ville,$mail,$phone,$naissance,$age,$mdp))
{
/* Connexion au serveur : dans cet exemple, en local sur le serveur d'évaluation
A MODIFIER avec vos valeurs */
$hostname = "localhost";
$database = "prendrerdv";
$username = "root";
$password = "";
/* Configuration des options de connexion */
/* Désactive l'éumlateur de requêtes préparées (hautement recommandé) */
$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
/* Active le mode exception */
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
/* Indique le charset */
$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
/* Connexion */
try
{
$connect = new PDO('mysql:host='.$hostname.';dbname='.$database, $username, $password, $pdo_options);
}
catch (PDOException $e)
{
exit('problème de connexion à la base');
}
/* Requête pour compter le nombre d'enregistrements répondant à la clause : champ du mail de la table = mail posté dans le formulaire */
$requete = "SELECT COUNT(*) FROM clients WHERE mail = ?";
try
{
/* préparation de la requête*/
$req_prep = $connect->prepare($requete);
/* Exécution de la requête en passant la position du marqueur et sa variable associée dans un tableau*/
$req_prep->execute(array(0=>$mail));
/* Récupération du résultat */
$resultat = $req_prep->fetchColumn();
if ($resultat == 0)
/* Résultat du comptage = 0 pour ce mail, on peut donc l'enregistrer */
{
/* Pour enregistrer la date actuelle (date/heure/minutes/secondes) on peut utiliser directement la fonction mysql : NOW()*/
$insertion = "INSERT INTO clients(nom, prenom, adresse, codepostal, ville, mail, phone, naissance, age, mdp) VALUES(:nom, :prenom, :adresse, :codepostal, :ville, :mail, :phone, :naissance, :age, :mdp)";
/* préparation de l'insertion */
$insert_prep = $connect->prepare($insertion);
/* Exécution de la requête en passant les marqueurs et leur variables associées dans un tableau*/
$inser_exec = $insert_prep->execute(array(':nom'=>$nom,':prenom'=>$prenom,':adresse'=>$adresse,':codepostal'=>$codepostal,':ville'=>$ville,':mail'=>$mail,':phone'=>$phone,':naissance'=>$naissance,':age'=>$age,':mdp'=>$mdp));
/* Si l'insertion s'est faite correctement...*/
if ($inser_exec === true)
{
/* Démarre une session si aucune n'est déjà existante et enregistre le mail dans la variable de session $_SESSION['login'] qui donne au visiteur la possibilité de se connecter. */
if (!session_id()) session_start();
$_SESSION['login'] = $mail;
/* A MODIFIER Remplacer le '#' par l'adresse de votre page de destination, sinon ce lien indique la page actuelle.*/
$message = 'Votre inscription est enregistrée.';
/*ou redirection vers une page en cas de succès ex : menu.php*/
/*header("Location: menu.php");
exit(); */
}
}
else
{ /* Le mail est déjà utilisé */
$message = 'Ce mail est déjà utilisé, changez-le.';
}
}
catch (PDOException $e)
{
$message = 'Problème dans la requête d\'insertion';
}
}
else
{ /* Au moins un des deux champs "mail" ou "mot de passe" n'a pas été rempli*/
$message = 'Les champs mail et Mot de passe doivent être remplis.';
}
}
?>
<!doctype html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Formulaire d'inscription - tutoriel PHP France</title>
<style type="text/css">
<!--
body, p, h1,form, input, fieldset
{
margin:0;
padding:0;
}
body
{
background-color: #F4F4F4;
}
#inscription
{
width:400px;
background:#FFFFFF;
margin:20px auto;
font-family: Arial, Helvetica, sans-serif;
font-size:1em;
border:1px solid #ccc;
border-radius:10px;
}
#inscription fieldset
{
text-align:center;
font-size:1.2em;
background:#333333;
padding-bottom:5px;
margin-bottom:15px;
color:#FFFFFF;
letter-spacing:0.05em;
border-top-left-radius:10px;
border-top-right-radius:10px;
}
#inscription p
{
padding-top:15px;
padding-right:50px;
text-align:right;
}
#inscription input
{
margin-left:30px;
width:150px;
}
#inscription #valider
{
width:155px;
font-size:0.8em;
}
#inscription #message
{
height:27px;
color:#F00;
font-size:0.8em;
font-weight:bold;
text-align:center;
padding:10px 0 0 0;
}
-->
</style>
</head>
<body>
<div id = "inscription">
<form action = "#" method = "post">
<fieldset>Inscription</fieldset>
<p><label for = "nom">Nom : </label><input type = "text" name = "nom" id = "nom" /></p>
<p><label for = "prenom">Prénom : </label><input type = "text" name = "prenom" id = "prenom" /></p>
<p><label for = "adresse">Adresse : </label><input type = "text" name = "adresse" id = "adresse" /></p>
<p><label for = "codepostal">Code postal : </label><input type = "text" name = "codepostal" id = "codepostal" /></p>
<p><label for = "ville">Ville : </label><input type = "text" name = "ville" id = "ville" /></p>
<p><label for = "mail">E-Mail : </label><input type = "text" name = "mail" id = "mail" /></p>
<p><label for = "phone">Téléphone : </label><input type = "text" name = "phone" id = "phone" /></p>
<p><label for = "naissance">Date de Naissance : </label><input type = "date" name = "naissance" id = "naissance" /></p>
<p><label for = "age">Âge : </label><input type = "text" name = "age" id = "age" /></p>
<p><label for = "mdp">Mot de passe : </label><input type = "password" name = "mdp" id = "mdp" /></p>
<p><input type = "submit" value = "Envoyer" id = "valider" /></p>
</form>
<p id = "message"><?= $message?:'' ?></p>
</div>
</body>
</html>
Merci de votre aide
Bonjour, j'ai suivi le tuto "Formulaire d'inscription - tutoriel PHP France" mais je ne comprend pas pourquoi j'ai ce message d'erreur [color=#FF0000][b]Problème dans la requête d'insertion[/b][/color] Donc pour le moment, un message d'erreur et toujours aucune valeur dans la bdd.
je l'ai modifié pour mes besoins, j'ai rajouté des champs et je ne veux pas de pseudo mais l'adresse mail à la place voici la table dont je veux insérer les valeurs récupérées par le formulaire.
Merci de votre aide.
CREATE TABLE IF NOT EXISTS `clients` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(255) NOT NULL,
`prenom` varchar(255) NOT NULL,
`mail` varchar(255) NOT NULL,
`adresse` varchar(255) NOT NULL,
`codepostal` varchar(255) NOT NULL,
`naissance` varchar(255) NOT NULL,
`age` varchar(255) NOT NULL,
`mdp` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `mail` (`mail`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
[php]<?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');
/* Initialisation de la variable du message de réponse*/
$message = null;
/* Récupération des variables issues du formulaire par la méthode post*/
$nom = filter_input(INPUT_POST, 'nom');
$prenom = filter_input(INPUT_POST, 'prenom');
$adresse = filter_input(INPUT_POST, 'adresse');
$codepostal = filter_input(INPUT_POST, 'codepostal');
$ville = filter_input(INPUT_POST, 'ville');
$mail = filter_input(INPUT_POST, 'mail');
$phone = filter_input(INPUT_POST, 'phone');
$naissance = filter_input(INPUT_POST, 'naissance');
$age = filter_input(INPUT_POST, 'age');
$mdp = filter_input(INPUT_POST, 'mdp');
/* Si le formulaire est envoyé */
if (isset($nom,$prenom,$adresse,$codepostal,$ville,$mail,$phone,$naissance,$age,$mdp))
{
/* Teste que les valeurs ne sont pas vides ou composées uniquement d'espaces */
$nom = trim($nom) != '' ? $nom : null;
$prenom = trim($prenom) != '' ? $prenom : null;
$adresse = trim($adresse) != '' ? $adresse : null;
$codepostal = trim($codepostal) != '' ? $codepostal : null;
$ville = trim($ville) != '' ? $ville : null;
$mail = trim($mail) != '' ? $mail : null;
$phone = trim($phone) != '' ? $phone : null;
$naissance = trim($naissance) != '' ? $naissance : null;
$age = trim($age) != '' ? $age : null;
$mdp = trim($mdp) != '' ? $mdp : null;
/* Si $mail et $pass différents de null */
if(isset($nom,$prenom,$adresse,$codepostal,$ville,$mail,$phone,$naissance,$age,$mdp))
{
/* Connexion au serveur : dans cet exemple, en local sur le serveur d'évaluation
A MODIFIER avec vos valeurs */
$hostname = "localhost";
$database = "prendrerdv";
$username = "root";
$password = "";
/* Configuration des options de connexion */
/* Désactive l'éumlateur de requêtes préparées (hautement recommandé) */
$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
/* Active le mode exception */
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
/* Indique le charset */
$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
/* Connexion */
try
{
$connect = new PDO('mysql:host='.$hostname.';dbname='.$database, $username, $password, $pdo_options);
}
catch (PDOException $e)
{
exit('problème de connexion à la base');
}
/* Requête pour compter le nombre d'enregistrements répondant à la clause : champ du mail de la table = mail posté dans le formulaire */
$requete = "SELECT COUNT(*) FROM clients WHERE mail = ?";
try
{
/* préparation de la requête*/
$req_prep = $connect->prepare($requete);
/* Exécution de la requête en passant la position du marqueur et sa variable associée dans un tableau*/
$req_prep->execute(array(0=>$mail));
/* Récupération du résultat */
$resultat = $req_prep->fetchColumn();
if ($resultat == 0)
/* Résultat du comptage = 0 pour ce mail, on peut donc l'enregistrer */
{
/* Pour enregistrer la date actuelle (date/heure/minutes/secondes) on peut utiliser directement la fonction mysql : NOW()*/
$insertion = "INSERT INTO clients(nom, prenom, adresse, codepostal, ville, mail, phone, naissance, age, mdp) VALUES(:nom, :prenom, :adresse, :codepostal, :ville, :mail, :phone, :naissance, :age, :mdp)";
/* préparation de l'insertion */
$insert_prep = $connect->prepare($insertion);
/* Exécution de la requête en passant les marqueurs et leur variables associées dans un tableau*/
$inser_exec = $insert_prep->execute(array(':nom'=>$nom,':prenom'=>$prenom,':adresse'=>$adresse,':codepostal'=>$codepostal,':ville'=>$ville,':mail'=>$mail,':phone'=>$phone,':naissance'=>$naissance,':age'=>$age,':mdp'=>$mdp));
/* Si l'insertion s'est faite correctement...*/
if ($inser_exec === true)
{
/* Démarre une session si aucune n'est déjà existante et enregistre le mail dans la variable de session $_SESSION['login'] qui donne au visiteur la possibilité de se connecter. */
if (!session_id()) session_start();
$_SESSION['login'] = $mail;
/* A MODIFIER Remplacer le '#' par l'adresse de votre page de destination, sinon ce lien indique la page actuelle.*/
$message = 'Votre inscription est enregistrée.';
/*ou redirection vers une page en cas de succès ex : menu.php*/
/*header("Location: menu.php");
exit(); */
}
}
else
{ /* Le mail est déjà utilisé */
$message = 'Ce mail est déjà utilisé, changez-le.';
}
}
catch (PDOException $e)
{
$message = 'Problème dans la requête d\'insertion';
}
}
else
{ /* Au moins un des deux champs "mail" ou "mot de passe" n'a pas été rempli*/
$message = 'Les champs mail et Mot de passe doivent être remplis.';
}
}
?>
<!doctype html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Formulaire d'inscription - tutoriel PHP France</title>
<style type="text/css">
<!--
body, p, h1,form, input, fieldset
{
margin:0;
padding:0;
}
body
{
background-color: #F4F4F4;
}
#inscription
{
width:400px;
background:#FFFFFF;
margin:20px auto;
font-family: Arial, Helvetica, sans-serif;
font-size:1em;
border:1px solid #ccc;
border-radius:10px;
}
#inscription fieldset
{
text-align:center;
font-size:1.2em;
background:#333333;
padding-bottom:5px;
margin-bottom:15px;
color:#FFFFFF;
letter-spacing:0.05em;
border-top-left-radius:10px;
border-top-right-radius:10px;
}
#inscription p
{
padding-top:15px;
padding-right:50px;
text-align:right;
}
#inscription input
{
margin-left:30px;
width:150px;
}
#inscription #valider
{
width:155px;
font-size:0.8em;
}
#inscription #message
{
height:27px;
color:#F00;
font-size:0.8em;
font-weight:bold;
text-align:center;
padding:10px 0 0 0;
}
-->
</style>
</head>
<body>
<div id = "inscription">
<form action = "#" method = "post">
<fieldset>Inscription</fieldset>
<p><label for = "nom">Nom : </label><input type = "text" name = "nom" id = "nom" /></p>
<p><label for = "prenom">Prénom : </label><input type = "text" name = "prenom" id = "prenom" /></p>
<p><label for = "adresse">Adresse : </label><input type = "text" name = "adresse" id = "adresse" /></p>
<p><label for = "codepostal">Code postal : </label><input type = "text" name = "codepostal" id = "codepostal" /></p>
<p><label for = "ville">Ville : </label><input type = "text" name = "ville" id = "ville" /></p>
<p><label for = "mail">E-Mail : </label><input type = "text" name = "mail" id = "mail" /></p>
<p><label for = "phone">Téléphone : </label><input type = "text" name = "phone" id = "phone" /></p>
<p><label for = "naissance">Date de Naissance : </label><input type = "date" name = "naissance" id = "naissance" /></p>
<p><label for = "age">Âge : </label><input type = "text" name = "age" id = "age" /></p>
<p><label for = "mdp">Mot de passe : </label><input type = "password" name = "mdp" id = "mdp" /></p>
<p><input type = "submit" value = "Envoyer" id = "valider" /></p>
</form>
<p id = "message"><?= $message?:'' ?></p>
</div>
</body>
</html>[/php]
Merci de votre aide