Remplir un document Word avec Base de données SQL
Bonjour, j'ai un projet et je suis bloqué dessus.
En gros, via une page Web(PHP) qui contient des données de ma base de données je dois remplir un document Word
(exemple : Ma base de données contient que des fiches clients, je recherche un certain client sur ma page Web, j'ouvre son profil/sa fiche client, et dans sa fiche client il y a un petit bouton pour créer un devis/une facture (Word) à partir de tout les éléments présent de la fiche client et d'un fichier Word pré-rempli.)
J'arrive à créer un fichier Word à partir d'un autre, mais pas à changer les "Valeurs" dedans
(J'utlise WampServer et PHPMyAdmin)
Est ce que vous pouvez m'aider..?
Voici mon code :
Mon document Word contient seulement : @Date@ @Entreprise@ @Nom@ et @CP@
Tout est situé dans le même dossier dans mon WampServer
Si vous voulez mon Index.html (c'est là que je recherche dans ma bdd) :
Si quelqu'un peut m'aider c'est très gentil de sa part
En gros, via une page Web(PHP) qui contient des données de ma base de données je dois remplir un document Word
(exemple : Ma base de données contient que des fiches clients, je recherche un certain client sur ma page Web, j'ouvre son profil/sa fiche client, et dans sa fiche client il y a un petit bouton pour créer un devis/une facture (Word) à partir de tout les éléments présent de la fiche client et d'un fichier Word pré-rempli.)
J'arrive à créer un fichier Word à partir d'un autre, mais pas à changer les "Valeurs" dedans
(J'utlise WampServer et PHPMyAdmin)
Est ce que vous pouvez m'aider..?
Voici mon code :
<HTML>
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=drow;charset=utf8', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
<table border="1px" style="border-color: #c1c1c1" >
<tr>
<td style="background-color: lightgrey">ID</td>
<td>Entreprise</td>
<td>Nom</td>
<td>Code Postal</td>
</tr>
<form id="bouton" name="bouton" method="post">
<p><input type="submit" name="bouton" value ="VERS WORD"></p>
</form>
<?php
$reponse = $bdd->prepare('SELECT * FROM btob WHERE Entreprise = ?');
$reponse->execute(array($_GET['Entreprise']));
// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
?>
<tr>
<td style="background-color: lightgrey"><?php echo $donnees['id']; ?></td>
<td><?php echo $donnees['Entreprise']; ?></td>
<td><?php echo $donnees['Nom']; ?></td>
<td><?php echo $donnees['CP']; ?></td>
</tr>
<?php
}
?>
</table>
<?php
$reponse->closeCursor(); // Termine le traitement de la requête
if(isset($_POST['bouton'])) {
$todayfichier = date("d.m.y_H-i");
$today = date("d.m.y");
$nom_fichier = 'devis.'.$todayfichier.'.docx';
$file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Facture.docx';
$myContent = file_get_contents($file);
$myContent = str_replace("@Date@",$today,$myContent);
$myContent = str_replace("@CP@",$donnees['CP'],$myContent);
$myContent = str_replace("@Nom@",$donnees['Nom'],$myContent);
$myContent = str_replace("@Entreprise@",$donnees['Entreprise'],$myContent);
$newFile = fopen("$nom_fichier", "a");
fwrite($newFile,$myContent);
fclose($newFile);
}
?>
</HTML>
Mon document Word contient seulement : @Date@ @Entreprise@ @Nom@ et @CP@
Tout est situé dans le même dossier dans mon WampServer
Si vous voulez mon Index.html (c'est là que je recherche dans ma bdd) :
<!doctype html>
<html lang="fr">
<html>
<head>
<meta charset="UTF-8"/>
<title>Accès aux mesures de la serre</title>
</head>
<body>
<h1>BDD</h1>
<div class="page">
<form action="BddVersWord.php" method="GET">
<table>
<tr>
<td>Entreprise:</td>
<td><input type="text" name="Entreprise" size="20"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="EnvValeur" value ="Envoyer"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
Si quelqu'un peut m'aider c'est très gentil de sa part
2 réponses
-
ModérateurBonjour,
Si tu veux manipuler un fichier Word, utilises la classe phpword
https://github.com/PHPOffice/PHPWord
https://phpword.readthedocs.io/en/latest/
-
-
Modérateur@Lurgod_9827oui
-
-
Si tu n'as que quelques valeurs à remplacer tu peux utiliser sprintf https://www.php.net/manual/en/function.sprintf.php
Dans ton document générique tu mets des %s là où les valeurs doivent exister puis
$content = sprintf(file_get_contents('path_to_generic_file.doc'), $value1, $value2, $value3, $value4); file_put_contents('path_to_new_file.doc', $content);