Récupérer données d'un formulaire

Eléphanteau du PHP | 12 Messages

28 juin 2009, 15:39

Super, merci micetf, j'avance, j'avance !!

Alors maintenant, voila ce qui s'affiche après avoir validé le formulaire :
INSERT INTO inscriptions (ins_prenom,ins_pseudo,ins_tournoi,ins_dispo,ins_email) VALUES ('Essai','Monpseudo','saison1poule1','jeudi','[email protected]')
La base de données est enfin remplie ! Mais par contre j'ai essayé plusieurs fois, et elle s'est remplie plusieurs fois avec les mêmes données. Comment empêcher cela ?

Pour ce qui est des cases à cocher je n'ai qu'une seule réponse : jeudi. Alors que j'ai coché Lundi, Mardi et Jeudi.

Mammouth du PHP | 1511 Messages

28 juin 2009, 16:17

Ton script ne prend pas en compte le fait que tu puisses cocher plusieurs fois le checkbox portant le nom "dispo"
Pour ce faire, tes checkbox doivent s'appeller dispo[] via l'attribut html name.
Cela te retournera un tableau comprenant l'attribut value des checkbox cochées, que tu devras traiter afin de récuprer les informations necessaires via une boucle ou un implode.
N'oublie pas de traiter ce tableau avec array_map() afin de le proteger des injections de code SQL comme tout autre entrée de formulaire réutilisée dans une requête SQL.

Eléphanteau du PHP | 12 Messages

28 juin 2009, 17:20

Oula ça devient compliqué pour moi.

J'ai déjà essayé de travailler sur les champs vide, par contre il m'affiche le message que le champ est vide sur une autre page, comment faire pour que le message apparaisse en dessous du champ concerné ?
<?php
mysql_connect("localhost", "login", "motdepasse")  OR die('Erreur de connexion à la base');
mysql_select_db("nomdelabase");

if(isset($_POST['Valider']))
{

$prenom = stripslashes($_POST['prenom']);
$pseudo = stripslashes($_POST['pseudo']);
$tournoi = stripslashes($_POST['tournoi']);
$dispo = stripslashes($_POST['dispo']);
$email = stripslashes($_POST['email']); 

if(empty($prenom)){
echo 'Veuillez indiquer votre prénom. <br/>';
}
else if(empty($pseudo)){
echo 'Veuillez indiquer votre pseudo.<br/>';
}
else if(empty($joueur)){
echo 'Veuillez indiquer le tournoi choisi.<br/>';
}
else if(empty($email)){
echo 'Veuillez indiquer votre adresse email.<br/>';
} else

{
// On ajoute une entrée avec mysql_query
$req = ("INSERT INTO inscriptions (ins_prenom,ins_pseudo,ins_tournoi,ins_dispo,ins_email)
VALUES ('".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')");
echo $req;
$res = mysql_query($req) or die ("Requête échouée");

}
}

mysql_close();
?>

Eléphant du PHP | 65 Messages

28 juin 2009, 20:09

Bonsoir,

J'espère ne pas trahir momox en rajoutant ceci.
*********************************************************
Dans ton formulaire,
tu dois modifier tes input checkbox
<input type="checkbox" name="dispo" value="lundi" />
en
<input type="checkbox" name="dispo[]" value="lundi" />
ainsi, tu récupèreras les cases cochées dans un tableau.
Par exemple, si tu coches lundi et jeudi,
tu auras $_POS['dispo'] égal à array(0=>'lundi',1=>'jeudi').

A partir de là,
pour appliquer ton stripslashes aux valeurs de ton tableau,
il faut exécuter
$dispo = array_map("stripslashes",$_POST['dispo']);
Ensuite, pour stocker ton tableau dispo dans ta base de données,
j'utiliserais la fonction serialize() qui le transforme en chaîne de caractères.
$dispo = serialize(array_map("stripslashes",$_POST['dispo']));
Pour notre exemple : "a:2:{i:0;s:5:"lundi";i:1;s:5:"jeudi";}"
Lors de la lecture, il suffira d'utiliser la fonction unserialize() pour retrouver le tableau.

***********************************************************************
Quant aux messages d'erreurs sur une autre page,
en fait,
il faut que les contrôles, les traitements et le formulaire soient sur la même page.
En gros, tu peux une construire une page "formulaire.php" du style :

Code : Tout sélectionner

Si j'ai reçu des donnees ($_POST) Je contrôle la validité des données transmises. Si pas d'erreur je fais mes traitements. Si je n'ai pas reçu de données ou que j'ai une erreur J'affiche mon formulaire + eventuellement erreur Sinon j'affiche le résultat de mes traitements

Fred

Mammouth du PHP | 1511 Messages

28 juin 2009, 21:31

J'essayais de le mener vers la solution tout doucement ;) mais tu n'as pas parasité ce que j'aidit.
Par contre, au lieu de sérialiser le tableau, je vérifierais tout d'abord que celui-ci contient des jours valides via un array_intersect() en utilisant d'un coté le tableau renvoyé via post et un tableau contenant tous les jours possibles.

Secundo, pour le stockage, utilisation d'implode() plutôt que serialize(), ce qui permet par la suite de faire des traitements directement en SQL ;)

ViPHP
ViPHP | 2291 Messages

28 juin 2009, 22:08

Salut,

Pourquoi pas une simple boucle :?:
<?php
$disponibilite = $_POST['dispo'];
for($i=0;$i<sizeof($disponibilite);$i++) //-->Tant que $i est inferieur au nombre d'éléments du tableau.--**
    {
    echo  stripslashes($disponibilite[$i]); //-->On affiche le(s) resultat(s), exemple Mardi-Mercredi-Vendredi-.--//
    echo '-';
    }

?>
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphanteau du PHP | 12 Messages

28 juin 2009, 22:31

Salut Dunbar,

J'ai essayé avec ta boucle mais le formulaire envoie Array comme donnée.

Il vaut mieux que je crée dans ma table des champs pour chaque jour de la semaine ? Avec comme réponse OUI ou NON ou stocker tous les jours cochés dans le même champ ?

ViPHP
ViPHP | 2291 Messages

29 juin 2009, 15:29

Bizarre chez moi ça fonctionne :?
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.