Fichier pdf crée via php [Résolu]

Signaler
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009
-
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009
-
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>

30 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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.
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

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;
}
}
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

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;
}
}
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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.
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

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
}
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Au passage, cette ligne : $header = array(); est inutile.
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

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...??
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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.
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

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
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

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...
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Pourquoi tu utilises $header[0] au lieu de $header['site'] par exemple?
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

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...
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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
}
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

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
}
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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)
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

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
}
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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.
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

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>