begin process at 2012 02 12 19:22:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > GÉNÉRATION/GESTION DE FORMULAIRE VIA FICHIER XML

GÉNÉRATION/GESTION DE FORMULAIRE VIA FICHIER XML


 Information sur la source

Note :
6,67 / 10 - par 3 personnes
6,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :formulaire, xml, php5, form, mysql Niveau :Initié Date de création :03/01/2009 Date de mise à jour :07/01/2009 20:23:50 Vu :9 206

Auteur : Garno

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
!! LE ZIP EST DANS LE PREMIER COMMENTAIRE !!

Gestion automatique simple de formulaire via un fichier XML. Elle permet de ne pas se casser la tête avec les vérifications multiple qui servent a valider un formulaire. Il suffit d'ajouter les restrictions nécessaires a un champ pour qu'il soit vérifié automatiquement. C'est la première version. Je compte bien la mettre a jour dans peu de temps afin d'y rajouter un lien avec une base de données MySQL et permette de remplir un Combobox. Toute l'information est dans la suite, il y a même un fichier d'exemple dans le zip donc je vous laisse le découvrir.

Le génération du formulaire marche pas section donc dans votre fichier XML vos champs doivent être absolument en une balise <section> et </section>. Vous pouvez ajouter autant de section que vous le voulez, cela permet de mieux présenter votre formulaire en le divisant.

/* MISE A JOUR */
Lien avec la base de données établis. C'est encore basique mais ça permet de remplir un Combobox aisément. Il suffit de mettre la balise suivante :
<values source="TABLE:OPTION_ID:OPTION_VALUE:[WHERE]:[ORDE R]" />

Exemple : <values source="sql_countries:ct_id:ct_name:[*]:[ct_name ASC]" />

[*] est un joker pour TOUS

Source

  • Fichier php "example-with-mysql.php"
  • <?php
  • require_once('lib/ctl.error.php');
  • require_once('lib/xml.form.php');
  • require_once('lib/ctl.mysql.php');
  • try {
  • $ctlMySQL = ctlMySQL::getInstance();
  • $ctlMySQL->connectToDb('YOUR_USERNAME', 'YOUR_PASSWORD', 'YOUR_DATABASE');
  • $xmlForm = new xmlForm('example-with-mysql.xml');
  • if($xmlForm->checkForm())
  • {
  • $e = new myException('Le formulaire est valide, on peut maintenant procéder a l\'enregistrement', 5, '', '');
  • $e->showError();
  • /*
  • Entrez votre les actions nécessaire
  • lorsque le formulaire est valide
  • (Ex : Requête MySQL)
  • */
  • $xmlForm->clearForm(); // Comme la procédure a été complétée on peut effacer le formulaire
  • // afin d'insérer un autre enregistrement.
  • }
  • }
  • catch(myException $e)
  • {
  • $e->showError();
  • }
  • echo $xmlForm->getCode();
  • ?>
  • Fichier XML "example-with-mysql.xml"
  • <form action="" name="test-form" method="POST">
  • <section label="Nouveau membre">
  • <input type="textbox" name="usr_lastname">
  • <label>Nom</label>
  • <restriction>isAlpha</restriction>
  • </input>
  • <input type="textbox" name="usr_firstname">
  • <label>Prénom</label>
  • <restriction>isAlpha</restriction>
  • </input>
  • <input type="textbox" name="usr_courriel">
  • <label>Courriel</label>
  • <restriction>isEmail</restriction>
  • <initialValue>example@domain.com</initialValue>
  • </input>
  • <input type="combobox" name="usr_sex">
  • <label>Sexe</label>
  • <restriction>isNotNull</restriction>
  • <values selected="-">
  • <value id="-">Non spécifié</value>
  • <value id="m">Homme</value>
  • <value id="f">Femme</value>
  • </values>
  • </input>
  • <input type="combobox" name="usr_country">
  • <label>Pays</label>
  • <restriction>isNotNull</restriction>
  • <!--Les 2 derniers paramètres sont entre [] car ils peuvent contenir des espaces,
  • c'est ma convention :P -->
  • <!--TABLE:OPTION_ID:OPTION_VALUE:[WHERE]:[ORDER]-->
  • <values source="sql_countries:ct_id:ct_name:[*]:[ct_name ASC]" />
  • </input>
  • <input type="textarea" name="usr_description">
  • <label>Description</label>
  • <restriction>isNotNull</restriction>
  • </input>
  • <input type="checkbox" name="usr_accept">
  • <label>J'accepte les termes et conditions</label>
  • <restriction>isNotNull</restriction>
  • </input>
  • </section>
  • </form>
  • Le résultat est dans la capture d'écran.
