begin process at 2012 05 27 19:46:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaires

 > CRÉER UN FORMULAIRE À PARTIR D'UNE REQUETE SQL

CRÉER UN FORMULAIRE À PARTIR D'UNE REQUETE SQL


 Information sur la source

Note :
7 / 10 - par 2 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Formulaires Classé sous :requete, sql, donne, un, formulaire Niveau :Débutant Date de création :03/01/2006 Vu :17 023

Auteur : ranouf

Ecrire un message privé
Site perso
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Dans la continuité de la création de mon site j'ai été amené à développé cette fonction permettant de créer un formulaire à partir d'une requete SQL




Source

  • //--- Affiche une requete SQL
  • function AfficherFormulaire($sql,$nbChampsEnMoins=0, $TailleMax=0){
  • $rst = mysql_query($sql);
  • if (!$rst){
  • echo "Erreur :" . mysql_error() . "<br>";
  • }else{
  • //--- Nombre d'enregistrements
  • $nbLig = mysql_num_rows($rst);
  • //--- Nombre de colonnes
  • $nbCol = mysql_num_fields($rst) - $nbChampsEnMoins;
  • //--- Début du tableau
  • echo '<table width="100%" cellpadding="0" cellspacing="0">';
  • //--- Affichage noms des colonnes
  • $i = 0;
  • echo '<tr>';
  • for ($j = 0; $j < $nbCol; $j++)
  • {
  • $type = mysql_field_type($rst, $j);
  • $name = mysql_field_name($rst, $j);
  • $len = mysql_field_len($rst, $j);
  • $flags = mysql_field_flags($rst, $j);
  • //--- Zone de texte
  • if ($type == 'string' && $len > 1){
  • echo '<tr>';
  • echo ' <td width="30%">'. $name . ' :';
  • if ($flags == 'not_null') echo '*';
  • echo ' </td>';
  • echo ' <td>';
  • echo ' <input type="text" name="'. $name . '"';
  • echo ' value="' . $_POST[$name] . '"';
  • echo ' maxlength="' . $len . '"';
  • if ($len > $TailleMax){
  • echo ' size="' . $TailleMax . '"></td>';
  • }else{
  • echo ' size="' . $len . '"></td>';
  • }
  • echo ' <td width="20%"></td>';
  • echo '</tr>';
  • //--- Case à cocher
  • }elseif ($type == 'int' && $len == 1){
  • echo '<tr>';
  • echo ' <td width="30%">'. $name . ' :</td>';
  • echo ' <td>';
  • echo ' <input type="checkbox" name="'. $name . '"';
  • echo ' value="1"';
  • if ($_POST[$name] == '1'){
  • echo ' checked';
  • }
  • echo ' class="checkbox"></td>';
  • echo ' <td width="20%"></td>';
  • echo '</tr>';
  • //--- Zone de texte numérique
  • }elseif ($type == 'int'){
  • echo '<tr>';
  • echo ' <td width="30%">'. $name . ' :';
  • if ($flags == 'not_null') echo '*';
  • echo ' </td>';
  • echo ' <td>';
  • echo ' <input type="text" name="'. $name . '"';
  • echo ' value="' . $_POST[$name] . '"';
  • echo ' maxlength="' . $len . '"';
  • if ($len > $TailleMax){
  • echo ' size="' . $TailleMax . '"></td>';
  • }else{
  • echo ' size="' . $len . '" onChange="if (isNaN(this.value)) this.value = \'\' ;"></td>';
  • }
  • echo ' <td width="20%"></td>';
  • echo '</tr>';
  • //--- Case à cocher
  • }
  • }
  • echo '</tr>';
  • //--- Fin du tableau
  • echo '</table>';
  • }
  • }
