Exportation de résultat d'une requête sql server vers un fichier Excel via une page php

Petit nouveau ! | 2 Messages

04 janv. 2023, 10:19

Bonjour à tous

Voilà , je veux exporter le résultat d'une requête sql server vers un fichier Excel en utilisant une page php , mon code est le suivant:

<?php
$serverName = "MONSERVEUR";
$connectionInfo = array( "Database"=>"MABASE" ,"CharacterSet" =>"utf-8");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
//echo "Connexion établie.<br />";
}else{
echo "La connexion n'a pu etre etablie.<br />";
die( print_r( sqlsrv_errors(), true));
}

$sel= "SELECT * FROM [scolarite].[dbo].[eleve]";
//echo $sel.'<br>';
$result = sqlsrv_query($conn,$sel);

$file_ending = "xls";
//Information de l\'entêt de notre navigateur
header("Content-Type: application/xls");
header("Content-Disposition: attachment; filename=Exportation".date('d-m-Y').".xls");
header("Pragma: no-cache");
header("Expires: 0");
/*******Debut du formatage d'excel*******/
// Definition du séparateur de colonne dans excel
$sep = "\t";
$n= "\n";
// Début d'impression des noms des colonnes
$numFields=sqlsrv_num_fields($result);

for ($i = 0; $i <$numFields; $i++)
{
echo sqlsrv_get_field($result,0) ;
}
//print("\n");
//Fin d'impression de colonnes
// Debut de la boucle
while($row = sqlsrv_fetch_array($result,SQLSRV_FETCH_ASSOC))
{
$schema_insert = "";

echo $row['NOM'].' '.$sep.$row['PRENOM'].$n;

if(!isset($row[$j]))
$schema_insert .= "NULL".$sep;
elseif ($row[$j] != "")
$schema_insert .= "$row[$j]".$sep;
else
$schema_insert .= "".$sep; */
}
$schema_insert = str_replace($sep."$", "", $schema_insert);
$schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
$schema_insert .= "<\t>";
//print(trim($schema_insert));
print "\t";
}

?>

Mon problème est que que je n'arrive pas à récupérer les noms des champs de ma table avec la fonction sqlsrv_get_field !
Pouvez vous me donnez un coup de main SVP?

Merci d'avance.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 janv. 2023, 20:59

Alors je ne suis pas un expert SQL server mais à ma connaissance sqlsrv_get_field() ne te permet pas de récupérer le nom des champ mais uniquement la valeur des résultats.

Tu peux utiliser la fonction sqlsrv_fetch_array() en mettant SQLSRV_FETCH_ASSOC en 2ème paramètre afin de récupérer ta ligne de résultats sous la forme d'un tableau associatif nom_de_champs => valeur_du_champ
https://www.php.net/manual/fr/function. ... -array.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 2 Messages

15 janv. 2023, 14:20

Merci @rthur pour votre réponse

Effectivement j'ai procédé en mettant SQLSRV_FETCH_ASSOC en 2ème paramètre à la fonction sqlsrv_fetch_array(), mais j'ai obtenu uniquement les lignes de ma table sans les noms des champs

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 janv. 2023, 18:29

Fais un var_dump() du résultat obtenu et/ou reprend exactement l'exemple de la doc
Quand tout le reste a échoué, lisez le mode d'emploi...