Fichier php "example-with-mysql.php"

<?php
require_once('lib/ctl.error.php');
require_once('lib/xml.form.php');
require_once('lib/ctl.mysql.php');

try {
	$ctlMySQL = ctlMySQL::getInstance();
	$ctlMySQL->connectToDb('YOUR_USERNAME', 'YOUR_PASSWORD', 'YOUR_DATABASE');
	$xmlForm = new xmlForm('example-with-mysql.xml');
	
	if($xmlForm->checkForm())
	{
		$e = new myException('Le formulaire est valide, on peut maintenant procéder a l\'enregistrement', 5, '', '');
		$e->showError();
		
		/*
		Entrez votre les actions nécessaire
		lorsque le formulaire est valide
		
		(Ex : Requête MySQL)
		*/
		
		$xmlForm->clearForm(); 	// Comme la procédure a été complétée on peut effacer le formulaire
								// afin d'insérer un autre enregistrement.
	}
	
	
}
catch(myException $e)
{
	$e->showError();
}

echo $xmlForm->getCode();
?>



Fichier XML "example-with-mysql.xml"

<form action="" name="test-form" method="POST">

	<section label="Nouveau membre">
		<input type="textbox" name="usr_lastname">
			<label>Nom</label>
			<restriction>isAlpha</restriction>
		</input>
		
		<input type="textbox" name="usr_firstname">
			<label>Prénom</label>
			<restriction>isAlpha</restriction>
		</input>
		
		<input type="textbox" name="usr_courriel">
			<label>Courriel</label>
			<restriction>isEmail</restriction>
			<initialValue>example@domain.com</initialValue>
		</input>
		
		<input type="combobox" name="usr_sex">
			<label>Sexe</label>
			<restriction>isNotNull</restriction>
			<values selected="-">
				<value id="-">Non spécifié</value>
				<value id="m">Homme</value>
				<value id="f">Femme</value>
			</values>
		</input>
		
		<input type="combobox" name="usr_country">
			<label>Pays</label>
			<restriction>isNotNull</restriction>
			<!--Les 2 derniers paramètres sont entre [] car ils peuvent contenir des espaces,
				c'est ma convention :P -->
			<!--TABLE:OPTION_ID:OPTION_VALUE:[WHERE]:[ORDER]-->
			<values source="sql_countries:ct_id:ct_name:[*]:[ct_name ASC]" />
		</input>
		
		<input type="textarea" name="usr_description">
			<label>Description</label>
			<restriction>isNotNull</restriction>
		</input>
		
		<input type="checkbox" name="usr_accept">
			<label>J'accepte les termes et conditions</label>
			<restriction>isNotNull</restriction>
		</input>
	</section>

</form>

Le résultat est dans la capture d'écran.

 Conclusion

Les champs disponibles : Textbox, Combobox (ou Select), Textarea et Checkbox.

Les tags disponibles dans le fichier XML :

<name>NOM_DU_CHAMP</name>
Ce tag est indispensable au bon fonctionnement

<label>ETIQUETTE_DU_CHAMP</label>

<restriction>NOM_DE_LA_RESTRICTION</restriction>
Les restrictions disponibles : isAlpha, isNumeric, isOptional, isNotNull, isEmail, etc... (voir formValidator)

<initialValue>VALEUR_INITIALE</ini tialValue>
<class>NOM_DE_LA_CLASS_CSS</class>

Pou r Combobox seulement
<values>
<value id="VALUE_ID">VALUE_TEXT</value>
...
</values>


 Historique

03 janvier 2009 21:09:15 :
Ajout du Zip + Capture puisque ça ne fonctionnait pas lors de l'ajout de la source.
03 janvier 2009 21:14:56 :
Tentative d'ajout du ZIP...
07 janvier 2009 20:13:08 :
Lien avec la base de données établis. C'est encore basique mais ça permet de remplir un Combobox aisément. Toujours impossible de mettre un zip donc regarder dans le premier commentaire pour l'adresse.
07 janvier 2009 20:18:35 :
Nouvelle capture
07 janvier 2009 20:19:06 :
Supression de la capture
07 janvier 2009 20:23:51 :
Nouvelle capture ...

 Sources du même auteur

