Génération d'un fichier pdf [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
-
Bonjour, j'ai un formulaire avec des checkboxs qui permet à l'utilisateur de sélectionner les données qu'il veut exporter de la bdd au document pdf.
Je suis coincé lorsque je décoche les cases 2, 3 ou 4 car ca me sort undefined index....etc...

Comment faire SVP???????

Voici mon code :

<?php


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


echo $_POST['choix'][0];
echo $_POST['choix'][1];

$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('Nom - Prénom','Site','N° Téléphone fixe','N° fax','N° Portable','Adresse e-mail');
//$header = Array(
//Array( 'Nom - Prénom',4.7),
//Array( 'Site',4.7),
//Array( 'N° Téléphone fixe',4.7),
//Array( 'N° fax',4.7),
//Array( 'N° Portable',4.7),
//Array( 'Adresse e-mail',4.7)
//);


$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);
if(isset($_POST['choix'][0]))
$pdf->cell(4.7,0.7,$row['Societe'],1,0,'C',$fond);
if(isset($_POST['choix'][1]))
$pdf->cell(4.7,0.7,$row['Fixe'],1,0,'C',$fond);
if(isset($_POST['choix'][2]))
$pdf->cell(4.7,0.7,$row['Fax'],1,0,'C',$fond);
if(isset($_POST['choix'][3]))
$pdf->cell(4.7,0.7,$row['Portable'],1,0,'C',$fond);
if(isset($_POST['choix'][4]))
$pdf->cell(4.7,0.7,$row['Mail'],1,0,'C',$fond);

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

}


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


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


Site

N° téléphone fixe

N° fax

N° portable

Adresse e-mail


</form>

</html>

14 réponses

Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
ouais, comme ça j'aurai fait tout ton code... t'as essayé de comprendre quelque chose au moins????





un truc genre...

$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;

}

}

*****
THINK -> SEEK -> ASK
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
C'est la xème fois que tu poses la question dis donc...



http://www.commentcamarche.net/faq/sujet-1391-php-notice-undefined-index


*****
THINK -> SEEK -> ASK
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Je sais je suis désolé mais je sèche complètement là.....

Je ne sais plus comment m'y prendre là, si tu regardes mon code, j'utilise bien "if (isset($_POST['truc']))".....
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
donne la ligne de l'erreur et le message au complet...

*****
THINK -> SEEK -> ASK
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Ca marche si je laisse toutes les cases cochées ou si je laisse cochées la première (Societe) et dernière case (Mail).

Ce sort une erreur si je décoche l'une des cases 2 (Fixe) 3 (Fax) ou 4 (Portable).

L'erreur, c'est undefined index "case décochée" on line ....

Le numéro de la ligne dépend de la case décochée mais est toujours située dans ce pavé là :

$pdf->cell(4.7,0.7,$row['Nom'],1,0,'C',$fond);
if(isset($_POST['choix'][0]))
$pdf->cell(4.7,0.7,$row['Societe'],1,0,'C',$fond);
if(isset($_POST['choix'][1]))
$pdf->cell(4.7,0.7,$row['Fixe'],1,0,'C',$fond);
if(isset($_POST['choix'][2]))
$pdf->cell(4.7,0.7,$row['Fax'],1,0,'C',$fond);
if(isset($_POST['choix'][3]))
$pdf->cell(4.7,0.7,$row['Portable'],1,0,'C',$fond);
if(isset($_POST['choix'][4]))
$pdf->cell(4.7,0.7,$row['Mail'],1,0,'C',$fond);
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
t'as fait un print_r($row) dans le cas où tout n'est pas coché pour voir si c'est pas ça le problème?

*****
THINK -> SEEK -> ASK
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Non j'ai pas essayé ça...
Par contre, j'ai fait :

echo $_POST['choix'][0];
echo $_POST['choix'][1];

Lorsque je fais ça en laissant cochées la première et dernière case, ca me répond SocieteMail.
En fait, au lieu de prendre la valeur ['choix'][4]; la dernière case prend la valeur ['choix'][1];
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
ah c'est bien ce qu'il me semblait

$pdf->cell(4.7,0.7,$row['Nom'],1,0,'C',$fond);
if(isset($_POST['choix'][0]))
$pdf->cell(4.7,0.7,$row['Societe'],1,0,'C',$fond);
if(isset($_POST['choix'][1]))
$pdf->cell(4.7,0.7,$row['Fixe'],1,0,'C',$fond);
if(isset($_POST['choix'][2]))
$pdf->cell(4.7,0.7,$row['Fax'],1,0,'C',$fond);
if(isset($_POST['choix'][3]))
$pdf->cell(4.7,0.7,$row['Portable'],1,0,'C',$fond);
if(isset($_POST['choix'][4]))
$pdf->cell(4.7,0.7,$row['Mail'],1,0,'C',$fond);

donc ça ne peut pas marcher comme ça
désolé, il faut faire autrement
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Oui apparemment, mais comment???? Là je suis dépassé moi....
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
J'ai compris! Enfin, je crois ...
dans ton formulaire du début, tu utilises choix[] donc si tu ne coches
pas une option qui irait en position 3 par exemple, c'est celle qui
serait allé en 4 qui va en 3!



Le remède (bourrin):

$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);

}



à la place de



$pdf->cell(4.7,0.7,$row['Nom'],1,0,'C',$fond);

if(isset($_POST['choix'][0]))

$pdf->cell(4.7,0.7,$row['Societe'],1,0,'C',$fond);

if(isset($_POST['choix'][1]))

$pdf->cell(4.7,0.7,$row['Fixe'],1,0,'C',$fond);

if(isset($_POST['choix'][2]))

$pdf->cell(4.7,0.7,$row['Fax'],1,0,'C',$fond);

if(isset($_POST['choix'][3]))

$pdf->cell(4.7,0.7,$row['Portable'],1,0,'C',$fond);

if(isset($_POST['choix'][4]))

$pdf->cell(4.7,0.7,$row['Mail'],1,0,'C',$fond);



Essaie et dis moi ce que ça donne!


*****
THINK -> SEEK -> ASK
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Merci, la solution approche je pense!!
Maintenant, les données de la colonne concernée disparraissent bien, par contre, l'entête de la colonne reste systématiquement, c'est toujours l'entête Adresse mail qui est supprimée...
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
Ben c'est normal, le problème étant le même. Donc à toi d'adapter la nouvelle méthode au header. C'est tout bête.

*****
THINK -> SEEK -> ASK
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

La je suis réellement perdu, peux tu m'expliquer comment faire stp?
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

C'est parfait, ça fonctionne, je te remercie mille fois pour toute ton aide!!

Là je vais me repencher sur tout ça car j'ai pas tout suivi sur la fin...

Par contre, 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?