Problème pour déclaration des règles formulaire - PHP - Programmation
Marsh Posté le 13-09-2005 à 09:29:03
1) Je ne vois pas vraiment la difficulté dans ce que tu veux faire...qu'est-ce qui te bloque?
2) Je ne te conseille pas de tout faire sur la même page...amha il vaut mieux toujours avec un script dédié à la validation d'un formulaire, qui une fois son traitement terminé redirige là où on le souhaite.
Marsh Posté le 13-09-2005 à 09:29:08
mc_cut_killer a écrit : je viens de découvrir que l'on pouvait traiter les enregistrements d'un formulaire sur une même page. Après quelques tests je n'ai plus de problèmes. |
C'est ce que tous les débutants font, et c'est ce qu'il ne faut pas faire Vaut mieux splitter en plusieurs pages/scripts : un qui gère l'accès au données (ajout d'un user, modification, suppression, récupération, listage), un qui fait la vérif, et un qui gère l'affichage)
Marsh Posté le 13-09-2005 à 09:37:25
Oauis je sais que c'est pas conseillé, je l'ai fait juste pour cette page. Vu que je me servirais pas trop de ce module je voulais qu'il tienne sur une page.
Mon problème est que je ne sais pas ou placer les règles, j'aimerais que quelqu'un me montre par exemple le resultat avec la règle qui vérifie si les deux mots de passe entré sont les mêmes. Deplus j'aimerais qu'en cas d'érreurs celles-ci soient affiché avec $creation_mess = "erreur ....";
Pour l'instant quand je tente de mettre une règle, par exemple une que je connais pour le format du nom, lors de l'enregistrement celle-ci est ignorée sauf quand j'ai une érreur lol. J'en conclue donc que je la place au mauvais endroit car les nom du type $$*@ sont enregistré.
Marsh Posté le 13-09-2005 à 09:55:32
FlorentG a écrit : C'est ce que tous les débutants font, et c'est ce qu'il ne faut pas faire Vaut mieux splitter en plusieurs pages/scripts : un qui gère l'accès au données (ajout d'un user, modification, suppression, récupération, listage), un qui fait la vérif, et un qui gère l'affichage) |
Bien et comme ça, en cas d'erreur, t'es obligé de renvoyer le navigateur sur la page de remplissage du formulaire.
Moi, j'utilises toujours le même fichier pour afficher le formulaire et vérifier les saisies et j'ai pas de probléme avec ça.
Par contre, c'est vrai qu'il faut toujours faire une redirection aprés que le formulaire ai été validé positivement.
Marsh Posté le 13-09-2005 à 10:00:04
omega2 a écrit : Bien et comme ça, en cas d'erreur, t'es obligé de renvoyer le navigateur sur la page de remplissage du formulaire. |
Je trouve nettement plus simple d'avoir un script dédié à la vérification et au traitement de l'input du formulaire, qui suivant les cas redirige vers la page adéquate...
Marsh Posté le 13-09-2005 à 10:03:22
omega2 a écrit : Bien et comme ça, en cas d'erreur, t'es obligé de renvoyer le navigateur sur la page de remplissage du formulaire. |
Hein ?
omega2 a écrit : Moi, j'utilises toujours le même fichier pour afficher le formulaire et vérifier les saisies et j'ai pas de probléme avec ça. |
Maintenance, zéro. Templates, zéro. Séparation des couches, zéro. Et la liste peut s'allonger
Marsh Posté le 13-09-2005 à 10:06:32
Pour en revenir à mon problème, personne ne peut me montrer l'exemple avec la vérif du mot de passe ? comme ca s'adapterais les autres règles par la suite
Marsh Posté le 13-09-2005 à 10:08:10
FlorentG a écrit : Maintenance, zéro. |
pas d'accord du moins quand on code proprement.
Par contre avec le formulaire et la validation séparé, on ne peut pas :
FlorentG a écrit : Templates, zéro. |
Il dit qu'il voit pas le rapport
FlorentG a écrit : Séparation des couches, zéro. |
Il dit aussi qu'il voit pas le rapport. Les includes et les fonctions, c'est pas pour rioen que ca existe.
FlorentG a écrit : Et la liste peut s'allonger |
Vas y fait moi plaisir, alonge.
Marsh Posté le 13-09-2005 à 10:10:10
mc_cut_killer a écrit : Pour en revenir à mon problème, personne ne peut me montrer l'exemple avec la vérif du mot de passe ? comme ca s'adapterais les autres règles par la suite |
if ($_POST['user_password']==$_POST['user_password_check'])
a toi de le placer comme il faut dans ton code
Marsh Posté le 13-09-2005 à 10:11:49
omega2 a écrit :
|
Nan mais bien-sûr que si !!! Tu dois avoir de grosses lacunes en prog pour dire ça
omega2 a écrit :
|
Nan mais bien sûr que si ! Encore une fois, t'es sûr de savoir développer ?
Va te plonger dans les architectures 3-tiers, ou la design pattern "model view controller", y'a du boulot
Marsh Posté le 13-09-2005 à 10:12:19
Citation : a toi de le placer comme il faut dans ton code |
Mon problème est là justement je ne sais pas où le mettre et comment gèrer mon message d'érreur en cas de mot de passe différent!
Marsh Posté le 13-09-2005 à 10:20:00
FlorentG a écrit : Nan mais bien-sûr que si !!! Tu dois avoir de grosses lacunes en prog pour dire ça |
Qu'est ec qui est le plus propre, avoir deux étape dans un seul fichier ou passer tous les messages d'erreurs d'une page à l'autre?
FlorentG a écrit : Nan mais bien sûr que si ! Encore une fois, t'es sûr de savoir développer ? |
FlorentG a écrit : Va te plonger dans les architectures 3-tiers, ou la design pattern "model view controller", y'a du boulot |
Ha bon? Donc pour toi, ca veut dire une page par mini fonctionalité et faire passer énormément d'info par le navigateur ou les session? Tu trouves ça plus propre comme comportement? Mon dieux mon dieux mon dieux.
Au fait, l'architecture 3 tier, n'a rien à voir avec l'origanisation des traitements dans les pages c'est juste une séparation des données (base de donnée par exemples) des traitements et de l'affichage (navigateur) et le "model view controller" lui non plus n'a rien à voir avec le fait de faire un formulaire dans une page et la vérif dans une seconde ou les deux dans le même script. J'ai l'impression que c'est qui parle sans savoir.
Alors vu que t'entendra jamais raison ho toi grand savant, je laisse tomber cette discution de sourd et je m'en vais m'occuper de chôses plus utile.
Marsh Posté le 13-09-2005 à 10:23:25
Ouais, par ma par à l'issue de cette discution j'en suis au même stade ...
Marsh Posté le 13-09-2005 à 10:25:12
mc_cut_killer a écrit :
|
Il faut que tu le mettes quelque part entre ton "if (isset($_POST["user_name"] ))" vu que c'est quand le formulaire est remplis et l'envoie des données à la base de donnée vu que s'il y a une erreur quelque part, tu ne veux pas envoyer tout ça au navigateur.
et n'oublis pas de mettre les { et } pour définir ce qui sera fait uniquement quand les deux mot de passes sont identique.
Marsh Posté le 13-09-2005 à 10:29:18
Je suis entrain d'essayer mais j'ai des erreurs, par contre comment je ferais pour envoyer le message d'erreur disant que les mot de passe sont identiques ?
Marsh Posté le 13-09-2005 à 10:29:38
omega2 a écrit : Qu'est ec qui est le plus propre, avoir deux étape dans un seul fichier ou passer tous les messages d'erreurs d'une page à l'autre? |
La deuxième Tu peux pas avoir tout en même temps, c'est trop le bordel
omega2 a écrit : Ha bon? Donc pour toi, ca veut dire une page par mini fonctionalité et faire passer énormément d'info par le navigateur ou les session? Tu trouves ça plus propre comme comportement? Mon dieux mon dieux mon dieux. |
Hein ? Mais à aucun moment j'ai ton histoire de session ou quoi que ce soit Oulalala
omega2 a écrit : Au fait, l'architecture 3 tier, n'a rien à voir avec l'origanisation des traitements dans les pages c'est juste une séparation des données (base de donnée par exemples) des traitements et de l'affichage (navigateur) |
Sauf que chez toi, le traitement et l'affichage sont tous dans le même fichier
omega2 a écrit : et le "model view controller" lui non plus n'a rien à voir avec le fait de faire un formulaire dans une page et la vérif dans une seconde ou les deux dans le même script. J'ai l'impression que c'est qui parle sans savoir. |
Bien sûr que si. C'est toi qui a rien compris Si t'as la view et le controller dans le même script, y'a plus aucune séparation Oulalalaaa
Marsh Posté le 13-09-2005 à 10:31:49
Voila ce que j'ai essayé mais sans succès car il vérifie rien :
if (isset($_POST["user_name"] ))
{
if ($_POST['user_password']==$_POST['user_password_check'])
{
$creation_mess = "<strong>test</strong>";
}
$user_name = $_POST["user_name"];
$user_password = $_POST["user_password"];
$user_password_check = $_POST["user_password_check"];
$user_level = $_POST["user_level"];
$user_password_md5 = md5('$_POST[user_password]');
Marsh Posté le 13-09-2005 à 10:36:05
FlorentG a écrit : La deuxième Tu peux pas avoir tout en même temps, c'est trop le bordel |
C'est que tu sais pas t'organiser si dés que t'as deux trois trucs dans un mêem script, c'est le bordel.
FlorentG a écrit : Hein ? Mais à aucun moment j'ai ton histoire de session ou quoi que ce soit Oulalala |
Et tu fais comment? Des includes? Alors c'est un seul et même script. Sans include et pas dans le même fichier? ALors il faut bien que tu fasses passer tes infos d'un fichier à l'autre si tu veux les réafficher.
FlorentG a écrit : Sauf que chez toi, le traitement et l'affichage sont tous dans le même fichier |
A la même adresse web oui, et même si c'est dans le même fichier du disque dur, je conais assez bien la programmation procédurale et la programmation objet pour m'en sortir proprement sans avoir du code bordélique.
FlorentG a écrit : Bien sûr que si. C'est toi qui a rien compris Si t'as la view et le controller dans le même script, y'a plus aucune séparation Oulalalaaa |
T'as une vision des chôses assez bizare tu sais? Tu laisses entendre que tu as pas de session et que t'as pas pleins de données qui passent d'une page à l'autre par le navigateur sans avoir plusieurs trucs accéssibles au même endroit. Et tu veux qu'on arrive à te suivre?
Marsh Posté le 13-09-2005 à 10:38:32
omega2 a écrit : le "model view controller" lui non plus n'a rien à voir avec le fait de faire un formulaire dans une page et la vérif dans une seconde ou les deux dans le même script. |
[edit]
dépend de comment c'est foutu derrière, quand même, hein.
et ne serait-ce que le fait que l'utilisateur peut recharger la page suffit à rendre le traitement d'un formulaire dans le même script mauvais.
Marsh Posté le 13-09-2005 à 10:39:56
omega2 a écrit : Et tu fais comment? Des includes? Alors c'est un seul et même script. Sans include et pas dans le même fichier? ALors il faut bien que tu fasses passer tes infos d'un fichier à l'autre si tu veux les réafficher. |
C'est simple... Tu envoi le formulaire avec pleins de trucs remplis. Puis t'as une fonction, ou une classe, ou quelque chose qui va récupérer tous les champs saisis. Puis vient la vérif. Si ça foire, on lance la fonction d'affichage avec les valeurs précédemment récupérée, je vois pas le problème
Les includes, je suis désolé, c'est pas le même script. Tu pourra changer le script inclus, du coup tu l'as ta séparation... Mais c'est pas comme ça que je procède de toute manière...
omega2 a écrit : T'as une vision des chôses assez bizare tu sais? Tu laisses entendre que tu as pas de session et que t'as pas pleins de données qui passent d'une page à l'autre par le navigateur sans avoir plusieurs trucs accéssibles au même endroit. Et tu veux qu'on arrive à te suivre? |
Une vision bizzarre ? Euh... non... Ca fait 2 semaines que j'étudie la pattern MVC de près, et à chaque fois tout était séparé, on n'avait jamais le traiment et la vue ensembles
Marsh Posté le 13-09-2005 à 10:44:29
bon pour ma part j'y arrive toujours pas
soit j'ai des erreurs soit la vérification ne s'effecute pas.Pourtant ce que je veut faire est simple :
if ($_POST['user_password']!=$_POST['user_password_check']) alors j'affiche que les deux mots de passe sont différents avec $creation_mess = "Mots de passe différents";
Au pire l'enregistrement ce fait dès le chargement de la page et sans le nom utilisateur
Marsh Posté le 13-09-2005 à 10:44:45
FlorentG a écrit : Une vision bizzarre ? Euh... non... Ca fait 2 semaines que j'étudie la pattern MVC de près, et à chaque fois tout était séparé, on n'avait jamais le traiment et la vue ensembles |
Tu peux avoir un objet qui s'occupe de la vue, un qui s'occupe des traitements, et un script qui utilise les 2, quand même, non?
Marsh Posté le 13-09-2005 à 10:45:15
mc_cut_killer a écrit : bon pour ma part j'y arrive toujours pas |
tu as mis ça où? On peut voir ton code?
Marsh Posté le 13-09-2005 à 10:48:28
skeye a écrit : Tu peux avoir un objet qui s'occupe de la vue, un qui s'occupe des traitements, et un script qui utilise les 2, quand même, non? |
Oui : de manière générale, le traitement (couche controller) va opérer sur le modèle (les méthodes qui changent son état genre ajout, modification). Après il va instancier une vue, à laquelle il va filer le modèle. Là la vue va récupérer les données qui lui faut (mais surtout pas changer son état), et va s'afficher...
Marsh Posté le 13-09-2005 à 10:49:04
biensure, voila le code d'où j'en suis dans mes tests :
/* initialisation des données */
$user_name = "" ;
$user_password = "" ;
$user_password_check = "" ;
$user_level = "" ;
if (isset($_POST["user_name"] ))
{
$user_name = $_POST["user_name"];
$user_password = $_POST["user_password"];
$user_password_check = $_POST["user_password_check"];
$user_level = $_POST["user_level"];
$user_password_md5 = md5('$_POST[user_password]');
if ($_POST['user_password']!=$_POST['user_password_check'])
{
$creation_mess = "<strong>mot de passe diff</strong>";
}
/* requette pour la création d'un utilisateur */
$query = "INSERT INTO user (user_name, user_password, user_level, user_regdate)
VALUES ('$user_name', '$user_password_md5', '$user_level', now())";
$result = mysql_query($query)
or die ("Exécution de la requête impossible" );
$contactID = mysql_insert_id();
$creation_mess = "<strong>L'utilisateur $user_name à été ajouté avec succès !</strong>";
}
Marsh Posté le 13-09-2005 à 10:53:30
FlorentG a écrit : Oui : de manière générale, le traitement (couche controller) va opérer sur le modèle (les méthodes qui changent son état genre ajout, modification). Après il va instancier une vue, à laquelle il va filer le modèle. Là la vue va récupérer les données qui lui faut (mais surtout pas changer son état), et va s'afficher... |
ça peut à peu près rentrer dans son cas, ça, non?
'fin bref, de toute manière, F5 et c'est le khäkha, et c'est pas super propre au niveau du code...
Perso je valide mes formulaires dans un script dédié, je mets ce qui va bien en session (y compris d'éventuelles erreurs), et je redirige...c'est ce que j'ai trouvé de plus satisfaisant au niveau fonctionnement et séparation du code.
Marsh Posté le 13-09-2005 à 10:54:16
FlorentG a écrit : C'est simple... Tu envoi le formulaire avec pleins de trucs remplis. Puis t'as une fonction, ou une classe, ou quelque chose qui va récupérer tous les champs saisis. Puis vient la vérif. Si ça foire, on lance la fonction d'affichage avec les valeurs précédemment récupérée, je vois pas le problème |
Et alors en quoi ce que je fais est différents?
Ha ben tiens, j'y pense, c'est exactement ce que je fais depuis le début. Finalement, on c'est juste pas compris.
Marsh Posté le 13-09-2005 à 10:55:08
mc_cut_killer a écrit :
|
Comment tu veux que ça marche, ça?
Tu exécutes la requête quoi qu'il arrive!!
Mets ce qui suit ton if{} dans un else{}, ce sera tout de suite mieux...
Marsh Posté le 13-09-2005 à 10:55:45
omega2 a écrit : Et alors en quoi ce que je fais est différents? |
Ouais c'est possible Aussi, faut reconnaître que MVC est plus un concept qu'une vrai DP, vu que l'implémentation en dessous n'est pas vraiment définie...
Marsh Posté le 13-09-2005 à 10:58:33
LoL c la première fois que je fais ce genre de truc ... j'ai essayé avec des else mais ca marche pas j'doi mal m'y prendre ... enfin j'continue sur cette voie alors
Marsh Posté le 13-09-2005 à 11:00:31
mc_cut_killer a écrit : LoL c la première fois que je fais ce genre de truc ... j'ai essayé avec des else mais ca marche pas j'doi mal m'y prendre ... enfin j'continue sur cette voie alors |
Ton code devrait en gros ressembler à ça:
Code :
|
Marsh Posté le 13-09-2005 à 11:01:25
Bon merci j'y suis arrivé !!!
Par contre ca remet le formulaire au départ sans garder le nom d'utilisateur ...
Marsh Posté le 13-09-2005 à 11:01:49
FlorentG a écrit : Ouais c'est possible Aussi, faut reconnaître que MVC est plus un concept qu'une vrai DP, vu que l'implémentation en dessous n'est pas vraiment définie... |
ben disons qu'essayer de faire du mvc pour un site web, c'est quand même limite tordu vu que de toute maniére, le changement des données sur le serveur ne sera jamais répercuté imédiatement sur le navigateur. Il faut attendre une nouvelle demande de page pour ça.
Par contre, en java, quand on conait assez bien le langage, ca se mari bien avec du MVC.
Mais le top que j'ai jamais pratiqué pour faire de la programmation avec une organisation de type MVC, c'est bien le C++ de beos.
Marsh Posté le 13-09-2005 à 11:02:20
mc_cut_killer a écrit : Bon merci j'y suis arrivé !!! |
La magie en programmation ça n'existe pas...si tu veux qu'il te garde le nom d'utilisateur il faut lui dire de l'afficher.
Marsh Posté le 13-09-2005 à 11:02:57
omega2 a écrit : ben disons qu'essayer de faire du mvc pour un site web, c'est quand même limite tordu vu que de toute maniére, le changement des données sur le serveur ne sera jamais répercuté imédiatement sur le serveur. |
C'est sûr que c'est une implémentation particulière. Lecture très intéressante
Marsh Posté le 13-09-2005 à 11:03:15
omega2 a écrit : le C++ de beos. |
Il avait quoi de différent du C++ tout court?
Marsh Posté le 13-09-2005 à 11:05:23
Citation : La magie en programmation ça n'existe pas... |
je m'en doute bien, si j'ai fait ca sur une page c'est que j'avais lu que les valeurs du formulaire serait gardé car sinon je sais pas faire
Par conséquent on lui dit comment de l'afficher ?
Marsh Posté le 13-09-2005 à 11:07:01
Sous Beos, les composants visuels fonctionnent dans une ou plusieurs threads dédiés à l'affichage de l'application. Et toute l'intéraction avec l'utilisateur passe par des "messages" intercepté par l'application. Donc même sans le savoir sous Beos, on fait directement de la programmation avec organisation en MVC.
Le revers de la médaille, c'est que ca complique le portage d'aplications graphique depuis d'autres OS.
Marsh Posté le 13-09-2005 à 11:08:25
mc_cut_killer a écrit : je m'en doute bien, si j'ai fait ca sur une page c'est que j'avais lu que les valeurs du formulaire serait gardé car sinon je sais pas faire |
Ce serait peut-être une bonne idée de lire un peu de tutos php, parce-que ce sont vraiment des opérations de base que tu essaies de faire là...et on ne va pas tout faire à ta place.
Marsh Posté le 13-09-2005 à 09:21:04
Bonjour,
je viens de découvrir que l'on pouvait traiter les enregistrements d'un formulaire sur une même page. Après quelques tests je n'ai plus de problèmes. En revanche je n'arrive pas à déclarer mes règles. Voici le code :
/* chargement informations de la bd + connection */
include ("ressources/bdd.php" );
$connection = mysql_connect($host, $user, $password)
or die ("Impossible de se connecter à la base de donnée!" );
$db = mysql_select_db($database, $connection)
or die ("Impossible de se connecter à la base de donnée!" );
/* initialisation des données */
$user_name = "" ;
$user_password = "" ;
$user_password_check = "" ;
$user_level = "" ;
if (isset($_POST["user_name"] ))
{
$user_name = $_POST["user_name"];
$user_password = $_POST["user_password"];
$user_password_check = $_POST["user_password_check"];
$user_level = $_POST["user_level"];
$user_password_md5 = md5('$_POST[user_password]');
/* requette pour la création d'un utilisateur */
$query = "INSERT INTO user (user_name, user_password, user_level, user_regdate)
VALUES ('$user_name', '$user_password_md5', '$user_level', now())";
$result = mysql_query($query)
or die ("Exécution de la requête impossible" );
$contactID = mysql_insert_id();
$creation_mess = "<strong>L'utilisateur $user_name à été ajouté avec succès !</strong>";
}
?>
... mon formulaire en html ...
J'arrive juste à vérifier qu'un nom d'utilisateur est entré pour envoyer les informations à la bd. Je voudrais aussi ajouter une règle pour vérifier que les deux mots de passe entré sont identiques : user_password == user_password_check. Mais je ne sais pas ou la mettre, ni comment l'écrire.
J'voudrais aussi pouvoir controler le format du nom ect ... et qu'en cas d'erreurs $creation_mess soit utilisé pour afficher l'erreur. Pour le reste je dispose des règle que j'applique en utilisant deux pages, il me faudrais juste savori comment les écrire.
Merci d'avance !