Enrengistrer plusieurs élements!

Résolu/Fermé
Pacificicatrice Messages postés 5 Date d'inscription samedi 7 décembre 2013 Statut Membre Dernière intervention 18 janvier 2016 - 8 déc. 2013 à 22:23
Pacificicatrice Messages postés 5 Date d'inscription samedi 7 décembre 2013 Statut Membre Dernière intervention 18 janvier 2016 - 9 déc. 2013 à 13:44
Bonjour, bonjour!

Je souhaiterai, dans un formulaire, enrengistrer plusieurs informations dans ma base de données. J'y arrive avec un, mais pas avec plusieurs... Je pense à une erreur de syntaxe.

Voici mes bouts de codes:

$sql="INSERT INTO users
(name)
VALUES
('".addslashes($_POST['name'])."')";



$result=mysql_query($sql);

if(!$result){
die('Erreur dans la requête: '.mysql_error);
}

Je souhaiterai y rajouter d'autres champs ( email, etc...).

Mon (petit) formulaire est le suivant:

echo '<form id="form_name" enctype="multipart/form-data" method="post" action="conf_form.php">
<label for="name">Pseudo </label>
<input type="text" id="name" name="name" value="" />
<br/>
<p><input type="submit" value="Envoyer!" /> </p><br/>

Si quelqu'un aurait un bout de piste ce serait génial!

Bien à vous,

La folle Paci.

PS: Je confirme que les élements "name" s'inscrivent bien automatiquement dans ma base de données.

2 réponses

Salu salu,
je comprends pas trop la question.
Vous avez un formulaire avec un seul champ "name"(attention à la confusion avec vos noms qui sont pas clair). Donc forcément en POST vous n'aurez que cette valeur.

Que ce soit pour obtenir des valeurs d'un formulaire si vous en voulez plusieurs il faut plusieurs champs de saisie(input),
Entrez votre nom:
Entrez votre prénom:
[Valider]

Lors de la récupération de vos variables en PHP il faut donc en récupérer 2 aussi

Et pour la requête sql il faudra en envoyer 2 avec l'instruction insert et non une comme vous le faites.
Ici un cours sur le sujet:
http://sqlpro.developpez.com/cours/sqlaz/dml/

Et bien sûr votre base de données doit avoir plusieurs champs différents tels une colonne 'nom' et une colonne 'prenom'.

Le bout de piste me paraît assez évident, vous voulez plusieurs valeurs il faut l'indiquer dans le formulaire:

<input type="text" id="name" name="name" value="" />
Pourquoi un id et un name? vous allez utilisez soit l'un soit l'autre.
Et utilisez la même désignation ça prête à confusion.

<input type="text" name="nom" value="" />
<input type="text" name="prenom" value="" />

C'est déjà plus clair non? d'ailleurs à quoi sert l'attribut value puisque vous le laissez vide? autant l'enlever la valeur que vous voulez est celle rentrée dans le formulaire, encore mieux car plus simple plus efficace et plus rapide à comprendre(le reste est suerflu, inutile et complique les choses):

<input type="text" name="nom" />
<input type="text" name="prenom" />



et donc :
if isset($_POST['nom']) && isset($_POST['prenom']){
//si prenom et nom sont définis en POST on fait cela:
$nom=addslashes($_POST['nom']);/*pourquoi addslashes d'ailleurs? si c'est pour la sécurité ce n'est pas suffisant et vous rajoutez des slashes dans votre base ce qui est inutile*/
$prenom=addslashes($_POST['prenom']);
$sql="INSERT INTO users
(name, prenom)
VALUES (".$nom.",".$prenom);
//ici il vaudrait mieux vérifier que les valeurs soient bien correctes:
/* c'est à dire que ce soit bien des nom et rénom et pas n'importe quoi, sans ça on peut très bien insérer 0123456478979 comme nom ou prénom*/
/*
selon votre base aussi il peut être utile de vérifier aussi que le nom et le prénom n'existe pas déjà pour éviter les doublons
Sans ça votre base peut contenir un nombre infini de Dupont(nom) Jean(prénom) et il sera difficile de différencier l'un de l'autre. Les homonymes existent et le fait que 2 personnes s'appelant pareil(ou une personne s'inscrivant 2 fois) soit possible est simplemnt inconcevable; votre base de données et le programme qui va avec est tout simplement bon à jeter.
*/
$result=mysql_query($sql);

}else{
//une ou les 2 valeurs du formulaire sont manquantes
echo ("vous devez indiquer le nom et le prénom.");
}

Il sembles que le problème c'est que ce que vous faites n'est pas très clair pour vous, revoyez vos bases. Faites les mêmes script basique jusqu'à le maîtrisez parfaitement. De toute de façon ce n'est que ça la programmation : des choses basiques et simple mais qu'il faut connaître parfaitement pour pouvoir les utiliser pour des utilisations plus complexes.
0
Je vous suggérè aussi de virer le enctype="multipart/form-data" qui sert à rien et risque de provoquer une erreur, il concernnes l'envoi de fichiers et noms de valeurs
http://www.w3schools.com/tags/att_form_enctype.asp

<form id="form_name" enctype="multipart/form-data" method="post" action="conf_form.php">

doit être

<form id="form_name" method="post" action="conf_form.php">

en gros votre script ne rime à rien et vous vous contentez de mêler plusieurs choses trouvées au hasard je ne sait où ce qui forcément ne voudra rien dire.
Pas de secret : Apprenez et vous saurez ;)
0
Pacificicatrice Messages postés 5 Date d'inscription samedi 7 décembre 2013 Statut Membre Dernière intervention 18 janvier 2016
9 déc. 2013 à 13:44
Hello!!

Merci pour tes belles réponses détaillées!!

Finalement j'ai réussi via un, $name=$_POST['name'];
$mail=$_POST['mail'];
$sql="INSERT INTO users VALUES ('', '$name', '$mail')";

Niveau fonctionnel, ca fonctionne. Mais j'aimerais suivre tes conseils pour avoir un code pas trop degeulasse quand même, même si ça fonctionne.

Comme tu as pu le voir, addslashes a disparu, que me conseillerais tu pour empêcher les injections etc?

Encore merci de ton temps, c'est top!


Bien à vous,
La folle, Paci.
0