Page 1 sur 1

table html a partir d'un résultat PDO

Posté : 22 mai 2014, 11:14
par chapt0011
Bonjour a tous, je cherche à créer une table à partir d'un résultat de requête exécutée par PDO.
La première étape a été de récupérer les noms des colonnes et ça fonctionne:
//FONCTION
function getHTMLTableHead($requestResult)
{
	$table="<table border=1><thead>";
	foreach(array_keys(get_object_vars($requestResult)) as $h){
		$table.="<th>".$h."</th>";
	}
	$table .= "</thead></table>";
	return $table;
}
//APPEL DE FONCTION:
$sql = "SELECT * FROM Utilisateur";
$req = ConnexionPDO::getInstance()->prepare($sql);
$req->execute();
echo getHTMLTableHead($req->fetchObject());
le problème est qu'en faisant un fetch pour afficher les noms des colonnes, cela bouffe un résultat de ma requête.
je cherche un moyen propre de revenir en arrière sans rééxécuter la requête.

Cette fonction étant faite pour travailler sur n'importe quelle requête, je ne peux pas afficher la première ligne de la table avec la fonction car je ne connais pas d'avance les attributs de objets renvoyés par la requête.
J'ai déjà regardé du côté de:
public array PDOStatement::getColumnMeta ( int $column )
Avertissement
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.
mais cet avertissement n'est pas très rassurant.

Sinon il y a bien dans la fonction fetch() une variable appelée offset et je pense que la solution s'y trouve, cependant je n'ai jamais utilisé cela si quelqu'un pouvait éclairer ma lanterne car la doc php n'est pas très clair sur la façon d'utiliser cet offset. Merci

Re: table html a partir d'un résultat PDO

Posté : 22 mai 2014, 11:29
par telnes
hello

si tu cherche à avoir le nom des colonnes et le contenue il y a des options dans fetch http://www.php.net/manual/fr/pdostatement.fetch.php
qui te mette le nom de la colonne en clé de tableau et la valeur en valeur !

dans le foreach tu fait foreach( $tab as $key=>$value) pour avoir la clé.

++

Re: table html a partir d'un résultat PDO

Posté : 22 mai 2014, 11:58
par chapt0011
Merci j'ai retravaillé ma fonction:
function resultToHTMLTable($requestToFetch)
{
	$table="<table border=1><thead>";
        //nom des colonnes et contenu première ligne
	if($res = $requestToFetch->fetch(PDO::FETCH_ASSOC)) 
	{
		foreach($res as $key=>$value)
		{
			$table .= "<th>".$key."</th>";
		}
		$table .= "</thead><tr>";
		foreach($res as $key=>$value)
		{
			$table .= "<td>".$value."</td>";
		}
		$table .= "</tr>";
	}
        //suite du contenu
	while($res = $requestToFetch->fetch(PDO::FETCH_ASSOC))
	{
		$table .= "<tr>";
		foreach($res as $key=>$value)
		{
			$table .= "<td>".$value."</td>";
		}
		$table .= "</tr>";
	}
		$table .= "</table>";
	return $table;
}

//et pour l'appel:
		$sql = "SELECT * FROM Droit";
		$req = ConnexionPDO::getInstance()->prepare($sql);
		$req->execute();
		echo resultToHTMLTable($req);
et comme attendu, le résultat est le suivant : Image
Merci telnes.