Source avec Zip Source avec une capture CLASSE DE GRAPHIQUE À BARRES 3D

 Sources de la même categorie

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GÉNÉRATION DE FORMULAIRES HTML PERSONNALISÉS. par beejeridou
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
FORMULAIRE DE RÉCUPÉRATION D'EMAILS par oleiade
Source avec Zip GÉNÉRER UN FORMULAIRE À PARTIR D'UN XML par mjeu
Source avec Zip Source avec une capture [PHP5] CLASSE FORMULAIRE par malalam

Commentaires et avis

Commentaire de Garno le 03/01/2009 21:28:24

Bon .. je ne semble pas pouvoir ajouter de fichier ZIP car je tombe toujours sur une page d'erreur je vais le mettre en lien externe via ma DropBox.

https://dl.getdropbox.com/u/66067/XMLForm.zip

Commentaire de jmlucienvb le 04/01/2009 10:28:41

Ce code m'intéresse et je vais l'essayer - merci
JM

Commentaire de guismo1er le 04/01/2009 22:36:21

Aurais je trouvé un code source enfin intéressant pour la validation des formulaires.

Ca m'a l'air très simple comme utilisation.

tu pourrais rajouter le champ file (upload)/ captchas / enabled-disabled / mot de passe / radio

pour vérification: nombres caractères. vérification quand on retape le mot de passe

Un truc qui serait génial, tu fais une version ajax et ce serait formidable!! :)


voilà mon avis

Commentaire de emilia123 le 05/01/2009 06:06:42

bonjour,

un point qui pourrait être pas mal serait la liaison de votre code avec un template.
Ayant le nom des variables, il devrait être facile de préparer un template style:
<form...>
Nom : ###usr_lastname### <br/>
Prénom: ###usr_firstname### <br/>
</form>

ceci en utilisant l'attribut "name" des noeuds "input" de votre XML.
la fonction objform->getcode('chemin_du_ficher_template') pourrait alors parcourir ce template à la recherche des balises type "###" + nom des inputs + "###" et remplacer par le résultat des getcode ce chaque inputs.
ceci éviterait d'avoir du code de présentation dans votre lib obj.form.php, et de devoir reprendre ce fichier à chaque fois que vous désirez rajouter des éléments dans le HTML généré.

Courage.
EM.

Commentaire de MangaII le 05/01/2009 09:10:45 5/10

Salut !

Plutôt intéressant !
J'ai développé il y a quelques mois un système similaire. Je trouve qu'il manque quelque chose d'important dans ton XML : les actions !
D'expérience, les formulaire servent rarement à afficher leur contenu dans des pages HTML ! la plupart du temps, c'est pour enregistrée en base de donnée ou envoyer des mails.
Du coup, j'ai mis en place des formulaires en étapes (et non en section ...) et pour chaque étape des actions (vérification, enregistrement, mail ...).
J'ai aussi rajouté en plus des vérifications php en ajax (pour les passages à l'étape suivante) une pré vérification en javascript (grace à des regex) ! ça permet de valider instantanément le champ si les données sont valides (vert / rouge).

un exemple de form xml (la syntaxe est pas aussi jolie ... mais c'est plus court) :

<?xml version="1.0" encoding="UTF-8"?>
<formulaire>
<etape num='1'>
<aff type='champ' nom='Nom' champtype='text' oblige='/(.){2,32}/'><label>Nom</label></aff>
<aff type='champ' nom='Mail' champtype='text' oblige='/^[^\s]{2,64}@[^\s]{2,32}\.[^\s]{2,5}$/'><label>Mail</label></aff>
<aff type='champ' nom='Message' champtype='textarea' option='nohtml'><label>Message</label></aff>
<aff type='champ' nom='Date' champtype='hidden' val='sql:NOW()'><label></label></aff>


<action type='db' dest='insert:Commentaires' ><val>Nom,Mail,Message,Date</val></action>
<action type='mail' dest='*****@yahoo.fr' ><val>Mail</val></action>
<action type='goto' dest='2' ></action>

</etape>
<etape num='2'>
<aff type='texte'><txt>Message enregistré</txt></aff>
</etape>
</formulaire>


Pour expliquer, à l'étape 1, j'affiche 4 champs.
Lors de la validation (si tous les champs sont OK), de fait les 3 action : insertion dans la base de donnée (avec les paramêtres), j'envoi le form par mail à l'adresse indiquée, et je vais à l'étape 2 !
A l'étape 2, j'affiche juste le texte "Message enregistré".

L'idée de tout ça, c'est que le formulaire soit vraiment autonome !
Parmis les champs, j'ai donc la possibilité aussi d'afficher du texte (en plus des inputs)

Voilà !
Si ça peut te donner des idées ....

A+
Nico

Commentaire de 5prpali le 05/01/2009 18:29:04 5/10

Il manque lib/ctl.error.php et lib/xml.form.php pour tester correctement.
J'ai développé un FrameWork XSLT pour réaliser la mise en forme à partir d'un fichier formulaire en XHTML/XML. Cela rend l'application moins dépendante du langage (j'ai testé avec PHP, JAVA et NET). Pour les contrôles je préfère le JavaScript, avec éventuellement de l'ajax sur du onBlur à une vérification générale sur un POST.

