Aller au contenu

Vérification d'un formulaire


Sujets conseillés

Posté (modifié)

Bonjour

Je viens de créer mon premier formulaire et je vous assure que mon code est pire que laborieux. Vous seriez très gentil si vous pourriez jeter un oeil sur mon code et me dire si je vais vers la bonne direction.

C'est ici http://sffq.org/form-boreal.php

Il s'agit d'un Bulletin de vote préliminaire, pour cinq prix qui seront décernés lors d'un événement. Le bulletin contient des menus déroulant dont j'ai mis que deux valeurs pour l'instant, mais qui en contiendra environ une centaine par prix. De plus, les votant peuvent signaler 3 choix par prix, ce qui m'oblige à multiplier ma liste de valeurs x 3 :wacko: . Avant d'entrer toutes mes valeurs, étant donné que mon code est plus que laborieux, je vérifie auprès de vous si je ne suis pas un peu ou sinon beaucoup dans les patates.

Donc, en langage codifié ;) , ça signifie que j'entre ce code 100 fois pour chacune de mes valeurs, que je multiplie ensuite par 3 pour mes trois choix, et que je l'envois ensuite en puissance 5 pour mes 5 prix :sick:

?>>Bayadjiev, Alexandre - Le Diable et la lune (Isatis)</option>
<option value=" Bourguignon, Pascale - LEnfant dans le miroir (Marchand de feuille)"<?php
if ($_SESSION['liste4'] == " Bourguignon, Pascale - LEnfant dans le miroir (Marchand de feuille)") {
echo(" selected");
}

Haha c'est pas possible, il doit y avoir un raccourcis :fou:

Merci pour votre aide

Modifié par Les_singes
Posté

Si tu as une base de données il vaudrait mieux que tu fasses une table listant tous les choix possibles du genre :

CREATE TABLE `choix` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nom` VARCHAR( 100 ) NOT NULL ,
`prix` INT( 11 ) NOT NULL
) ENGINE = MYISAM;

Tu peux également faire une autre table, listant cette fois ci les prix (l'id du prix servira dans la table précédente)

CREATE TABLE `prix` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nom` VARCHAR( 100 ) NOT NULL
) ENGINE = MYISAM;

Pour afficher ton formulaire tu commences par récupérer les informations sur les prix, tu fais une boucle. A l'intérieur de cette boucle tu cherches les informations sur les choix correspondant à ce prix (grâce à l'id du prix), ce qui donnerait en gros cela :

<?php
// connexion
// recherche des prix
$recherche_prix = mysql_query("SELECT * FROM prix");
while($info_prix = mysql_fetch_array($recherche_prix))
{ // on récupère l'id
$id_prix = $info_prix['id'];
// recherche des choix du prix
$recherche_choix = mysql_query("SELECT * FROM choix WHERE prix='$id_prix'");
while($info_choix = mysql_fetch_array($recherche_choix))
{ echo "<option value=".$info_choix['id'].">".$info_choix['nom']."</option>";
}
}

Si tu ne souhaites pas passer par ce moyen (par choix ou contrainte) tu devras effectivement ecrire manuellement chaque choix sur ta page, bon courage :)

Posté

Bonjour,

Tu as aussi la possibilité de passer par un tableau php :

$vars = array(

array(

"nom" => "prix",

),

...

);

que tu complètes autant de fois que de livres.

Posté (modifié)

J'aime bien l'idée de la base de données, ça serait plus facile à éditer d'année en année. Mais là je sais pas comment en créer une, probablement sur MySql. Mais là j'ose pas trop, parce que je change bientôt d'hébergeur, et j'ai bien peur de perdre quelques plumes. Mais je conserve l'idée pour l'année prochaine. Merci

Je vais essayer de faire ce que me suggère Anonymus, je reviens là dessus.

Modifié par Les_singes
Posté

Pas de problème lorsque tu changeras d'hébergeur, il faudra juste mettre à jour le fichier contenant tes informations de connexion à celle-ci et l'importer.

Pour la créer il faut donc te connecter à ta base de données avec les infos fournies par l'hébergeur actuel, puis d'aller sur l'onglet "SQL". Tu peux copier ce que je t'ai mis au dessus je pense et envoyer.

