session start et fpdf

LJ01
Invité n'ayant pas de compte PHPfrance

16 janv. 2011, 16:38

bonjour
je n'arrive pas à trouver la solution à mon problème
j'essai de développer un module pour Joomla1.5, qui lorsque je clique sur une icone imprimer affiche le résultats des calculs de mon module dans un pdf
mais je n'arrive pas à appeler mes variables qui sont dans le fichier php principale de mon module
j'utilise (enfin j'essaie d'utiliser) la librairie fpdfhttp://www.fpdf.org/ et session start pour appeler ems varibles
voici ce qu'il y a dans le premier fichier php
<?php
session_start();
//var_dump($_POST);
$_SESSION['naam'] = $_POST['naam'];
$_SESSION['year'] = $_POST['year'];

//echo "<br /><a href='/modules/mod_CO2profil/element/printpdf.php'>page 2</a>";

//Related Content//
/**
* @Copyright (C) 2011-janvier
* @ All rights reserved
* @ Released under GNU/GPL License : http://www.gnu.org/copyleft/gpl.html
* @version 2.9
*
**/             

defined( '_JEXEC' ) or die( 'Restricted access' ); 

?>

<body>
<html>

  <script language="javascript">
  function popup_aide(page)      {
  window.open(page,"nom_popup","menubar=no, status=no, scrollbars=yes, width=500, height=500");      }
  </SCRIPT>
  
<form action='<?php $_SERVER[PHP_SELF];?>' method='post'>


<?php 
$name_profil=$params->get('name_profil');
$color_form=$params->get('color_form');
dans le fichier php devant créer mon pdf voici ce qu'il y a
<?php
session_start();

echo $_SESSION['naam']; 
echo $_SESSION['year'];

require('./fpdf.php');


class PDF extends FPDF
{

//En-tête
function Header()
{
	//Logo

	$this->Image('world.png',10,8,23,0,'','http://lau.jarry.free.fr/index.php/logiciel-libre/calculs-co2');
	//Police Arial gras 15
	$this->SetFont('Arial','B',15);
	//Décalage à droite
	$this->Cell(50);
	//Titre
	$this->Cell(100,10,'Profil Co2 de '.$_SESSION['naam'].'',1,0,'C');
	$this->Cell($_SESSION['naam']);
	//Saut de ligne
	$this->Ln(10);
	$this->Cell(10);
	$this->SetFont('Arial','',15);
	$this->Cell(0,10,'pour l année '.$_SESSION['year'].'',0,0,'C');
	$this->Ln(20);
	$this->SetFont('Arial','',11);
	$this->MultiCell(0,8,'Ce profil est établi avec les facteurs de conversion CO2 du Bilan Carbone. Ils comprennent les énergies directes et indirectes.',0,1);
	$this->Ln(10);
}

//Chargement des données
function LoadData($file)
{
	//Lecture des lignes du fichier
	$lines=file($file);
	$data=array();
	foreach($lines as $line)
		$data[]=explode(';',chop($line));
	return $data;
}


//Tableau coloré
function FancyTable($header,$data)
{
	//Couleurs, épaisseur du trait et police grasse
	$this->SetFillColor(128,0,0);
	$this->SetTextColor(255);
	$this->SetDrawColor(128,0,0);
	$this->SetLineWidth(.3);
	$this->SetFont('','B');
	//En-tête
	$w=array(40,35);
	for($i=0;$i<count($header);$i++)
		$this->Cell($w[$i],7,$header[$i],1,0,'C',1);
	$this->Ln();
	//Restauration des couleurs et de la police
	$this->SetFillColor(224,235,255);
	$this->SetTextColor(0);
	$this->SetFont('');
	//Données
	$fill=false;
	foreach($data as $row)
	{
		$this->Cell($w[0],6,$row[0],'LR',0,'L',$fill);
		$this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);
		$this->Ln();
		$fill=!$fill;
	}
	$this->Cell(array_sum($w),0,'','T');
}

//Pied de page
function Footer()
{
	//Positionnement à 1,5 cm du bas
	$this->SetY(-15);
	//Police Arial italique 8
	$this->SetFont('Arial','I',8);
	//Numéro de page
	$this->Cell(0,10,'Module Joomla!1.5 - Profil CO2',0,0,'C');
}

}

