Fichier pdf crée via php

Résolu
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009 - 16 févr. 2006 à 17:31
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009 - 20 févr. 2006 à 08:22
Salut,

Je voudrais donner une taille prédéfinie à mes colonnes, j'ai vu que je pouvvais faire qque chose comme ajouter =>50 apres le titre de chaque colonne, mais ca me donne une erreur concernant l'offset.

Est ce que c'est juste une histoire de mauvais placement de cette ligne dans mon code ou autre chose?

Ensuite, je ne comprends pas pouruoi mes entêtes de colonnes n'apparaissent que sur la première page???

Merci d'avance!!

Code pour info :

<?php


if (isset ($_POST['submit']) && $_POST['submit'] === 'Valider') {



$base="D:\\Qualite\Annuaire\Annuaire.mdb";
$Annuaire="Annuaire";


//connection au serveur:
$cnx = odbc_connect( "DSN_Annuaire","" ,"") or die ("Impossible de se connecter à la base de donnée") ;

//PDF


define('FPDF_FONTPATH','font/');
require('fpdf/fpdf.php');


$pdf=new FPDF('L','cm','A4');

$pdf->SetFont('Arial','B',12);
$pdf->AddPage();
$pdf->SetFillColor(220,130,130);
$pdf->SetTextColor(255,255,255);


//Titres des colonnes


$header = array();
$header[] = 'Nom - Prénom';
for ($m=0;$m<count($_POST['choix']);$m++){
switch($_POST['choix'][$m]){
case 'Societe': $header[] = 'Site';
break;
case 'Fixe': $header[] = 'N° Téléphone fixe';
break;
case 'Fax': $header[] = 'N° fax';
break;
case 'Portable': $header[] = 'N° Portable';
break;
case 'Mail': $header[] = 'Adresse e-mail';
break;
default: break;
}
}


$pdf->cell(4.7,1,$header[0],1,0,'C',1);// Le nom dans tous les cas


for($i=0;$i<count($_POST['choix']);$i++)
{
if(isset($_POST['choix'][$i]))
$pdf->cell(4.7,1,$header[$i+1],1,0,'C',1);// les autres postes si cases cochées
}


if (isset($_POST['choix'])){
$addInQuery = implode(',', $_POST['choix']);
$addInQuery = ','.$addInQuery;
}
else $addInQuery = '';

$resultat = odbc_exec( $cnx, 'SELECT Nom'.$addInQuery.' FROM Annuaire ORDER BY Nom');


$pdf->SetFillColor(0xdd,0xdd,0xdd);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','',8);
$pdf->SetXY(1,$pdf->GetY()+1);
$fond=0;
while( $row = odbc_fetch_array( $resultat ) ) //tant que c pas la fin de la table
{
$pdf->cell(4.7,0.7,$row['Nom'],1,0,'C',$fond);
for ($m=0;$m<count($_POST['choix']);$m++){
if(isset($_POST['choix'][$m]))
$pdf->cell(4.7,0.7,$row[$_POST['choix'][$m]],1,0,'C',$fond);
}


$pdf->SetXY(1,$pdf->GetY()+0.7);
$fond=!$fond;
}
$pdf->output();

}


?>
<html>
<head>
</head>


<form action="test.php" method="POST">


Site

N° téléphone fixe

N° fax

N° portable

Adresse e-mail


</form>

</html>
A voir également:

30 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 févr. 2006 à 15:01
Explique noir sur blanc, avec des phrases lol pas du code, ce que tu veux faire, dans le détail, en commençant à partir de ton test de soumission du formulaire : tu détailles ce que tu fais, pas à pas, là-dedans.
J'y verrai plus clair.
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 févr. 2006 à 17:37
Hello,

une erreur d'offset, c'est que tu accèes à une clef d'un tableau qui n'est pas définie.

Exemple :
$aTab = array ('bla', 'bli', 'blo');

