Formulaire avec envoi BDD

Répondre
dragoon25
le 06/02/2014 à 17:02
dragoon25
Bonjour

Je viens vers vous pour un peu d'aide au niveau d'un formulaire qui envoie ces données dans une base de données.

Le formulaire fonctionne et envoie bien les infos dans ma base ( déjà pas mal )

Mais j'ai 2 soucis :

- dès que j'arrive sur la page, cela envoi des infos vides sur ma BDD ( dc on se connecte et on rempli
le formulaire, ca me fais une ligne vid eet une ligne pleine)

- je n'arrive pas à faire un contrôle de champ vide, testé avec empty et isset mais ca ne fonctionne pas.


Merci d'avance !

-------------------ma page php--------------------------------

<html>

<head>
<title>Formulaire de TEST</title>
</head>

<body>
<center><img border="0" src="IMAGE.jpg" width="422" height="212"></font><table border="1" width="588" cellspacing="0" cellpadding="0"><br><br>
<form method="post" action="index.php">
Société : <input type="text" name="societe" size="12"><br>
Nom : <input type="text" name="nom" size="12"><br>
Prénom : <input type="text" name="prenom" size="12"> <br>
Email : <input type="text" name="email" size="12"> <br>
Téléphone : <input type="text" name="telephone" size="12"> <br><br>
<input type="submit" value="Envoyer">
<input type="reset" value="Effacer">
</form>
</center>
<br>
<br>
</body>
</html>

<?php
//Valeurs du serveur SQL
$host = '127.0.0.1';
$user = 'root';
$pass = 'admin';

// On récupère les valeurs du formulaire
$societe = $_POST ['societe'];
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$email = $_POST['email'];
$telephone = $_POST['telephone'];

if(!empty($societe)) {
echo 'Société est vide';
} else{
echo 'Société n\'est pas vide';}



/*
print("$societe, $nom, $prenom, $email, $telephone");
*/


$link=mysql_connect ($host,$user,$pass);
if (!$link) {
die ('Erreur de connection au serveur '.mysql_error() ) ;
}

$db=mysql_select_db('Stammtisch');
if (!$db)
{
die ('Impossible de sélectionner la base de données : ' . mysql_error());
}

//Tables
$table=mysql_query("insert into inscriptions (societe, nom, prenom, email, telephone) values ( '$societe' , '$nom' , '$prenom' , '$email' , '$telephone');");
if (!$table)
{
die ('ERREUR'.mysql_error() ) ;
}

?>

--------------------------------------------------------------------------------
dragoon25
le 07/02/2014 à 11:51
dragoon25
J'ai refais le code et réussi à ne plus envoyer des infos vides.

Par contre mes erreurs ($alerte) ne s'affichent pas et je ne trouve pas pourquoi.

<html>

<head>
<title>Formulaire de TEST</title>
</head>

<body bgcolor="#000000">
<center><img border="0" src="IMAGE.jpg" width="422" height="212"></font><table border="1" width="588" cellspacing="0" cellpadding="0"><br><br>
<form action="index.php" method="post">
<?php echo $alerte0;?>
<p><font color="#FFFFFF">Pseudo:</font><br/>
<input name="pseudo" size="22" value="" type="text"/>
</p>
<?php echo $alerte1;?>
<p><font color="#FFFFFF">Email:</font><br/>
<input name="email" size="22" value="" type="text"/>
</p>
<?php echo $alerte2;?>
<p><font color="#FFFFFF">Commentaire:</font><br/>
<input name="commentaire" size="22" value="" type="text"/>
</p>

<input name="Valider" value="Valider" type="submit"/>
<input name="Effacer" value="Effacer" type="reset"/>

</form>
</center>
<br>
<br>
</body>
</html>

<?php
//Valeurs du serveur SQL
$host = '127.0.0.1';
$user = 'root';
$pass = 'admin';
$base = 'Stammtisch';

