Publipostage documents words(au format rtf) a partir d'une base mysql

Soyez le premier à donner votre avis sur cette source.

Vue 17 088 fois - Téléchargée 1 124 fois

Description

suite a une demande a mon boulot, j'ai créé une sorte d'interface
permettant de gérer des documents dont certains sont téléchargeables et d'autres pour du publipostage

je ne sais pas trop comment expliquer si ce n'est par son fonctionnement:

l'exemple est plus ou moins conçus pour des courriers
dans un premier temps gestion des utilisateurs (ou destinataires, expéditeur)

on va retrouver les informations personnelles de l'utilisateur de l'application
qui pourront servir par exemple pour la partie "expéditeur d'un courrier"
et un listing de destinataires "dans mon exemple je les ai appelé "utilisateur"..

dans un second temps la gestion documentaire

deux tableau differenciant les documents en téléchargement direct
et les documents pour publipostage

pour finir les formulaires pour le publipostage et pour l'ajout de document a dl/ou pour publipostage.

Source / Exemple :


<?php
require('../connexion/_connect.php');//connexion a la base
function change_carspec($texte)//fonction qui remplace certains caracteres spéciaux tels que les guillemets dans un forma rtf
	{
		$texte= str_replace("'"," \\rquote ",$texte); 
		$texte= str_replace('"'," \\ldblquote ",$texte); 
		$texte= str_replace('{'," \\{ ",$texte); 
		$texte= str_replace('{'," \\} ",$texte); 
		
		return $texte;
	}
	
//initialisation des variables
$nb_checkbox=count($_POST["checkdest"]);//on compte le nombre de destinataires  sélectionnés
if($nb_checkbox==0){$nb_checkbox=1;}//si aucun on met le compteur à 1
//variable qui contiendra les pages remplies
$texte="";
if($nb_checkbox>1){$texte="{\\rtf1 \n";}//si plusieurs destinataires sélectionnées on met ce code en debut de page.
//date
$date_jour=date("d/m/Y");
//infos utilisateur
$titre_user="";
$nom_user="";
$prenom_user="";
$adresse_user="";
$cp_user="";
$ville_user="";
$tel_user="";
$email_user="";

//mes infos
$my_info_titre="";
$my_info_nom="";
$my_info_prenom="";
$my_info_enseigne="";
$my_info_adresse="";
$my_info_cp="";
$my_info_ville="";
$my_info_tel="";
$my_info_fax="";
$my_info_email="";

if(isset($_POST["id_document"]))//si a été choisi un document
	{
		$id_document=$_POST["id_document"];
		
		$SQL_document="SELECT * FROM documents WHERE document_id=$id_document";
		$rc_document=mysql_query($SQL_document);
		$row_document=mysql_fetch_array($rc_document);
		//on récupere les infos du document choisi
		$type_document=$row_document["document_type"];
		$intitule_document=$row_document["document_intitule"];
		$nom_document=$row_document["document_nom"];
		$nomtemp_document=$row_document["document_tempnom"];
		
		// On ouvre le fichier type uploadé
		$rep="./upload_documents/";
		$filename = "$rep$nomtemp_document";
		$temp_file = "$intitule_document - ".date("d-m-Y").".rtf";
		$fp = fopen ( $filename, 'r' );
		
		// On le place en variable $output et on le ferme
		$foutput = fread( $fp, filesize( $filename ) );
		fclose ( $fp );

for ($numpub=0; $numpub < $nb_checkbox; $numpub++)//si plusieurs 
{
	$output=$foutput;
	if(isset($_POST["util_info"])) //si les infos du destinataire sont requises
	{
		if(isset($_POST["checkdest"][$numpub]))//on récupere l'id du destinataire contenu dans le checkbox
			{
				$user_id=$_POST["checkdest"][$numpub];
				$SQLdest="SELECT * FROM user WHERE user_id=$user_id";
				$rc_dest = @mysql_query($SQLdest);
				$row_users=mysql_fetch_array($rc_dest);
				
				$titre_user=$row_users["user_titre"];
				$nom_user=$row_users["user_nom"];
				$prenom_user=$row_users["user_prenom"];
				$adresse_user=$row_users["adresse"];
				$cp_user=$row_users["code_postal"];
				$ville_user=$row_users["ville"];
				$tel_user=$row_users["user_tel"];
				$email_user=$row_users["user_email"];
			}
	}
	
	//si infos personnelles requises
	if(isset($_POST["my_info"]))
	{
		$SQL_my_info="SELECT * FROM my_info WHERE 1";
		$rc_my_info=mysql_query($SQL_my_info);
		$row_my_info=mysql_fetch_array($rc_my_info);
		if(mysql_num_rows($rc_my_info)==0)
			{
				mysql_query("INSERT INTO my_info (my_info_titre) VALUES('')");
				$my_info_id=mysql_insert_id();
			}
			else
			{
				$my_info_titre=$row_my_info["my_info_titre"];
				$my_info_nom=$row_my_info["my_info_nom"];
				$my_info_prenom=$row_my_info["my_info_prenom"];
				$my_info_enseigne=$row_my_info["my_info_enseigne"];
				$my_info_adresse=$row_my_info["my_info_adresse"];
				$my_info_cp=$row_my_info["my_info_cp"];
				$my_info_ville=$row_my_info["my_info_ville"];
				$my_info_tel=$row_my_info["my_info_tel"];
				$my_info_fax=$row_my_info["my_info_fax"];
				$my_info_email=$row_my_info["my_info_email"];
			}
	
	}
	
	// si autres infos requis
	if(isset($_POST["other_info"]))
	{
			$nb_form=$_POST["nb_otherinfo"];
			
			for ($num=1; $num <= $nb_form; $num++)
			{
				if ($_POST["otherinfo_id_$num"]!="")// on récupere les valeurs des champs otherinfo_id_1,otherinfo_id_2,otherinfo_id_3,etc....
					{
						$SQL_other_infos="SELECT * FROM publipostage WHERE publipostage_id=".$_POST["otherinfo_id_$num"];
						$rc_other_infos=mysql_query($SQL_other_infos);
						$row_other_infos=mysql_fetch_array($rc_other_infos);
						$publipostage_keyword=$row_other_infos["publipostage_keyword"];
						$publipostage_texte=$_POST["other_info_$num"];
						$publipostage_texte=str_replace(CHR(10),"\par ", $publipostage_texte);
						$publipostage_texte=change_carspec($publipostage_texte);
						$output = str_replace("$publipostage_keyword", "$publipostage_texte", $output);
					}
			}
	}
	
	// on changes les mots clé par les valeurs des variables
	//si un mot clé n'est pas dans le document , il sera simplement ignoré ;-)
	$output = str_replace("#date#","$date_jour", $output);
	$output = str_replace("#util_titre#","$titre_user", $output);
	$output = str_replace("#util_nom#","$nom_user", $output);
	$output = str_replace("#util_prenom#","$prenom_user", $output);
	$output = str_replace("#util_adresse#","$adresse_user", $output);
	$output = str_replace("#util_cp#","$cp_user", $output);
	$output = str_replace("#util_ville#","$ville_user", $output);
	$output = str_replace("#util_tel#","$tel_user", $output);
	$output = str_replace("#util_email#","$email_user", $output);
	
	$output = str_replace("#mon_titre#","$my_info_titre", $output);
	$output = str_replace("#mon_nom#","$my_info_nom", $output);
	$output = str_replace("#mon_prenom#","$my_info_prenom", $output);
	$output = str_replace("#mon_cp#","$my_info_cp", $output);
	$output = str_replace("#mon_enseigne#","$my_info_enseigne", $output);
	$output = str_replace("#mon_adresse#","$my_info_adresse", $output);
	$output = str_replace("#ma_ville#","$my_info_ville", $output);
	$output = str_replace("#mon_tel#","$my_info_tel", $output);
	$output = str_replace("#mon_fax#","$my_info_fax", $output);
	$output = str_replace("#mon_email#","$my_info_email", $output);
	
	//si on utilisateur >1er alors on ajoute \page qui correspond à saut de page en rtf.
	if($numpub>0){$texte.=" \page ".$output;}else{$texte.=$output;}
}

//enfin on ouvre le fichier avec les variables implémentées
$fp = fopen ( $temp_file, 'a+' );

fputs($fp,$texte);
fclose ( $fp );
header("Content-type: application/force-download");
header("Content-disposition: inline; filename=\"$temp_file\";");
$fh=fopen($temp_file, "rb");
fpassthru($fh);
fclose($fh);
unlink($temp_file);
}
else
{//si aucun document choisi...
echo "Acces Interdit!";
}
mysql_close();
?>