Mais bon c'est vrai que, sur du court terme le tableau PHP est plus simple.

Posté

Pour te donner une idée du 'comment marchent les tableaux', voici un exemple qui reprend tes données :

<?php


$grosTableau = array(

array(
"id" => 1,
"nom" => "Meilleur roman",
"data" =>array(
array(
"id" => 1,
"valeur" => "amiot",
"nom" => "Amiot, Renée - Nous serons tous des loups-garous",
),
array(
"id" => 2,
"valeur" => "bacon",
"nom" => "Bacon, Annie - Terra Incognita, tome 1 -Les naufragés de Chélon",
),

),
),
);


foreach($grosTableau as $k => $v){

echo "<table align='center' border='0' width='600'><tbody><tr>\n";
echo "<td width='180' style='text-align:left;font-family:Verdana;font-size:3'>".$v['nom']."</td>\n";
echo "<td align='center' valign='center' width='180'>\n";
echo "</td></tr>\n";
echo "<tr><td align='center' valign='middle' width='180'>\n";

for($xx=0;$xx<6;$xx++){
echo "\n<select name='liste".$v['id']."[".$xx."]' style='width: 600px;'>\n";
echo "\t\t<option value=''></option>\n";
foreach($v['data'] as $k2 => $v2){
echo "\t\t<option value='".$v2['valeur']."'>".$v2['nom']."</option>\n";
}
echo "</select>\n";
}

echo "</td></tr>\n";
echo "</tbody></table>\n";
}

/*
echo"<pre>";
print_r($grosTableau);
echo"</pre>";
*/

Une fois que tu as compris comment ca marche, tu peux rajouter pas mal de données dans le tableau.

Quand t'es perdu dans ton tableau, tu peux décommenter les dernières lignes. Ca aura pour effet de t'afficher le tableau tel qu'il se présente.

Après, une fois que tu as compris, c'est un bonheur de se promener dedans ;)

Et 'si problèmes', tu reviens :)

Dernière chose, en procédant ainsi, tu pourras remplacer le tableau par une base de données lorsque tu maitriseras celles-ci.

Nico.

Posté (modifié)

Merci Nico,

ça marche :) Je vais jouer un peu avec, juste ici http://sffq.org/form-boreal2.php j'ai 5 tableaux différents à faire (5 prix)

:flower:

Je vais explorer un peu plus comment fonctionne la base de données dans les semaines à venir :)

Modifié par Les_singes
Posté

J'ai un problème,

Je ne reçois pas les formulaires dans ma boîte mail. Quelqu'un sait quelle est mon erreur?

Merci :)

Posté

oui, ton erreur est de ne pas nous montrer ton code.

( et sans 'boule de cristal', comme dirait un Admin bien connu.. :D )

Posté (modifié)

ha oui :wacko::)

CODE
<?php

// Dans la ligne qui suit, remplacer webmaster_AT_domaine.tld par l'adresse email du webmaster, à laquelle les messages devront être envoyés

$email_webmaster = "shirley-carol_AT_sffq.org";

// === traitement des données du formulaire ============================================================

if (isset($_POST["envoyer"])){

// le formulaire a été soumis

$etat = "erreur";

// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur

// --- mise en forme des champs saisis dans le formulaire lors de sa soumission ---

if (isset($_POST["email_expediteur"])) {

$_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"]));

}

if (isset($_POST["titre"])) {

$_POST["titre"]=trim(stripslashes($_POST["titre"]));

}

if (isset($_POST["message"])) {

$_POST["message"]=trim(stripslashes($_POST["message"]));

}

// --- test de la validité des champs saisis ---

if (empty($_POST["email_expediteur"])) {

// il manque l'email de l'expéditeur

$erreur="Saisissez votre adresse email...";

}

elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email_expediteur"])){

// l'adresse e-mail n'est pas valide

$erreur="Votre adresse e-mail n'est pas valide...";

}

elseif (empty($_POST["message"])) {

// le message est vide

$erreur="Saisissez un message...";

}

else {

// --- tous les champs sont correctement remplis: on pourra envoyer le mail ---

$etat="ok";

}

}

else {

// --- le formulaire n'a pas été soumis ---

$etat="attente";

}

// === fin de traitement des données du formulaire =======================================================

?>