//--- Affiche une requete SQL 
function AfficherFormulaire($sql,$nbChampsEnMoins=0, $TailleMax=0){
	
	$rst = mysql_query($sql);
	
	if (!$rst){
	   echo "Erreur :" . mysql_error() . "<br>";
	   
	}else{	
		//--- Nombre d'enregistrements	
		$nbLig = mysql_num_rows($rst);
		
		//--- Nombre de colonnes			
		$nbCol = mysql_num_fields($rst) - $nbChampsEnMoins;
		
		//--- Début du tableau
		echo '<table width="100%" cellpadding="0" cellspacing="0">';
		
		//--- Affichage noms des colonnes
		$i = 0;
		echo '<tr>';
		for ($j = 0; $j < $nbCol; $j++)
		{ 
		   	$type  = mysql_field_type($rst, $j);
		   	$name  = mysql_field_name($rst, $j);
		   	$len  = mysql_field_len($rst, $j);
	  		$flags = mysql_field_flags($rst, $j);

			//--- Zone de texte
			if ($type == 'string' && $len > 1){
				echo '<tr>';
				echo '	<td width="30%">'. $name . ' :';
				if ($flags == 'not_null') echo '*';
				echo '	</td>';
				echo '	<td>';
				echo '		<input type="text" name="'. $name . '"';
				echo '			value="' . $_POST[$name] . '"';
				echo '			maxlength="' . $len . '"';
				if ($len > $TailleMax){
					echo '			size="' . $TailleMax . '"></td>';
				}else{
					echo '			size="' . $len . '"></td>';
				}
				echo '	<td width="20%"></td>';
				echo '</tr>';
				
			//--- Case à cocher
			}elseif ($type == 'int' && $len == 1){
				echo '<tr>';
				echo '	<td width="30%">'. $name . ' :</td>';
				echo '	<td>';
				echo '		<input type="checkbox" name="'. $name . '"';
				echo '			value="1"';
				if ($_POST[$name] == '1'){
					echo '			checked';
				}
				echo '	class="checkbox"></td>';
				echo '	<td width="20%"></td>';
				echo '</tr>';
				
			//--- Zone de texte numérique
			}elseif ($type == 'int'){
				echo '<tr>';
				echo '	<td width="30%">'. $name . ' :';
				if ($flags == 'not_null') echo '*';
				echo '	</td>';
				echo '	<td>';
				echo '		<input type="text" name="'. $name . '"';
				echo '			value="' . $_POST[$name] . '"';
				echo '			maxlength="' . $len . '"';
				if ($len > $TailleMax){
					echo ' size="' . $TailleMax . '"></td>';
				}else{
					echo ' size="' . $len . '" onChange="if (isNaN(this.value)) this.value = \'\' ;"></td>';
				}
				echo '	<td width="20%"></td>';
				echo '</tr>';
				
			//--- Case à cocher
			}
		}
		echo '</tr>';

		//--- Fin du tableau
		echo '</table>';
	}
}

 Conclusion

paramètres :

$sql = la chaine de requete
$nbChampsEnMoins - Si dans notre requete on ne souhaite pas afficher les $nbChampsEnMoins derniers champs
$TailleMax = Taille maximum autorisé pour les zones de texte

informations complémentaires:
les champs de type string crée de zone de texte
les champs de type int et de longueur 1 sont considérés comme des case à cocher (soit 0 soit 1)
Les champs de type int de longueur supérieure à 1 sont des zones numériques, si la valeur n'est pas saisi correctement elle est automatiquement effacée

les champs not_null sont suivi d'un * signifiant obligatoire


 Sources du même auteur

Source avec Zip PHP5 MY EXPLORER : AFFICHE L'ARBORESCENCE DE DOSSIERS
FONCTION LISTANT UNE REQUÊTE SQL

 Sources de la même categorie

Source avec Zip Source avec une capture VALIDATEUR DE FORMULAIRE par Reldan
Source avec Zip SUIVI SERVICE CLIENT PHP par hige52
Source avec Zip POO - FORMULAIRE NEWSLETTER PHP - PROFESSEUR-PHP.COM par mtrix000
Source avec Zip Source avec une capture SELECTEUR DE NOTE par Reldan
Source avec Zip Source avec une capture ESPACE MEMBRE , AVEC CASE OPTIONNEL , SANS MYSQL par sartoz

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture VALIDATEUR DE FORMULAIRE par Reldan
Source avec Zip FORMULAIRE D'INSCRIPTION par lelioua
Source avec Zip SUIVI SERVICE CLIENT PHP par hige52
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42
FONCTION LISTANT UNE REQUÊTE SQL par ranouf

Commentaires et avis

Commentaire de galadriann le 04/01/2006 10:23:48

Au lieu de mettre ton $nbChampsEnMoins, pourquoi ne pas plutot compter les champs retourner par ta requete ?  ou alors passer les champs a afficher dans un array :

function AfficherFormulaire($sql,$Champs)

Ainsi tu pourrais meme ajouter la taille des champs directement dans l'array en passant le nom du champs comme cle et la taille comme valeur ( champs=> 10, champs2=>20, ...)

Ce serait aussi bien de faire un fonction d'abstration de base de donnees dans ton code.  Si on passe sur Posgrep, il faut tout changer ...

Sinon un exemple serait interessant ...

Je vais essayer de tester ...

je note apres ...

a+

Commentaire de ranouf le 04/01/2006 10:41:37