Conclusion :


les commentaires sur les pages seront ajoutées plus tard là il est trop tard je vais me coucher :-D
vous pouvez tester ici:
http://foxmaster.info/makedocument/

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

coolchti
Messages postés
5
Date d'inscription
mardi 2 novembre 2010
Statut
Membre
Dernière intervention
5 novembre 2010
-
Bonjour,

J'ai a peut pret exactement le meme soucis que Thiefou, une piste ? Moi, c'est le serveur Apache qui plante
cs_thiefou
Messages postés
1
Date d'inscription
jeudi 29 décembre 2005
Statut
Membre
Dernière intervention
29 juillet 2009
-
Hello Foxmaster,
Je recherche une solution similaire à ton développement que je trouve super bon voir excellent, j'ai cependant encore trés peux d'expérience,(je travail plutôt en dotnet VB ou Delphi) je commence hélas seulement maintenant avec PHP et WAMP Mais mes début sont plutôt positifs.
j'ai donc chargé tes sources et j'utilise wamp v 2.2.11 mais je rencontre quelques soucis.
j'ai bien recréé les tables pour les users et pour les documents
je parviens a me connecter sur la base, car j'ai modifié en dur les paramètre de connexion avec le fichier _connect.php
cependant j'ai ensuite une erreur sur la page après un certain temps.

pourais tu me donner un tuyeau pour rechercher l'origine de mon problème?
un grand merci pour ton aide
thierry.francis@gmail.com




en et la table document
gigamaster
Messages postés
13
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
15 juin 2009
-
Utile et pratique.
^_^
Isarien59
Messages postés
5
Date d'inscription
lundi 21 juillet 2008
Statut
Membre
Dernière intervention
23 juillet 2008
-
Oui d'après ce que j'ai lu la taille des variable ds php est limitée à 8 mo. Après faut modifier le php.ini.

Pour l'entête et les pieds de page ca donne le même résultat avec ton code (jai uploadé un fichier sur ton site de test) et le miens (ds un sens ca me rassure). je vais voir pour trouver une autre solution (utilisation de tableau...)
cs_foxmaster
Messages postés
38
Date d'inscription
mercredi 9 février 2005
Statut
Membre
Dernière intervention
23 septembre 2013
-
Fais comme tu veux :-P

pour les entetes et pieds de pages je sais pas trop j'ai plus ou moins le probleme
mais je l'ai résolu assez simplement...(on a des papiers d'entête :-D)

par contre, j'ai remarqué que si on générais beaucoup de document et qu'il y a des images dedans (les images allourdissent énormément un RTF... car l'image est transformé en code qui est assez conséquent celon l'image)
cela peut planter l'application disant que le fichier est trop volumineux par rapport à la taille maxi que le serveur apache gere

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.