<html xml:lang="fr" lang="fr" xmlns=&quot;http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Form BORÉAL2008</title>

<div align="center">

<img src=&quot;http://www.sffq.org/uploads/images/enteteboreal.jpg" alt="" /></div>

</head>

<body>

<div align="center">

<h1>BORÉAL 2008</h1>

<h2>Bulletin de vote préliminaire</h2></div>

<?php

if ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur

if ($etat=="erreur"){

//le formulaire a été soumis avec une erreur

echo "<p><strong>".$erreur."</strong></p>\n";

// afficher le message d'erreur

}

?>

<p><table width="600" border="1" align="center"><tr>

<td width="600"><div align="left" height="16"><font size="2" face="Verdana, Arial, Helvetica, sans-serif, Tahoma"><i>Ceci est un vote préliminaire. Les cinq oeuvres primées seront votées sur format papier lors du Congrès Boréal. Les uvres concernées sont uniquement celles de lannée 2007. VOUS NAVEZ PAS BESOIN DAVOIR TOUT LU POUR VOTER. Vous pouvez ne pas voter dans une catégorie ou nexprimer quun seul choix. Cette liste, bien qu'exhaustive, peut s'avérer incomplète. C'est pourquoi vous disposez d'une case supplémentaire au cas ou vous désirez voter pour une oeuvre ne figurant pas dans la liste. Merci pour votre participation.

</i></font></div></td></tr></table></p>

<?php

$romans = array(

array(

"id" => 1,

"nom" => "Meilleur roman",

"data" =>array(

array(

"id" => 1,

"valeur" => "loups-garous",

"nom" => "Amiot, Renée - Nous serons tous des loups-garous",

),

array(

"id" => 2,

"valeur" => "naufragés",

"nom" => "Bacon, Annie - Terra Incognita, tome 1 -Les naufragés de Chélon",

),

),

),

);

foreach($romans as $k => $v){

echo "<table align='center' border='0' width='600'><tbody><tr>\n";

echo "<td width='600' style='text-align:left;font-family:Verdana;font-size:20'>".$v['nom']."</td>\n";

echo "<td align='center' valign='center' width='180'>\n";

echo "</td></tr>\n";

echo "<tr><td align='center' valign='middle' width='180'>\n";

for($xx=0;$xx<5;$xx++){

echo "\n<select name='liste".$v['id']."[".$xx."]' style='width: 600px;'>\n";

echo "\t\t<option value=''></option>\n";

foreach($v['data'] as $k2 => $v2){

echo "\t\t<option value='".$v2['valeur']."'>".$v2['nom']."</option>\n";

}

echo "</select>\n";

}

echo "</td></tr>\n";

echo "</tbody></table>\n";

}

/*

echo"<pre>";

print_r($romans);

echo"</pre>";

*/

$nouvelles = array(

array(

"id" => 2,

"nom" => "Meilleure nouvelle ou novella",

"data" =>array(

array(

"id" => 1,

"valeur" => "Beauté",

"nom" => "Allard, Matt - Beauté fatale [FA], in Nocturne, hors-série 1",

),

array(

"id" => 2,

"valeur" => "Fragments",

"nom" => "Allard, Matt - Fragments [FA], in Horrifique # 56",

),

),

),

);

foreach($nouvelles as $k => $v){

echo "<table align='center' border='0' width='600'><tbody><tr>\n";

echo "<td width='600' style='text-align:left;font-family:Verdana;font-size:20'>".$v['nom']."</td>\n";

echo "<td align='center' valign='center' width='180'>\n";

echo "</td></tr>\n";

echo "<tr><td align='center' valign='middle' width='180'>\n";

for($xx=0;$xx<5;$xx++){

echo "\n<select name='liste".$v['id']."[".$xx."]' style='width: 600px;'>\n";

echo "\t\t<option value=''></option>\n";

foreach($v['data'] as $k2 => $v2){

echo "\t\t<option value='".$v2['valeur']."'>".$v2['nom']."</option>\n";

}

echo "</select>\n";

}

echo "</td></tr>\n";

echo "</tbody></table>\n";

}

/*

echo"<pre>";

print_r($nouvelles);

echo"</pre>";

*/