$pdf=new PDF();
//Titres des colonnes
$header=array('Energie','Co2 (kg)');
//Chargement des données
$data=$pdf->LoadData('pays.txt');
$pdf->SetFont('Arial','',14);
$pdf->AddPage();
$pdf->FancyTable($header,$data);
$pdf->SetTitle('Profil CO2');
$pdf->SetAuthor('LJ01');
$pdf->write(5,$_SESSION['naam']);

$pdf->Output();
?>
le pdf s'affiche bien mais pas les variables
une aide est nécessaire
le module est en text ICIhttp://batenergie.free.fr/index.php/la-charte
merci LJ

Invité
Invité n'ayant pas de compte PHPfrance

17 janv. 2011, 15:19

je viens de penser à une chose
vu que je suis dans un module ma session start n'est peut être pas démarré en premier dans ma page
et donc ne ramène pas mes variables dans la deuxième !?
ce qui voudrait dire que la session start n'est pas adapté à mon problème
est-ce que quelqu'un peut m'en dire plus

merci LJ

ViPHP
xTG
ViPHP | 7331 Messages

17 janv. 2011, 15:58

Je ne connais pas Joomla ne l'ayant jamais utilisé mais n'utilise-t-il pas déjà les sessions ?
Essayes dans tous les cas un :
print_r($_SESSION);
plutôt qu'un affichage d'index nommé, tu seras rapidement fixé.

LJ01
Invité n'ayant pas de compte PHPfrance

17 janv. 2011, 17:29

merci pour la réponse mais je dois remplacer quoi au juste ...
par le "print_r($_SESSION);" ??

Lj

ViPHP
xTG
ViPHP | 7331 Messages

17 janv. 2011, 18:28

Tu ne remplaces rien tu le rajoutes.
C'est pour voir le contenu du tableau $_SESSION. ;)

Invité
Invité n'ayant pas de compte PHPfrance

17 janv. 2011, 18:46

ca me ramène cela

Code : Tout sélectionner

Array ( [__default] => Array ( [session.counter] => 9 [session.timer.start] => 1295281766 [session.timer.last] => 1295282658 [session.timer.now] => 1295282715 [session.client.browser] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.237 Safari/534.10 [registry] => JRegistry Object ( [_defaultNameSpace] => session [_registry] => Array ( [session] => Array ( [data] => stdClass Object ( ) ) ) [_errors] => Array ( ) ) [user] => JUser Object ( [id] => 0 [name] => [username] => [email] => [password] => [password_clear] => [usertype] => [block] => [sendEmail] => 0 [gid] => 0 [registerDate] => [lastvisitDate] => [activation] => [params] => [aid] => 0 [guest] => 1 [_params] => JParameter Object ( [_raw] => [_xml] => [_elements] => Array ( ) [_elementPath] => Array ( [0] => /mnt/159/sdd/e/a/batenergie/libraries/joomla/html/parameter/element ) [_defaultNameSpace] => _default [_registry] => Array ( [_default] => Array ( [data] => stdClass Object ( ) ) ) [_errors] => Array ( ) ) [_errorMsg] => [_errors] => Array ( ) ) ) [naam] => [year] => year )
LJ

ViPHP
xTG
ViPHP | 7331 Messages

17 janv. 2011, 19:51

Donc les fonctions sont bien actives.
Ce qui semblerait impliquer que Joomla formate les variables sessions.
Ce n'est qu'une hypothèse bien sûr vu que je ne connais pas du tout son système.
Mais il semblerait qu'il mette en cache dans une variable à lui les variables de session en début de script (initialisation Joomla) puis remet cette variable dans le tableau $_SESSION en écrasant tout ce qu'il y avait.
Regardes donc l'API Joomla pour voir s'il n'y a pas des fonctions pour manipuler les sessions, et plus particulièrement les variables de session.

Edit : en effet j'avais mal lu le retour, elles sont bien présentes.
Modifié en dernier par xTG le 17 janv. 2011, 21:29, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 janv. 2011, 20:41

A priori les deux variables que tu as défini en session sont bien présentes et apparaissent dans le tableau $_SESSION :

Code : Tout sélectionner

Array ( ..... [naam] => [year] => year)
La première (naam) est vide, mais la seconde est bien renseignée. Il faut donc vérifier le moment où tu la renseignes, car "à priori" ton pdf affiche bien la valeur en session, qui est une chaine vide :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

17 janv. 2011, 22:08

ulala je suis débutant donc pas tout bien compris
ne soyez pas avare d'explication pour moi ....
LJ

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 janv. 2011, 23:13