Par contre j'ai pas encore géré la textarea, ça sera dans la prochaine version !!!

un petit exemple de la table :

$sql = '';
$sql .= ' SELECT Page, Titre, Afficher, Position, Description, Keywords';
$sql .= ' FROM Menu';
$sql .= ' Where 1=2'; // Renvoie une requete vide donc moins de ressources utilisées !
AfficherFormulaire ($sql, 0, 30);

Ensuite, je préfère utilisé en nombre de champs en moins mais si tu veux l'adpater pour qu'elle gere une liste de champs acceptés (ou non acceptés) tu peux reprendre mon code et poser un nouvelle source, il n'y a pas de pb !:-)

Concernant la taille, en fait j'ai une taille maximale du champs a respecter pour éviter que mes cadres soient élargis. Si la taille du champs est inférieur à la taille maximale alors il récupere la taille du champs !

Merci pour tes commentaires, j'avais pas pensé à gérer ça dans un array, mais c vrai que ça peut etre une bonne idée.

@+

Commentaire de FhX le 07/01/2006 23:05:01

"Ce serait aussi bien de faire un fonction d'abstration de base de donnees dans ton code.  Si on passe sur Posgrep, il faut tout changer ..." On parle pas de savoir manier SQL la quand même !
Si tu veux une couche d'abstraction, j'en ai fait une : http://www.phpcs.com/code.aspx?ID=33135 . T'as juste à faire une classe étendu avec les fonctions pour pgsql et ca passera tout seul. (écrire quelques bouts de code en plus n'a jamais tué personne :p)
Après, tu modifies un peu sa fonction, et hop. Tu l'as comme ca ton abstraction de BDD ! :)

Cependant, je vais faire un reproche tout bète : utiliser un tableau pour faire un formulaire :o J'aurais préféré un truc à base de CSS mais bon... c'est déja pas mal quand même :)

Commentaire de ranouf le 08/01/2006 16:07:01

Apres il suffit de l'adapter, j'ai fait un truc de base pour que le développeur landa s'y retrouve.

Si d'autres on envie de la faire évoluer, ya pas de pb au contraire ça me fera plaisir de voir sur la source, d'apres la source de ranouf :)

Posgrep je connais pas donc si tu veux t'y mettre pas de pb !


@++

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

sous formulaire à réactualiser [ par niche ] salut à tous,j'ai un problème de réactualisation d'un sous formulaire au sein d'un formulaire.Ce sous formulaire est lié à une requete.Cette requete e Requete suite formulaire [ par tdanet ] Bonjour a tous !J'ai cree un formulaire qui fonctionne bien, mais dans lequel l'utilisateur doit seletionner une valeur dans une liste deroulante (val Execution requete sql apres retour page précédente [ par sylvainmorand ] Bonjour,je rencontre un problème d'exécution de requete SQL avec IE6 / 7 (fonctionne sous FF)L'utilisateur remplit un formulaire, envoi classique en b recuperer une requete sql dans un array [ par stef1589 ] bonjour à tousje souhaiterais récuperer la table "config" d'une requete mysql dans un array:$requete = mysql_query("SELECT * FROM config");mais apres problème requete SQL [ par darkwisk ] Salut à tous,Voilà mon problème....La requete ci-dessous fonctionne parfaitement en local avecEasy Php, mais ne renvoi rien quand elle est en ligne ?? Traitement d'une requete SQL parmis plusieurs [ par M000004965 ] Hello tout le monde,j'ai un tableau issu d'une requete SQL.Je desire trier ce tableau par un simple clic sur une entete de colone mais en fonction de Comparer des dates dans une requete SQL [ par loupile ] Bonjour alors voila, j'ai deux valeurs l'une qui s'appelle $UPDATED qui est formaté ainsi (Y-m-d H:i:s) et je voudrais comparer cette date à une autre POST['sql'] : comment faire pour transmettre une requete [ par billmax ] Bonjour,j ai deux pages : executer_requete.php et traitexecuter_requete.phpsur la premiere page, je met une requete presente dans la base dans unecho Algorithme php ou requete sql ? Probleme de date [ par evenkil ] Bonjour,J'aimerai pouvoir déterminer dans quelle tranche de période se situe une date donnée.Je voulai savoir si il est possible de concevoir une requ affichage requete SQL [ par darkwisk ] Bonjour à tous,Voilà mon problème : j'ai une requete qui me renvoi ça :Paul : 2Pierre : 7Jacques : 0Voilà mon code :$res = mysql_query("SELECT * FROM


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 0,562 sec (3)

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