5prpali

Commentaire de Garno le 05/01/2009 18:54:29

@5prpali : Merci des commentaires, je sais que la source est encore a sa base. La véritable version, (celle que j'utilise dans mes projets) est lié avec un système de template + mysql (pour la récupération automatique des valeurs a afficher dans un Combobox Ex: Liste des utilisateurs). Pour ce qui est des étapes c'est une très bonne idée que je vais mettre en place ! Pour l'affichage de texte c'est aussi un très bon point. En fait j'ai créé cette source pour mes besoins du moment qui n'était peut-être pas aussi demandant que les tiens mais tu me fais penser a beaucoup de chose pour améliorer ma source donc merci ! Je m'y remet ;) Quand tu dis "Il manque lib/ctl.error.php et lib/xml.form.php pour tester correctement." est-ce toujours le cas car je viens de télécharger le fichier .zip et ils sont bel et bien inclus ?

@guismo1er : Je sais qu'il manque certain type de champ car je n'ai pas eu a les utiliser pour le moment donc je ne m'y suis pas attarder. Par contre je vais y travailler. Même chose pour les restrictions sur les champs.

Commentaire de Garno le 05/01/2009 18:59:40

Oups ! Petite erreur de ma part. J'ai cru que l'avatar avec le petit bonhomme vert était tous la même personne donc j'ai adressé ma réponse seulement a une personne en particulier alors qu'elle répondait a 3. Désolé !

Commentaire de mfcbaa le 07/01/2009 08:56:02

Bonjour,

J'ai testé hier soir et ça à l'air pas mal. Je cherche des sources pour gérer des formulaires facile et rapide à metre en place pour la gestion d'une base de données (le mien est encore très incomplet par rapport à ton travail). J'attend la suite comme tu l'annonce, entre autre l'interface avec une base MySQL.

Bon courage.
A+

Commentaire de Garno le 07/01/2009 20:16:01

@MFCBAA : Voila, la mise a jour est faite pour ce qui concerne la gestion d'un Combobox avec MySQL. Je compte rajouté dans la prochaine version une gestion d'évènement. C'est-a-dire que je veux pouvoir changer le contenue d'un combobox lorsqu'un autre est modifier. Par exemple lors de la sélection d'un pays je veux que le combobox "province" se remplisse de toute les provinces du pays choisi.

Si vous avez d'autres commentaires n'hésitez pas !

Commentaire de mfcbaa le 07/01/2009 20:38:59

Merci, je vais regarder.

Pour les idées tu peux aussi gérer des champs date et heure.

A+

Commentaire de mfcbaa le 07/01/2009 20:48:20

Re salut,

Visiblement il manque le fichier 'lib/ctl.mysql.php'

A+

Commentaire de Garno le 07/01/2009 20:55:46

Voila c'est réglé ! Désolé ;)

Commentaire de ludovichi le 08/01/2009 09:40:28

bonjour,
j'ai voulu tester ce script et j'obtiens les erreurs suivantes avec easyphp :(
Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in D:\Site\XMLForm\lib\xml.form.php on line 53
a quoi cela est du ?
merci d'avance car ce script à l'air génial

Commentaire de mfcbaa le 08/01/2009 09:44:51

Bonjour,

J'ai eu egalement plein de PB avec EasyPHP. J'ai installé Xamp et la plus de BP, ou presque ;)

Commentaire de ludovichi le 08/01/2009 10:02:42

ok je vais tester directement sur le serveur alors :) merci

Commentaire de ludovichi le 08/01/2009 10:55:04