Alors en fait, le print_r (ou var_dump) que t'a demandé xTG te permet de voir le contenu de la session. Elle contient bien sur tous les éléments nécessaire à joomla, mais on voit également apparaitre tes deux variables "naam" et "year". Cela veut dire que tes variables sont bien enregistrées dans la session et que tu peux les récupérer comme bon te semble.

On voit également la valeur de tes variables :

Code : Tout sélectionner

[naam] => [year] => year
Donc ta variable $_SESSION["year"] contient la valeur "year", mais ta variable $_SESSION["naam"] est vide. Du coup quand tu essayes de l'afficher dans le pdf, tu ne vois rien...

Le soucis viendrait donc du moment où tu affectes tes valeurs à tes variables :
$_SESSION['naam'] = $_POST['naam'];
$_SESSION['year'] = $_POST['year'];
Il faudrait vérifier ici que $_POST['naam'] n'est pas vide... et donc que dans ton formulaire tu envois bien ce champ (en faisant attention aux majuscules/minuscules, etc.)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 6 Messages

18 janv. 2011, 08:35

ok c plus clair je regarderai mieux ce soir pour 'naam', bien que dans le formulaire lorsque je calcul il reprend bien le naam dans les résultats ...
et comme 'year' est bien pris dans la session comment ce fait-il qu'il n'apparaissent pas dans le pdf,est-ce parce que 'naam' n'est pas pris ...
je viens de tester aussi une seule variable 'year' mais idem pas d'affichage dans le pdf ...
avec ceci mes 2 variables arrivent dans le print-r mais toujrous pas dans le pdf ...

Code : Tout sélectionner

$_SESSION['naam'] = $_POST['naam']; $_SESSION['year'] = 'year';
LJ
LJ01 - ingall.free.fr

Petit nouveau ! | 6 Messages

18 janv. 2011, 22:40

bonsoir
voici comment sont écrites mes variables

Code : Tout sélectionner

//display year if ($display_year == 0) { echo "<div align='right'><strong><font color='$co2_color_title'> ".JText::_('YEAR')."</font></strong> <select name='display_year' default='$select_year' size='1' class='verysmall' id='select'> <option value='2005'>2005</option> <option value='2006'>2006</option> <option value='2007'>2007</option> <option value='2008'>2008</option> <option value='2009'>2009</option> <option value='2010'>2010</option> <option value='2011'>2011</option> <option value='2012'>2012</option> <option value='2013'>2013</option> <option value='2014'>2014</option> <option value='2015'>2015</option> <option value='2016'>2016</option> </select> </div>"; } elseif ($display_year == 1) { } echo "<table width='100%' border='".$bordersize_form."' cellpadding='0' cellspacing='0' bordercolor='".$color_form."'>"; //Dislpay name if ($name_profil == 0) { echo " <tr> <td width='60%'><img src='/modules/mod_CO2profil/image/nom.png' width='25' height='25' align='left'><strong>".JText::_('NAME')."</strong></td> </tr> <tr> <td width='40%'><input type='text' size='17' maxlength='17' name='naam' value='".(isset($_POST['naam'])?$_POST['naam']:'')."'></td> </tr>"; } elseif ($name_profil == 1) { }
pour l'heure je sèche grave
LJ
LJ01 - ingall.free.fr

Petit nouveau ! | 6 Messages

27 janv. 2011, 17:36

bonjour
je relance ce post car je n'ai pas avancé ...
donc merci d'une aide
LJ
LJ01 - ingall.free.fr

Eléphant du PHP | 245 Messages

27 janv. 2011, 18:39

Alors, je ne suis pas ur que cela vienne de là mais dans le code il y a quelque chose qui ne va pas :
echo $_SESSION['naam']; 
echo $_SESSION['year'];
Ce code génère une sortie, or la seule sortie du fichier PDF doit être :
$pdf->Output();
Il faut donc mettre en commentaire toutes les sorties écrites dans ce fichier (comme celles ci-dessus) ou dans les fichiers appelés par celui ci.

Petit nouveau ! | 6 Messages

27 janv. 2011, 21:53

j'ai mis ceci à la fin de mon fichier

Code : Tout sélectionner

$pdf->write(5,$_SESSION['naam']); $pdf->write(5,$_SESSION['year']); $pdf->output($_SESSION['naam']); $pdf->output($_SESSION['year']); $pdf->Output();
mais toujours rien
LJ
LJ01 - ingall.free.fr