[RESOLU] table html a partir d'un résultat PDO

Eléphant du PHP | 95 Messages

22 mai 2014, 11:14

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
La b!te et le couteau sont bien souvent les meilleurs outils...mais aussi et surtout les seuls qui sont toujours à disposition!!

Eléphant du PHP | 422 Messages

22 mai 2014, 11:29

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é.

++
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphant du PHP | 95 Messages

22 mai 2014, 11:58

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.
La b!te et le couteau sont bien souvent les meilleurs outils...mais aussi et surtout les seuls qui sont toujours à disposition!!