$ouvrages = array(

array(

"id" => 3,

"nom" => "Meilleur ouvrage ou essais",

"data" =>array(

array(

"id" => 1,

"valeur" => "Allard, Jérôme-Olivier",

"nom" => "Allard, Jérôme-Olivier - Le Cycle dElric : un aller simple pour le multivers, in Solaris 162 - La Fanfic: quand le fan devient auteur, in Solaris 164 - Lectures, in Solaris 163",

),

array(

"id" => 2,

"valeur" => "Boudreau, Josée",

"nom" => "Boudreau, Josée - Derniers Lus, in Brins d'éternité #17",

),

),

),

);

foreach($ouvrages as $k => $v){

echo "<table align='center' border='0' width='600'><tbody><tr>\n";

echo "<td width='600' style='text-align:left;font-family:Verdana;font-size:20'>".$v['nom']."</td>\n";

echo "<td align='center' valign='center' width='180'>\n";

echo "</td></tr>\n";

echo "<tr><td align='center' valign='middle' width='180'>\n";

for($xx=0;$xx<5;$xx++){

echo "\n<select name='liste".$v['id']."[".$xx."]' style='width: 600px;'>\n";

echo "\t\t<option value=''></option>\n";

foreach($v['data'] as $k2 => $v2){

echo "\t\t<option value='".$v2['valeur']."'>".$v2['nom']."</option>\n";

}

echo "</select>\n";

}

echo "</td></tr>\n";

echo "</tbody></table>\n";

}

/*

echo"<pre>";

print_r($ouvrages);

echo"</pre>";

*/

$artistique = array(

array(

"id" => 4,

"nom" => "Meilleure création artistique visuelle ou audiovisuelle",

"data" =>array(

array(

"id" => 1,

"valeur" => "Bayadjiev",

"nom" => "Bayadjiev, Alexandre - Le Diable et la lune (Isatis)"

),

array(

"id" => 2,

"valeur" => "Bourguignon, Pascale",

"nom" => "Bourguignon, Pascale - LEnfant dans le miroir (Marchand de feuille)",

),

),

),

);

foreach($artistique as $k => $v){

echo "<table align='center' border='0' width='600'><tbody><tr>\n";

echo "<td width='600' style='text-align:left;font-family:Verdana;font-size:20'>".$v['nom']."</td>\n";

echo "<td align='center' valign='center' width='180'>\n";

echo "</td></tr>\n";

echo "<tr><td align='center' valign='middle' width='180'>\n";

for($xx=0;$xx<5;$xx++){

echo "\n<select name='liste".$v['id']."[".$xx."]' style='width: 600px;'>\n";

echo "\t\t<option value=''></option>\n";

foreach($v['data'] as $k2 => $v2){

echo "\t\t<option value='".$v2['valeur']."'>".$v2['nom']."</option>\n";

}

echo "</select>\n";

}

echo "</td></tr>\n";

echo "</tbody></table>\n";

}

/*

echo"<pre>";

print_r($artistique);

echo"</pre>";

*/

$fanique = array(

array(

"id" => 5,

"nom" => "Meilleure activité fanique ou semi-professionnelle",

"data" =>array(

array(

"id" => 1,

"valeur" => "Brins d'éternité",

"nom" => "Brins d'éternité"

),

array(

"id" => 2,

"valeur" => "Clair/Obscur",

"nom" => "Clair/Obscur",

),

),

),

);

foreach($fanique as $k => $v){

echo "<table align='center' border='0' width='600'><tbody><tr>\n";

echo "<td width='600' style='text-align:left;font-family:Verdana;font-size:20'>".$v['nom']."</td>\n";

echo "<td align='center' valign='center' width='180'>\n";

echo "</td></tr>\n";

echo "<tr><td align='center' valign='middle' width='180'>\n";

for($xx=0;$xx<5;$xx++){

echo "\n<select name='liste".$v['id']."[".$xx."]' style='width: 600px;'>\n";

echo "\t\t<option value=''></option>\n";

foreach($v['data'] as $k2 => $v2){

echo "\t\t<option value='".$v2['valeur']."'>".$v2['nom']."</option>\n";

}

echo "</select>\n";

}

echo "</td></tr>\n";

echo "</tbody></table>\n";

}

