verification de mon formulaire - PHP - Programmation
Marsh Posté le 15-01-2009 à 14:35:15
Il y a énormément d'erreurs de syntaxe déjà. Genre t'as un input :
Code :
|
Déjà le name doit être entre "", sinon là l'input s'appellera juste libelle (avec un attribut invalide "plainte" ).
Ensuite en PHP tu le récupère via :
Code :
|
Pourquoi maintenant tout-à-coup y'a un é à libelle ? Et pourquoi un _ entre libellé et plainte, alors que dans le input y'en n'a pas ?
Aussi, y'a strictement aucun gestion des erreurs, tu récupères les valeurs sans vérifier qu'elles existent, tu ne vérifies pas non plus si elles sont valides (champs vide, mauvais format, etc.).
Et enfin y'a 20 milliards de requêtes INSERT, ce qui est extrêmement louche, tu n'as quand-même pas une table pour chaque champ ?
Enfin bon, là y'a tellement d'erreurs dans tous les sens, on dirait qu'il te manque les base de chez base. C'est pour l'école j'espère
Marsh Posté le 15-01-2009 à 14:41:27
C'est un peu plus long que ça en a l'air. Faut séparer les couches, refaire complètement le code HTML invalide, revoir la gestion des erreurs, ainsi que toute l'insertion (il faudrait aussi le schéma de base).
Quel est ton niveau ? Tu fais tout ça pour quoi ?
Marsh Posté le 15-01-2009 à 14:47:30
Bonjour,
Est ce que tu pourrais rajouter les balises [ code ] et [/ code ] au début et à la fin du code de chaque page? Ca permettra de rendre ton code lisible plus facilement.
De plus est ce que tu pourrais décrire un peu plus ton problème? Un simple "ça ne marche pas" est trop vague pour qu'on sache de quel côté chercher en premier.
S'il y a des erreurs SQL, donne nous le message (on ne peut pas tout deviner ) Donne nous aussi la structure de la table (ou des tables) que tu utilises.
PS : Vite fait comme ça : révise la syntaxe de la commande SQL "INSERT". Ta façon de l'utiliser me semble suspecte. Là, c'est comme si t'avais une table nommé "concerner", une table nommé "kd", etc et qu'à chaque fois la première colonne de ces tables là reçoit le texte ",".
Marsh Posté le 15-01-2009 à 15:16:56
le blèm est que j'ai fais mon formulaire mais lorsque je saisi les données , elles ne s'enregistrent pas dans la base de donneé. j'utilise easyphp 1.8.
et je dois finir avant lundi. aidez moi svp
Marsh Posté le 15-01-2009 à 15:24:56
svp pourriez vous me donner un coorigé de ce formulaire, juste les lignes a corriger.
merci
Marsh Posté le 15-01-2009 à 15:26:00
Nan, on ne fait pas le travail à ta place (cf. règle), car là en plus y'a pas mal de trucs à corriger. Faut procéder par étapes.
C'est pour les cours que tu dois faire ça ?
Marsh Posté le 15-01-2009 à 15:37:50
c'est un gros projet mais j'ai des problèmes au niveau de ce formulaire.
aidez moi a resoudre ces difficultés.
donnez moi les lignes a corriger et si possibles les corrections
merci d'avance
Marsh Posté le 15-01-2009 à 15:39:10
Pour la cinquième fois, on ne va pas tout te donner
Y'a exactement *tout* à corriger là Comment se fait-il qu'un simple formulaire comme ça te bloque, si c'est un gros projet ?
Marsh Posté le 15-01-2009 à 15:41:59
Tu l'as voulus, les trucs à corriger sont en gras, les trucs super suspect sont en italique souligné.
lucien1988 a écrit : slt. j'ai vraiment besoin de votre aide. |
+ les vérification des données, la sécurité des requêtes, etc
A noter que le "if(isset($_POST['save']))" est à refaire par ce que si je valide le formulaire avec la touche entré, je ne le valide pas en cliquant sur le bouton et cette donnée n'est donc pas envoyé.
PS : Le bloc gras du bas, c'est juste que c'est tellement suspect que je suis certain à 110% que c'est complètement faux.
PS2 : Comme tu peux voir il y a si peu de truc juste que tu ferais mieux de repartir d'un fichier vierge et de bien suivre les tutoriels sur le SQL et sur PHP.
Marsh Posté le 15-01-2009 à 15:42:40
nous avons diviser le projet et moi je dois m'occuper de ce formulaire. voyez pourquoi je sollicite votre aide. on doit les rassenbler d'ici lundi.
aidez moi
Marsh Posté le 15-01-2009 à 15:44:41
Heu ... t'aider plus que ça, c'est te donner la réponse.
Bosse un peu, il te reste plus de 72h.
Marsh Posté le 15-01-2009 à 15:48:01
ok mais pourriez vous me faire une grace, celle de me donner le juste syntaxe pour ce formulaire
Marsh Posté le 15-01-2009 à 15:51:10
voici ma nouvelle syntaxe:
<?php
mysql_connect("localhost","root","" );
mysql_select_db("ultra" );
?>
<html>
<head><title>formulaire.php </title></head>
<body bgcolor=#cococo text = black>
<form method="post" action="formulaire.php">
<pre>
<h3>FORMULAIRE DE GESTION DES PLAINTES</h3>
ID PLAINTE:<input type name="id plainte">
SEMAINE:<input type="text" name="semaine">
DATE:<input type="text" name="date"> ex:JJ/MM/AAAA
KD:<input type="tex"t name="kd">
NOM IMPLEMENTEUR:<input type="text" name="nom implementeur">
libelle plainte:<input type="text" name="libellé_ plainte">
type_plainte:<input type="text" name="libellé_ plainte">
action:<input type="text" name="action">
statut<select name="statut1">
<?php
$sql=mysql_query("select * from statut" );
while($val=mysql_fetch_array($sql))
{
echo " <option>$val[1]</option>";
echo " <option>$val[2]</option>";
}
?>
<input type="submit" value= "ENREGISTRER" name="save">
</form>
<?php
if(isset($_POST['save']))
{
mysql_query("insert into facture values('','$_POST[nom]','$_POST[prénom]','$_POST[email]')" );
}
$mysql_serveur = "localhost";
$mysql_pseudo = "root";
$mysql_pass = "";
$mysql_bdd = "ultra";
$connexion = mysql_connect($mysql_serveur,$mysql_pseudo,$mysql_pass) or die('<p>Erreur de connexion à la base de données</p>');
mysql_select_db("ultra" );
$a=$_POST['id_plainte'];
$b=$_POST['semaine'];
$c=$_POST['nom_kd'];
$d=$_POST['date_appel'];
$e=$_POST['nom_implementeur'];
$f=$_POST['libellé_plainte'];
$g=$_POST['libellé_statut'];
$h=$_POST['libellé_type_plainte'];
$i=$_POST['libellé_action'];
$requete="INSERT INTO `plainte` VALUES ('".$a."', '".$f."');";
$requete1="INSERT INTO `concerner` VALUES ('','', '', '$b');";
$requete2="INSERT INTO `kd` VALUES ('','".$c."' );";
$requete3="INSERT INTO `implementeur` VALUES ('','".$e."');";
$requete4="INSERT INTO `statut` VALUES ('','".$g."');";
$requete5="INSERT INTO `action` VALUES ('','".$i."');";
$requete6="INSERT INTO `adresser` VALUES ('','', '".$d."');";
$requete7="INSERT INTO `type_plainte` VALUES ('','".$h."');";
$result=mysql_query($requete) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete" );
$result1=mysql_query($requete1) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete1" );
$result2=mysql_query($requete2) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete2" );
$result3=mysql_query($requete3) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete3" );
$result4=mysql_query($requete4) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete4" );
$result5=mysql_query($requete5) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete5" );
$result6=mysql_query($requete6) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete6" );
$result7=mysql_query($requete7) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete7" );
mysql_close();
?>
</body>
</html>
verifiez la svp
Marsh Posté le 15-01-2009 à 15:54:47
voici le message qui s'affiche:
Notice: Undefined index: id_plainte in c:\program files\easyphp1-8\www\ultra\copie de formulaire.php on line 70
Notice: Undefined index: semaine in c:\program files\easyphp1-8\www\ultra\copie de formulaire.php on line 71
Notice: Undefined index: nom_kd in c:\program files\easyphp1-8\www\ultra\copie de formulaire.php on line 72
Notice: Undefined index: date_appel in c:\program files\easyphp1-8\www\ultra\copie de formulaire.php on line 73
Notice: Undefined index: nom_implementeur in c:\program files\easyphp1-8\www\ultra\copie de formulaire.php on line 74
Notice: Undefined index: libellé_plainte in c:\program files\easyphp1-8\www\ultra\copie de formulaire.php on line 75
Notice: Undefined index: libellé_statut in c:\program files\easyphp1-8\www\ultra\copie de formulaire.php on line 76
Notice: Undefined index: libellé_type_plainte in c:\program files\easyphp1-8\www\ultra\copie de formulaire.php on line 77
Notice: Undefined index: libellé_action in c:\program files\easyphp1-8\www\ultra\copie de formulaire.php on line 78
Erreur SQL : Erreur de syntaxe près de ''plainte' VALUES ('', '')' à la ligne 1INSERT INTO 'plainte' VALUES ('', '');
Marsh Posté le 15-01-2009 à 15:56:45
Normal, tu récupères des données dans $_POST et t'essayes de les insérer, alors que t'es à la phase "affichage du formulaire." Faut pas mélanger code PHP comme ça et code HTML.
Marsh Posté le 15-01-2009 à 16:01:36
Avant toute chose, juste par curiosité :
Tu fais quoi comme études ?
Tu as eu combien de temps pour faire ça ?
Sinon, les points les plus importants :
1. Essaye de conserver le même nom pour une même variable, ça aide !
Mauvais :
Code :
|
(Accessoirement, évite les $a, ce n'est pas parlant. Utilise des noms de variables significatifs)
2.
Code :
|
Soit tu ne sais pas faire une requête d'insertion, soit la Base de Données a été construite n'importe comment (soit les deux )
3. Histoire de te simplifier un peu les choses, je te conseillerais de séparer le formulaire du traitement, un fichier pour chaque opération...
Marsh Posté le 15-01-2009 à 16:02:12
Pour faire simple, tu peux enfermer tout ça dans un test si le formulaire est affiché ou envoyé :
Code :
|
Marsh Posté le 15-01-2009 à 16:02:48
Petit bémol par rapport à la dernière remarque de FlorentG : quand on mélange code php et code html comme ça, on se débrouille pour que tout le code php qui traite les données soit dans un "if" qui vérifie que des données sont envoyés.
EDIT : Par rapport à l'avant dernière.
Marsh Posté le 15-01-2009 à 16:18:17
peux tu me donner une vraie syntaxe pour tester si le formulaire est envoyé ou affiché
Marsh Posté le 15-01-2009 à 16:19:05
lucien1988 a écrit : peux tu me donner une vraie syntaxe pour tester si le formulaire est envoyé ou affiché |
Es-tu solvable ?
Marsh Posté le 15-01-2009 à 16:21:52
lucien1988 a écrit : peux tu me donner une vraie syntaxe pour tester si le formulaire est envoyé ou affiché |
?
Par rapport à ça, je serais à ta place je ne m'embêterais pas :
Un fichier formulaire.php qui contient le formulaire.
Le formulaire pointe vers un fichier validation.php
Dans validation.php tu fais les vérifications et tes requêtes SQL. Et tu rediriges en fonction du résultat (vers une page d'erreur ou vers une page qui dit que le formulaire est bien enregistré).
Basique, mais efficace...
Marsh Posté le 15-01-2009 à 16:23:16
Il faudrait aussi le schéma de la base pour vérifier la cohérence du code SQL
(et accessoirement rigoler un coup)
Marsh Posté le 15-01-2009 à 16:32:35
A mon avis (de mon simple avis d'amatrice en php) tu devrais faire 3 pages :
Une page pour le formulaire
Une page de récupération et de vérification des données
Une page de modification (genre addslashes ou htmlspecialchars) et d'insertion dans la bdd
Surement modifier ta bdd (qui doit avoir une tête hallucinante lol)
Enfin c'est comme ça que j'attaquerais ce probleme, car là tu veux tout mettre dans une page (ce qui serait éventuellement possible avec des includes)
J'avoue que je serais curieuse de savoir quel est ton niveau d'étude, car même n'étant pas en informatique (je suis en psychologie... oui je sais...) lorsque j'ai commencé à faire des formulaires, j'ai pris un bouquin de html et c'était plutot bien expliqué dedans...
edit : mais pourquoi à chaque fois que je poste une réponse, quelqu'un répond plus vite que moi lol (OSEF je sais...)
Marsh Posté le 15-01-2009 à 16:36:41
ok peux tu me donner des exemples de code pour remedier a ce problème?
Marsh Posté le 15-01-2009 à 16:47:21
Déjà, personnellement je met les identifiants pour se connecter à la bdd dans une page à part, ça m'évite d'avoir à disséminer mes identifiants sur toutes mes pages php, tu includes cette page identifiant pour te connecter à la bdd
Après, je reverrai sérieusement la table que tu as crée... car bon, ça fait 10 autres personnes qui te l'ont déjà dit, mais on ne pige pas bien ta table...
Je ne sais pas quelle tête a ton formulaire mais je suppose que les champs doivent se suivre à la queue leu leu... Je ne sais pas si c'est très ergonomique, même pour quelqu'un de bien portant lol
En gros, l'idée générale c'est :
Page 1 : par exemple : formulaire.php
<form>
<table>
<tr>
<td><input></td>
</tr>
</table>
</form>
Page 2 : valideformulaire.php
$jerecuperelesvariablesduformulaire = $_POST['nomdeschampsdansleformulaire'];
Dans cette page je vérifie les mots de passe par exemple
Je vérifie si le mail a bien un @ et un .
etc....
Sinon je renvoie faux et mettant un message explicatif
Si tout est bon j'envoie par la méthode post mais en hidden
Page 3 : insertion.php
je récupère encore par la méthode post
Je rajoute les addslashes et htmlspecialchars pour éviter le piratage
je peux transformer le mot de passe en md5 (par exemple)
et je vais ma requete mysql INSERT INTO
Je met un message comme quoi tout s'est bien passé
En gros ce que je fais quand je met un formulaire, ça vaut ce que ça vaut, mais ça marche et c'est suffisant pour faire un petit site perso
Après je ne donnerai pas de code, car c'est ton boulot, et ce n'est pas les tuto qui manque sur internet, de plus tu n'es pas clair dans ton probleme et ça se voit que tu n'as pas beaucoup recherché.... car les problemes avec formulaire et réponse sur le web, ce n'est pas ce qui manque
Marsh Posté le 15-01-2009 à 16:51:02
"d'accord, tu peux me mettre la solution stp"
Marsh Posté le 15-01-2009 à 16:51:12
FlorentG a écrit : Pourquoi maintenant tout-à-coup y'a un é à libelle ? Et pourquoi un _ entre libellé et plainte, alors que dans le input y'en n'a pas ? |
FlorentG a écrit : (il faudrait aussi le schéma de base). |
omega2 a écrit : Bonjour, |
macgawel a écrit : Avant toute chose, juste par curiosité : |
Merci de répondre aux questions
Et essaie de faire des efforts, et d'appliquer les conseils qu'on te donne :
Tout le monde te dit qu'il y a une incohérence entre
<input type name="id plainte"> et $a=$_POST['id_plainte'];
(et c'est valable pour les autres input)
Pourpuoi tu n'as pas corrigé au moins ça dans ta version 2 ?
Marsh Posté le 15-01-2009 à 17:01:19
En faite en réalité je n'utilise que 2 pages, j'include la 3 dans la 2 ça m'évite de post en hidden je met un if bien sur
Marsh Posté le 15-01-2009 à 18:22:01
Bon je serais toi, lucien1988, je recommencerais de zéro en suivant toutes les recommandations qui t'ont été données.
Marsh Posté le 15-01-2009 à 14:29:45
slt. j'ai vraiment besoin de votre aide.
je developpe une application mais j'ai un formulaire qui ne marche pas.
je vous envoie la syntaxe afin que vous essayez de détecter les erreurs possibles
la voila:
<?php
mysql_connect("localhost","root","" );
mysql_select_db("ultra" );
?>
<html>
<head><title>formulaire.php </title></head>
<body bgcolor=#cococo text = black>
<form method=post action="formulaire.php">
<pre>
<h3>FORMULAIRE DE GESTION DES PLAINTES</h3>
ID PLAINTE:<input type=text name=id plainte>
SEMAINE:<input type=text name=semaine>
DATE:<input type=text name=date> ex:JJ/MM/AAAA
KD:<input type=text name=kd>
NOM IMPLEMENTEUR:<input type=text name=nom implementeur>
libelle plainte:<input type=text name=libelle plainte>
type_plainte:<input type=text name=libelle plainte>
action:<input type=text name=action>
statut<select name=statut1>
<?php
$sql=mysql_query("select * from statut" );
while($val=mysql_fetch_array($sql))
{
echo " <option>$val[1]</option>";
echo " <option>$val[2]</option>";
}
?>
<input type=submit value= ENREGISTRER name=save>
</form>
<?php
if(isset($_POST['save']))
{
mysql_query("insert into facture values('','$_POST[nom]','$_POST[prénom]','$_POST[email]')" );
}
$mysql_serveur = "localhost";
$mysql_pseudo = "root";
$mysql_pass = "";
$mysql_bdd = "ultra";
$connexion = mysql_connect($mysql_serveur,$mysql_pseudo,$mysql_pass) or die('<p>Erreur de connexion à la base de données</p>');
mysql_select_db("ultra" );
$a= $_POST['id_plainte'];
$b = $_POST['semaine'];
$c = $_POST['nom_kd'];
$d = $_POST['date_appel'];
$e = $_POST['nom_implementeur'];
$f = $_POST['libellé_plainte'];
$g= $_POST['libellé_statut'];
$h = $_POST['libellé_type_plainte'];
$i = $_POST['libellé_action'];
$requete="INSERT INTO `plainte` VALUES ('".$a."', '".$f."');";
$requete1="INSERT INTO `concerner` VALUES ('','', '', '$b');";
$requete2="INSERT INTO `kd` VALUES ('','".$c."' );";
$requete3="INSERT INTO `implementeur` VALUES ('','".e."');";
$requete4="INSERT INTO `statut` VALUES ('','".$g."');";
$requete5="INSERT INTO `action` VALUES ('','".$i."');";
$requete6="INSERT INTO `adresser` VALUES ('','', '".$d."');";
$requete7="INSERT INTO `type_plainte` VALUES ('','".$h."');";
$result=mysql_query($requete) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete" );
$result1=mysql_query($requete1) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete1" );
$result2=mysql_query($requete2) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete2" );
$result3=mysql_query($requete3) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete3" );
$result4=mysql_query($requete4) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete4" );
$result5=mysql_query($requete5) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete5" );
$result6=mysql_query($requete6) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete6" );
$result7=mysql_query($requete7) or die("Erreur SQL : <b>".mysql_error()."</b><br/>$requete7" );
mysql_close();
?>
</body>
</html>
aidez moi svp
merci