je viens de passer la variable allow_call_time_pass_reference  a true dans le php.ini cela fonctionne maintenant ;)
par contre question comment je peux faire afin de faire des formulaires propres en alignant correctement les champs du formulaire ? car je ne maitrise pas trop le css :(

Commentaire de Garno le 08/01/2009 18:37:56

@MFCBAA : Je n'ai pas tester le script sur EasyPHP mais tout semble fonctionner correctement sur un serveur "normal". EasyPHP est selon moi très capricieux. Donc tes problèmes sont réglés ? Sinon envoi moi un message privé je vais tenter de t'aider aux meilleures de mes connaissances.

@LUDOVICHI : Pour aligner correctement le formulaire il faudrait le jumeler a un système de template. Je vais rajouter une fonction getCodeWithTemplate() (ou kkch comme ça) afin de t'aider.

Commentaire de hihi92i le 13/01/2009 17:44:28

Désolé, je ne suis pas initié mais ce code m'interèsse je sais pas si tu as un peu de temps a perdre avec mes questions...

"Le formulaire est valide, on peut maintenant procéder a l\'enregistrement', 5,"
Faut-il déjà avoir une base sql déjà créé pour que ce dernier fonctionne?

En faite j'ai beaucoup de mal à comprendre tes commentaires...
Merci par avance

Commentaire de Garno le 14/01/2009 00:46:57

En fait, cela veut dire que le formulaire est valide et que tu peux exécuter le code que tu veux exécuter lorsque le formulaire est envoyé et valide. Je donnais l'exemple d'une requête SQL mais tu peux faire absolument n'importeq quoi !

N'hésite pas a me poser plus de question soit en privé ou ici !

Bonne soirée

Commentaire de Phoenix le 22/01/2009 11:14:24

C'est difficil sans zip ... ou peut-on le télécharger ?

Merci

Commentaire de aKheNathOn le 06/02/2009 13:50:18 10/10

Je trouve le travail et le script super bien faits. Dommage que cette source soit notée que seulement 5/10.

Up

Commentaire de Seven le 13/07/2009 21:57:45

Merci Garno pour ta source, elle est fort intéressante ! mais je ne comprends pas pourquoi lorsque qu'on fait un foreach du $_POST :

foreach($_POST as $key=>$val) {
    echo $allfields .= $key.'='.$val.'<br>';
}

cela m'affiche des doublons !!!!

Commentaire de safae890 le 18/05/2011 18:33:53

s'il vous plait j'ai besoin de ce même code en asp.net si quelqu'un peut m'aider c'est urgent

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

xml et mysql [ par boin ] salut,je voudrais savoir s'il est possible d'importer un fichier xml vers une base mysql?merci d'avance.B2 champs formulaire <option> avec MySQL [ par pyranhaz ] Est-il possible de faire intervenir la sélection d'un champs &lt;select&gt;&lt;option&gt; dans une table MySQL de manière à retourner une redirection formulaire base de donnée mysql [ par lyes_hh ] bonjour, j'ai créé une base de donnée... j'ai un formulaire qui permet de rentrer un nouvel enregistrement et jouhaite pouvoir modifier ces enregistre un Form dans un Form [ par stailer ] Salut tout le monde !Donc voila mon problème :J'ai un formulaire qui contient notamment un champ et une liste déroulante.Lorsque je valide 1 de ces ch la valeur NULL en mysql [ par dhf ] DHFVotre texte ICI j'ai utlisé un formulaire (php) pour remplir une table de mysql, or lors de la déclaration de la table j'ai précisé que la valeur formulaire de login pour bd(2) [ par Metalpowa ] Avec ce code, il me donne cette erreur: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...\bd1.php4 on line 3 Pb passage PHP4 -> PHP5 [ par Galmiza ] Salut,J'ai acheté un bouquin pour débuter le PHP.J'ai suivi a la lettre les instructions du livre:-installer EasyPHP 1.7-installer PHP 5.0..-lancer Ea 2 boutons submit dans le meme form? [ par LaurentKOogar ] Bonjour et bon début de week end à tous,ptit problème==&gt;ya 1 formulaire avec 1 champt text et dans ce formulaire il faudrait 2 boutons submit1 bout flash+mysql+php+xml=2 galleries d'images et je bloque [ par sniperbe ] salut a tous,comment faire pour obtenir ceci svp ???&lt;?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?&gt;&lt;paquay&gt;&lt;travail photo= Formulaire de modification de données [ par kharm ] Bonjour, Je voudrais réaliser un formulaire de mise à jour qui me permettent de modifier les données existante dans ma base. Voici mon code : &lt;?php


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,961 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales