Fonction d'affichage de données mysql

Soyez le premier à donner votre avis sur cette source.

Vue 12 584 fois - Téléchargée 955 fois

Description

Cette fonction permet d'afficher des données provenant d'une ou plusieurs tables MySQL avec, si nécessaire, des liens entre les tables, des libellés de colonnes et le tri des données par colonne.

Pour utiliser cette fonction il faut inclure le fichier contenant la source et envoyer un certain nombre de paramètres, comme ci-dessous: (se retrouve dans le fichier page_d_appel.php)

<?php
include('TableGed.php');
//Inclure le fichier avec la source
//*********************************
$Tables='nom_de_la_table_1,nom_de_la_table_2,nom_de_la_table_3';
//Indiquer sur quelles tables on travaille
//**********************************
$Links='1%2%IDTable1,1%3%IDTable3';
//Indiquer quels tables sont liées entre elles par un champ de même nom
//(Souvent IDnom_de_la_table)
//Dans cet exemple les tables nom_de_la_table_1 et nom_de_la_table_2 sont liées par IDTable1 (1%2%IDTable1)
//et les tables nom_de_la_table_1 et nom_de_la_table_3 sont liées par IDTable3 (1%3%IDTable3)
//**********************************
$Fields='IDTable1,nom_de_la_table_1.IDTable2,ChampDivers1,ChampDivers2,ChampDivers3,ChampDivers4';
//Indiquer les champs à afficher d'après leur nom dans la base de donnée
//Pour afficher un champ dont le nom est le même dans deux table, préciser la table (NomTable.NomChamp)
//**********************************
$Names='ID,Tralala,Pouet pouet,Camion,Boumboum,Tequila';
//Le titre des colonnes du tableau, dans l'ordre des champs correspondant à ces colonnes.
//**********************************
creatable($Tables,$Links,$Fields,$Names);
//Appel de la fonction
?>

Source / Exemple :


<?php
function crealink($nvtri)
{
	$p = mysql_real_escape_string($_GET['p']);
	$tri = mysql_real_escape_string($_GET['tri']);
	$sens = mysql_real_escape_string($_GET['sens']);
	if ($tri === $nvtri)
	{
		if($sens==='ASC')
			$sens = 'DESC';
		else
			$sens = 'ASC';
	}
	else
	{
		$sens = 'DESC';
	}
	
	$link = 'index.php?p='.$p.'&tri='.$nvtri.'&sens='.$sens;
	return $link;
}

function creatable($Tables,$Linksa,$Fields,$Names)
{
	$Tables=explode(',',$Tables);
	$Links=explode(',',$Linksa);
	$Fields=explode(',',$Fields);
	$Names=explode(',',$Names);
	$p = mysql_real_escape_string($_GET['p']);
	$tri = mysql_real_escape_string($_GET['tri']);
	$sens = mysql_real_escape_string($_GET['sens']);
	$T = Count($Tables);
	$L = Count($Links);
	$F = Count($Fields);
	$N = Count($Names);
	if($F!==$N)
		die('Erreur de la fonction creatable(). Envoyez autant de Noms que de Champs...<br>');
	else if($T===0 || $F===0)
		die('Erreur de la fonction creatable(). Envoyez au moins une Table et un Champ...<br>');
	if(empty($tri))
		$tri=$Fields[0];
	print'<table><tr>';
	for($cpt=0;$cpt<$F;++$cpt)
	{
		print"<th><a href='".crealink($Fields[$cpt])."'>".$Names[$cpt]."</a></th>";
	}
	print'</tr>';
	$req="SELECT * FROM ";
	for($cpt=0;$cpt<$T;++$cpt)
	{
		if($cpt>0)
			$req.=", ";
		$req.="`".$Tables[$cpt]."`";
	}
	if(!empty($Linksa)&&$L>0)
	{
		$req.=" WHERE ";
		for($cpt=0;$cpt<$L;++$cpt)
		{
		if($cpt>0)
			$req.=" AND ";
		$temp = explode('%',$Links[$cpt]);
		$req.="`".$Tables[$temp[0]-1]."`.`".$temp[2]."`=`".$Tables[$temp[1]-1]."`.`".$temp[2]."`";
		}
	}
	$req.=" ORDER BY $tri $sens ;";
	$res=mysql_query($req) or die("La fonction creatable() a causé une erreur SQL. Vérifiez les paramètres.");
	while($val=mysql_fetch_array($res))
	{
		print'<tr>';
		for($cpt=0;$cpt<$F;$cpt++)
		{
			if(ereg('\.',$Fields[$cpt]))
			{
				$temp=explode('.',$Fields[$cpt]);
				print '<td>'.$val[$temp[1]].'</td>';
			}
			else
			{
				print '<td>'.$val[$Fields[$cpt]].'</td>';
			}
		}
		print'</tr>';
	}
	print'</table>';
}	
?>

Conclusion :


Fonction à développer pour pouvoir envoyer un paramètre $Edit et un paramètre $Delete pour pouvoir choisir quels champs sont éditables et quels champs sont supprimables, ainsi que pour la pagination.

Merci de vos retours.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
17
Date d'inscription
lundi 3 septembre 2007
Statut
Membre
Dernière intervention
26 octobre 2009

Pour ceux qui sont trop fainéants pour tester ça , ça donne:
0111

Donc, la variable $a n'est incrémentée qu'après son affichage.

En simple(juste pour retenir), lisez de gauche à droite^^.
echo $a++; = echo $a; $a++;
tandis que
echo ++$b; = $b++; echo $b;
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
@yoman => attention...quand j'ai parlé d'incidence, c'était contextuel. Dans ce cas là (celui d'une boucle for), ça n'a pas d'incidence. Et à vrai dire dans mon message, je ne parlais que d'incidence sur l'écriture du code (pas plus long, pas plus court), pas même sur ce que ces différntes notations font.
Parce que une incidence, il peut y en avoir une!! Et pas une petite...exactement comme en C si mes souvenirs sont bons, d'ailleurs, et très exactement comme en assembleur (parce que oui, j'en ai fait, j'ai même commencé par ça...enfin non, j'ai commencé par le basic de mon C64...puis j'ai enchaîne sur l'assembleur). Un exemple valant 1000 discours :
<?php
$a = 0;
$b = 0;
echo $a++;
echo ++$b;
echo $a;
echo $b;
?>
Le différence est énorme...donc les 2 écritures se justifient : tout dépend du contexte.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
@Depression => les frameworks...voilà encore un sujet qui aurait sa place dans un débat public, quelque part sur le site :-)
Pourquoi pas le bar!
Parce que j'ai mon avis dessus ;-) et j'aimerais beaucoup entendre celui d'autres développeurs.
Messages postés
100
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
13 juillet 2009

@malalam:

Oui pour le strpos, pour une fois, j'ai oublié de le rappeler ;-)

Quand à Zend Framework, je le cite car je travaille dessus en ce moment, et son modèle d'abstraction de bases de données est vraiment bien fait (Ca et le reste). Et bien sur, il utilise PDO (faut être logique, vu l'équipe des développeurs).
Bon, il demande d'assimiler pas mal de choses (bien plus que Jelix), mais on y gagne.
Messages postés
592
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2008

Salut malalam,

Ne t'en fais pas je comprends tout à fait, il est vrai que l'impact est nul, et que on ne devrait certainement pas reprocher à quelqu'un d'utiliser $var++, au contraire puisque justement l'impact est nul. Comme tu as dû t'en douter, j'ai sortie ça parce qu'il demandait une optimisation et je voulais sortir quelques choses de peu connu, tout en restant simple :). Note bien que je ne me prends pas pour un pro (enfin,je travail tout de même dans le domaine..), et je n'ai certainement pas la prétention d'être ne serait-ce qu'à moitier aussi bon que toi ;-) Ceci dit il est vrai qu'il est très courant (sur ce site et ailleurs) que certain reprennent une remarque vu quelque part en la reprochant à tout le monde ensuite, je suppose qu'ils sont fier de ce qu'ils ont appris et veulent montrer qu'ils sont meilleurs... Si ma remarque à une tel incidence, alors je serai le premier à le regretter.

PS: Revenons à l'incrémentation, J'ai découvert cette subtilité du langage dans mon (bref) passé de codeur c++, alors corrige moi si je me trompe (ceci est une question, par curiosité), mais est-ce que les incrémentations en php sont faites directement par du code en c++ ? Puisqu'en c++ ++i et i++ n'est pas executé de la même façon d'un point de vu assembleur (Je n'entrerai pas dans les détails que tu dois sans doute déja connaitre :-)), alors je suppose que php c'est pareil puisqu'il repose sur ça ?. Et d'après toi, pourquoi php comporte t'il les deux méthodes et les executes de manière différentes, si de toute façon ça n'a pas d'incidence direct sur le code ? (Enfin, après cette question fauderait pas partir un grand débat, parce qu'on s'éloigne un peu du sujet haha)
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.