/*

echo"<pre>";

print_r($fanique);

echo"</pre>";

*/

?>

<p><table width="600" border="1" align="center"><tr>

<td width="600"><div align="left" height="16"><font size="2" face="Verdana, Arial, Helvetica, sans-serif, Tahoma"><i>Ces renseignements sont nécessaires à la validitation de votre vote; ils resteront confidentiels :

</i></font></div></td></tr></table></p>

<p><table width="600" align="center"><tr><td width="600"><div align="left" height="16">

<label for="titre">Votre nom (obligatoire):</label><br />

<input type="text" size="40" name="titre" id="titre" value="<?php

if (!empty($_POST["titre"])) {

// le titre du message a été saisi: le réafficher

echo htmlspecialchars($_POST["titre"],ENT_QUOTES);

}

?>" /></td></tr></table>

<table width="600" align="center"><tr><td><form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">

<p><label for="email_expediteur">Votre courriel (obligatoire):</label><br />

<input type="text" size="40" name="email_expediteur" id="email_expediteur" value="<?php

if (!empty($_POST["email_expediteur"])) {

// l'adresse email de l'expéditeur a été saisie: la réafficher

echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES);

}

?>" /></td></tr></table>

<table width="600" align="center"><tr><td><p><label for="message">Votre adresse (obligatoire):</label><br />

<textarea name="message" id="message" cols="40" rows="5" value=:"Adresse/rue/ville/province/code postal/pays"><?php

if (isset($_POST["message"])) {

// le message a été saisi: le réafficher

echo htmlspecialchars($_POST["message"],ENT_QUOTES);

}

?></textarea></td></tr></table>

</p>

<table width="600" align="center"><tr><td><p><input type="submit" name="envoyer" value="Envoyer" /></td></tr>

</table>

</p>

</form>

<?php

}

else {

// le formulaire a été soumis sans erreur, on envoie le mail

$entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n";

$entete .= "MIME-Version: 1.0";

if (@mail($email_webmaster,$_POST["titre"],$_POST["message"],$entete)){

// mail envoyé

echo "Votre bulletin de vote a été envoyé. Merci pour votre collaboration<br />\n";

echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Envoyer un autre message...</a>\n";

}

else {

// erreur lors de l'envoi du mail

echo "Un problème s'est produit lors de l'envoi de votre bulletin.\n";

echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Veuillez réessayez...</a>\n";

}

}

?>

</body>

</html>

Modifié par Arlette
Arlette : Merci d'utiliser la balise : "Codebox" pour les codes longs ;)
Posté

J'ai apporté un petit changement et je reçois maintenant le bulletin dans mon courriel. Mais il s'affiche en page blanche, il n'envoit pas les choix que j'ai fait.

Quelqu'un peut m'aider? Merci :)

Posté (modifié)

J'ai été faire valider juste ici

C'est comme si mes <option value " "> des foreach ne seraient pas reconnues

foreach($v['data'] as $k2 => $v2){
echo "\t\t<option value='".$v2['valeur']."'>".$v2['nom']."</option>\n";

dans le certificat il me demande de les rentrer un par un, soit

<option value='Brins d'eternite'>Brins d'éternité</option>

Est-ce que c'est obligatoire? Est-ce pour cette raison que je reçois une page blanche? Merci :)

Modifié par Les_singes
Posté

Non, tu as plusieurs erreurs, en fait, dans cette phrase.

Tu devrais mettre des entités html, soit : é à la place de é,

mais aussi et surtout, quand tu regardes ta ligne, tu as dans value un quote > " ' "

Or ton value est délimité par des quotes. Alors il pense que le quote de 'brin d'éternité' est la fin de 'value', et donc il dit que : 'éternité' ne fait pas partie de 'option'.

A partir de là, ca bloque, oui, c'est normal.

Essaie, au lieu de :

foreach($v['data'] as $k2 => $v2){

echo "\t\t<option value='".$v2['valeur']."'>".$v2['nom']."</option>\n";

de faire :

foreach($v['data'] as $k2 => $v2){

echo "\t\t<option value='".htmlspecialchars($v2['valeur'])."'>".$v2['nom']."</option>\n";

Ca va te mettre des entités au lieu des caractères spéciaux que sont " ' " et " é ".

Nico.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...