si je fais echo $aTab[3];
j'ai une erreur d'offset : la clef 3 n'est pas définie. Je n'ai que les clefs 0, 1 et 2.
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
17 févr. 2006 à 08:26
Ah maintenant, lorsque je rajoute ce qui est en rouge ci-dessous, ca me sort : Parse error: syntax error, unexpected T_DOUBLE_ARROW
Comment je peux corriger ca...?

//Titres des colonnes


$header = array();
$header[] = 'Nom - Prénom'=>50;
for ($m=0;$m<count($_POST['choix']);$m++){
switch($_POST['choix'][$m]){
case 'Societe': $header[] = 'Site';
break;
case 'Fixe': $header[] = 'N° Téléphone fixe';
break;
case 'Fax': $header[] = 'N° fax';
break;
case 'Portable': $header[] = 'N° Portable';
break;
case 'Mail': $header[] = 'Adresse e-mail';
break;
default: break;
}
}
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
17 févr. 2006 à 08:33
Et si je fais ça, ca m'écris les valeurs numériques dans mes entêtes de colonnes :

//Titres des colonnes


$header = array(50,50,30,30,30,50);
$header[] = 'Nom - Prénom';
for ($m=0;$m<count($_POST['choix']);$m++){
switch($_POST['choix'][$m]){
case 'Societe': $header[] = 'Site';
break;
case 'Fixe': $header[] = 'N° Téléphone fixe';
break;
case 'Fax': $header[] = 'N° fax';
break;
case 'Portable': $header[] = 'N° Portable';
break;
case 'Mail': $header[] = 'Adresse e-mail';
break;
default: break;
}
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 févr. 2006 à 09:17
Lol, faut revoir ta façon de créer des tableaux, Flopad :-)
Tu veux avoir quoi dans ce tableau ?
$header array ('Nom - Prenom'> 50);
Tu auras ujn tableau de cette forme :
$header['Nom - prenom'] = 50;
(tu peux aussi le créer comme ça, d'ailleurs).

Mais bon, je ne saisis pas ce que tu essayes vraiment de faire, en fait.
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
17 févr. 2006 à 09:22
La j'ai modifié de cette manière mais ca me donne des erreurs d'offset sur les 2 lignes en rouge :

//Titres des colonnes


$header = array();
$header['Nom - Prénom'] = 5;
for ($m=0;$m<count($_POST['choix']);$m++){
switch($_POST['choix'][$m]){
case 'Societe': $header['Site'] = 5;
break;
case 'Fixe': $header['N° Téléphone fixe'] = 3;
break;
case 'Fax': $header['N° fax'] = 3;
break;
case 'Portable': $header['N° Portable'] = 3;
break;
case 'Mail': $header['Adresse e-mail'] = 5;
break;
default: break;
}
}


$pdf->cell(4.7,1,$header[0],1,0,'C',1);// Le nom dans tous les cas


for($i =0;$i<count($_POST['choix']);$i++)
{
if(isset($_POST['choix'][$i]))
$pdf->cell(4.7,1,$header[$i+1],1,0,'C',1);// les autres postes si cases cochées
}
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 févr. 2006 à 09:34
Ben évidemment, tes clefs sont associatives (ce sont des chaines de caractères)! Et tu appelles ensuite ton tableau aavec des clefs numériques : elles n'existent pas!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 févr. 2006 à 09:35
Au passage, cette ligne : $header = array(); est inutile.
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
17 févr. 2006 à 09:51
D'accord, le soucis vient donc du fait que je définis $header['Site'] et que je rappelle ça plus bas avec $header[0] etc...?

Comment je peux faire pour arranger ce bazard...??
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 févr. 2006 à 09:53
Exactement.
Ben je ne sais pas moi, lol, je n'ai toujours pas compris ce que tu veux faire.
Choisis, clef associative, ou clef numérique.
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
17 févr. 2006 à 09:57
Ben en fait, j'ai une bdd access, j'exporte mes données sur un fichier pdf; j'écris dans ces clefs les noms des entêtes de mes colonnes
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
17 févr. 2006 à 10:00
Et ce que je voulais faire après, c'est donner une largeur différente à chaque colonne, car il faut que j'en resserre qques unes...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 févr. 2006 à 10:02
Pourquoi tu utilises $header[0] au lieu de $header['site'] par exemple?
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
17 févr. 2006 à 10:06
En effet, tu as raison, pour cette ligne j'ai modifié comme cela : $pdf->cell(4.7,1,$header['Nom - Prénom'],1,0,'C',1);// Le nom dans tous les cas

Par contre pour l'autre ligne :

if(isset($_POST['choix'][$i]))
$pdf->cell(4.7,1,$header[$i+1],1,0,'C',1);// les autres postes si cases cochées

Je ne sais pas comment déclarer la colonne car ca dépend si la case a été cochée par l'utilisateur ou non...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 févr. 2006 à 10:11
Ben c'est ton formulaire qui est maal foutu.
Pourquoi tu ne mets pas choix['Nom - prenom'] au lieu de choix[] ?

Sinon tu peux aussi feinter : tu déclares un tableau genre :


$aCorrespondance array (0> 'site', 1 => 'Nom - prenom', etc...);


foreach ($aCorrespondannce as $clef => $val)
{
if(isset($_POST['choix'][$clef]))
$pdf->cell(4.7,1,$header[$val],1,0,'C',1);// les autres postes si cases cochées
}
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
17 févr. 2006 à 10:27
Là, ca me donne l'erreur suivante : Warning: Invalid argument supplied for foreach()

//Titres des colonnes


$header['Nom - Prénom'] = 5;
for ($m=0;$m<count($_POST['choix']);$m++){
switch($_POST['choix'][$m]){
case 'Societe': $header['Site'] = 5;
break;
case 'Fixe': $header['N° Téléphone fixe'] = 3;
break;
case 'Fax': $header['N° fax'] = 3;
break;
case 'Portable': $header['N° Portable'] = 3;
break;
case 'Mail': $header['Adresse e-mail'] = 5;
break;
default: break;
}
}


$pdf->cell(4.7,1,$header['Nom - Prénom'],1,0,'C',1);// Le nom dans tous les cas


$aCorrespondance array ( 0> 'Site', 1 => 'N° Téléphone fixe', 2 => 'N° fax', 3 => 'N° Portable', 4 => 'Mail');


foreach ($aCorrespondannce as $clef => $val)
{
if(isset($_POST['choix'][$clef]))
$pdf->cell(4.7,1,$header[$val],1,0,'C',1);// les autres postes si cases cochées
}
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 févr. 2006 à 10:31
Ne copie pas bêtement, Flo, je peux faire des fautes de frappe... :


$aCorrespondance array ( 0> 'Site', 1 => 'N° Téléphone fixe', 2 => 'N° fax', 3 => 'N° Portable', 4 => 'Mail');


foreach ($aCorrespondannce as $clef => $val)
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
17 févr. 2006 à 10:52
Pfff désolé, c'est la misère ça.......

Bon là, dans mes entetes de colonnes, j'ai les chiffres que je voulais donner à la largeur de mes colonnes.... (5 , 3 , 3, 3, 5)

Si je décoche la 2ème, 3ème, ou 4ème case, ca me sort une erreur undefined index de la case décochée....

//Titres des colonnes


$header['Nom - Prénom'] = 5;
for ($m=0;$m<count($_POST['choix']);$m++){
switch($_POST['choix'][$m]){
case 'Societe': $header['Site'] = 5;
break;
case 'Fixe': $header['N° Téléphone fixe'] = 3;
break;
case 'Fax': $header['N° fax'] = 3;
break;
case 'Portable': $header['N° Portable'] = 3;
break;
case 'Mail': $header['Adresse e-mail'] = 5;
break;
default: break;
}
}


$pdf->cell(4.7,1,$header['Nom - Prénom'],1,0,'C',1);// Le nom dans tous les cas


$aCorrespondance array ( 0> 'Site', 1 => 'N° Téléphone fixe', 2 => 'N° fax', 3 => 'N° Portable', 4 => 'Adresse e-mail');


foreach ($aCorrespondance as $clef => $val)
{
if(isset($_POST['choix'][$clef]))
$pdf->cell(4.7,1,$header[$val],1,0,'C',1);// les autres postes si cases cochées
}
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
17 févr. 2006 à 11:27
T'as pas modifié ton formulaire hein ?
Il ne devrait pas prendre en compte les cases décochées si tu as bien fait correspondre les cases à cocher et le tableau de correspondance, puisque tu testes l'existence de la variable.
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
17 févr. 2006 à 11:34
Non je n'ai rien modifié d'autre, voici l'intégralité du code :

<?php


if (isset ($_POST['submit']) && $_POST['submit'] === 'Valider') {



$base="D:\\Qualite\Annuaire\Annuaire.mdb";
$Annuaire="Annuaire";


//connection au serveur:
$cnx = odbc_connect( "DSN_Annuaire","" ,"") or die ("Impossible de se connecter à la base de donnée") ;

//PDF


define('FPDF_FONTPATH','font/');
require('fpdf/fpdf.php');


$pdf=new FPDF('L','cm','A4');

$pdf->SetFont('Arial','B',12);
$pdf->AddPage();
$pdf->SetFillColor(220,130,130);
$pdf->SetTextColor(255,255,255);


//Titres des colonnes


$header['Nom - Prénom'] = 5;
for ($m=0;$m<count($_POST['choix']);$m++){
switch($_POST['choix'][$m]){
case 'Societe': $header['Site'] = 5;
break;
case 'Fixe': $header['N° Téléphone fixe'] = 3;
break;
case 'Fax': $header['N° fax'] = 3;
break;
case 'Portable': $header['N° Portable'] = 3;
break;
case 'Mail': $header['Adresse e-mail'] = 5;
break;
default: break;
}
}


$pdf->cell(4.7,1,$header['Nom - Prénom'],1,0,'C',1);// Le nom dans tous les cas


$aCorrespondance array ( 0> 'Site', 1 => 'N° Téléphone fixe', 2 => 'N° fax', 3 => 'N° Portable', 4 => 'Adresse e-mail');


foreach ($aCorrespondance as $clef => $val)
{
if(isset($_POST['choix'][$clef]))
$pdf->cell(4.7,1,$header[$val],1,0,'C',1);// les autres postes si cases cochées
}


if (isset($_POST['choix'])){
$addInQuery = implode(',', $_POST['choix']);
$addInQuery = ','.$addInQuery;
}
else $addInQuery = '';

$resultat = odbc_exec( $cnx, 'SELECT Nom'.$addInQuery.' FROM Annuaire ORDER BY Nom');


$pdf->SetFillColor(0xdd,0xdd,0xdd);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','',8);
$pdf->SetXY(1,$pdf->GetY()+1);
$fond=0;
while( $row = odbc_fetch_array( $resultat ) ) //tant que c pas la fin de la table
{
$pdf->cell(4.7,0.7,$row['Nom'],1,0,'C',$fond);
for ($m=0;$m<count($_POST['choix']);$m++){
if(isset($_POST['choix'][$m]))
$pdf->cell(4.7,0.7,$row[$_POST['choix'][$m]],1,0,'C',$fond);
}


$pdf->SetXY(1,$pdf->GetY()+0.7);
$fond=!$fond;
}
$pdf->output();

}


?>
<html>
<head>
</head>


<form action="test.php" method="POST">


Site

N° téléphone fixe

N° fax

N° portable

Adresse e-mail


</form>

</html>
0
Rejoignez-nous