Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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


Information sur la source

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

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

 

Commentaires et avis

signaler à un administrateur
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+

signaler à un administrateur
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.

@+

signaler à un administrateur
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 :)

signaler à un administrateur
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...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.