//Si l'action de validation a été faite
if(isset($_POST["Valider"]))
{
// on se connecte à la base de données
mysql_connect("$host","$user","$pass");
mysql_select_db("$base") or die('Impossible de s&eacute;lectionner une base
de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;es de
connections.');

//On attribue une variable pour chaque champ du formulaire
//pseudo
$lechamp0 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["pseudo"])));
//email
$lechamp1 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["email"])));
//commentaire
$lechamp2 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["commentaire"])));

//on vérifie les champs 1 par 1 pour voir si ils ne sont pas vides
if (empty($lechamp0)){
$alerte0 ='<p style="color:#ff0000;">Erreur Pseudo.</p>';
}
else if(empty($lechamp1)){
$alerte1 ='<p style="color:#ff0000;">Erreur Email.</p>';
}
else if(empty($lechamp2)){
$alerte2 ='<p style="color:#ff0000;">Erreur Commentaire</p>';
}
//Si tout est ok
else
{
// on enregistre les données
$result = mysql_query(" INSERT INTO inscriptions VALUES
(
'',
'$lechamp0',
'$lechamp1',
'$lechamp2'
)
");
//Si il y a une erreur
if (!$result) {
die('<p style="color:#ff0000;">Requête invalide :</p>' . mysql_error());
}
else {
echo '<p style="color:#ff0000;">SUCCES.</p>';
}
//on ferme if(isset($_POST["Valider"]))
}
}
?>
dragoon25
le 07/02/2014 à 15:06
dragoon25
Bon j'avance mais si quelqu'un pourrais m'aider maintenant car je sèche.

SI je clique sur ''Valider'' j'ai bien mon info d'erreur mais ca m'efface les champs déjà rempli...

Une idée ??

<html>

<head>
<title>Formulaire de TEST</title>
</head>

<?php
//Valeurs du serveur SQL
$host = '127.0.0.1';
$user = 'root';
$pass = 'admin';



//Si l'action de validation a été faite
if(isset($_POST["Valider"]))
{

// On récupère les valeurs du formulaire
$societe = $_POST ['societe'];
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$email = $_POST['email'];
$telephone = $_POST['telephone'];

//on vérifie les champs pour voir si ils ne sont pas vides
if(empty($societe) && empty($nom) && empty($prenom) && empty($email) && empty($telephone)) {
$alerte ='<p style="color:#ff0000;">Info manquante.</p>';
} else{

// on se connecte à la base de données
$link=mysql_connect ($host,$user,$pass);
if (!$link) {
die ('Erreur de connection au serveur '.mysql_error() ) ;
}

$db=mysql_select_db('Stammtisch');
if (!$db)
{
die ('Impossible de sélectionner la base de données : ' . mysql_error());
}

// on enregistre les valeurs
$table=mysql_query("insert into inscriptions (societe, nom, prenom, email, telephone) values ( '$societe' , '$nom' , '$prenom' , '$email' , '$telephone');");

//Si il y a une erreur
if (!$table) {
die('<p style="color:#ff0000;">Requête invalide :</p>' . mysql_error());
}
else {
$alerte1 ='<p style="color:#ff0000;">SUCCES.</p>';
}

}
}

?>

<body bgcolor="#000000">
<center><img border="0" src="IMAGE.jpg" width="422" height="212"></font><table border="1" width="588" cellspacing="0" cellpadding="0"><br><br>
<form action="index2.php" method="post">

<p><font color="#FFFFFF">Société:</font><br/>
<input name="societe" size="22" value="" type="text"/>
</p>

<p><font color="#FFFFFF">Nom:</font><br/>
<input name="nom" size="22" value="" type="text"/>
</p>

<p><font color="#FFFFFF">Prénom:</font><br/>
<input name="prenom" size="22" value="" type="text"/>
</p>

<p><font color="#FFFFFF">Email:</font><br/>
<input name="email" size="22" value="" type="text"/>
</p>

<p><font color="#FFFFFF">Téléphone:</font><br/>
<input name="telephone" size="22" value="" type="text"/>
</p>

<input name="Valider" value="Valider" type="submit"/>
<input name="Effacer" value="Effacer" type="reset"/>

<?php
echo $alerte;
echo $alerte1;
?>

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


Merci !!
niconicochan
le 07/02/2014 à 17:08
niconicochan
Salut,

Tu as une page de formulaire et une page de traitement de formulaire.
Je n'ai encore jamais essayé, mais moi je mettrais comme valeur
pour value dans chaque champs de la page de formulaire
<?php echo="@$_POST[ 'valeurChamps1'] php ?>

pour champs1
<?php echo="@$_POST[ 'valeurChamps2'] php ?>

pour champs2
<?php echo="@$_POST[ 'valeurChamps3'] php ?>

pour champs3
avec une redirection vers cette même page de formulaire lorsque
à la validation le formulaire n'est pas bien rempli.
Du fait de ces ajouts, il ^devient bien sûr indispensable que la
page de formulaire se termine par une extension en .php
niconicochan
le 07/02/2014 à 17:24
niconicochan
Je te réécris le code plus proprement car je l'ai
écrit comme un cochon:

value="<?php echo @_$POST[''valeurChamps1'] ?>"


value="<?php echo @_$POST[''valeurChamps2'] ?>"


value="<?php echo @_$POST[''valeurChamps3'] ?>"
dragoon25
le 10/02/2014 à 09:55
dragoon25
Bonjour niconicochan

je viens de tester ta solution mais je n'ai rien qui s'affiche.

Pourrais tu m'indiquer ou je dois les intégrer ??

Moi j'ai fais ceci :

<input name="societe" size="22" value="<?php echo @_$POST['societe'] ?>"" type="text"/>
LupusMic
le 10/02/2014 à 12:44
LupusMic
Ce que niconicochan essaye de t'expliquer, c'est que le formulaire ne se vide pas. La raison pour laquelle il est vide, c'est parce que tu le créés vide. Donc, tu dois utiliser les données soumises si tu souhaites les proposes à l'utilisateur.

Cependant, ceci peut conduire à des CSRF si tu utilises la méthode proposée.

<input name="societe" size="22" value="<?php echo htmlentities(@$_POST['societe'], ENT_QUOTES); ?>"" type="text"/>


@ est l'opérateur de silence de PHP (il cache les erreurs, tels que les erreurs d'accès à une clé inexistante dans un array).
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
dragoon25
le 10/02/2014 à 20:03
dragoon25
Je suis parti sur votre aide et j'ai reussi à faire cela et ca fonctionne .

<input name="societe" size="22" value="<?echo $societe?>" type="text"/><br />
<?php echo $Erreur_societe;?>
dragoon25
le 10/02/2014 à 20:06
dragoon25
J'ai donc rajouter un contrôle sur chaque champ comme ceci :

<?php 
if (empty($_POST['societe']) ) {
$Erreur_societe = '<p style="color:#ff0000;">Société manquante.</p>';
} if
(empty($_POST['nom']) ) {
$Erreur_nom = '<p style="color:#ff0000;">Nom manquant.</p>';
} if
(empty($_POST['prenom']) ) {
$Erreur_prenom = '<p style="color:#ff0000;">Prénom manquant.</p>';
} if
(empty($_POST['email']) ) {
$Erreur_email = '<p style="color:#ff0000;">Email manquante.</p>';
} if
(empty($_POST['telephone']) ) {
$Erreur_telephone = '<p style="color:#ff0000;">Téléphone manquant.</p>';

} else{

if (($societe <> "") && ($nom <> "") && ($prenom <> "") && ($email <> "") && ($telephone <> ""))
{
$succes = '<span class="succes">Merci de votre inscription.';


php ?>


J'aimerais faire disparaitre le formulaire une fois $succes affiché au lieu de l'afficher en haut de celui ci.

Une idée ?
Répondre
LoadingChargement en cours