Compréhension du code

Eléphanteau du PHP | 23 Messages

07 juin 2012, 09:56

Bonjour.
Je suis débutant en PHP (sachant que je suis en première année de BTS info) mais j'ai du mal à en comprendre les subtilités...
Je suis actuellement en stage et je suis face à un site intranet particulièrement conséquent.

J'aurais souhaité un peu d'aide afin de comprendre certaines parties du code.

Voici ce sur quoi je butte :
A partir d'une page où l'on renseigne diverses informations, ces dernières sont renvoyées dans un tableau qui est ensuite converti en PDF.
Voici la page qui renseigne toutes les informations :
<?php
include("../pdf/phpToPDF.php");

$date=@$_GET['date'];

$PDF=new phpToPDF();
$PDF->AddPage();
$PDF->SetFont('Arial','B',10);

$PDF->Image("../imgs/logoCSM.jpg", 160, 0);



require '../init.php'; 
$contenuTableau = array();


//while($row=mysql_fetch_object($req)){
						
	array_push($contenuTableau,'','','');
//}


// Définition des propriétés du reste du contenu du tableau.	



//$PDF->Write(10, $titre);
//Décalage de 8 cm à droite
$PDF->Cell(1);
//Texte centré dans une cellule 20*10 mm encadrée et retour à la ligne
$PDF->setXY(10,10);
$PDF->Cell(0,0,"GARDES DU $date",0,1,'C'); 
$PDF->setXY(0,20);

$reqServ=verifReq("SELECT * FROM cdgservice");
// Définition des propriétés du tableau.
$proprietesTableau = array(
	'TB_ALIGN' => 'L',
	'L_MARGIN' => 25,
	'BRD_COLOR' => array(0,92,177),
	'BRD_SIZE' => '0',
	);

// Définition des propriétés du header du tableau.	
$proprieteHeader = array(
	'T_COLOR' => array(255,255,255),
	'T_SIZE' => 10,
	'T_FONT' => 'Arial',
	'T_ALIGN' => 'C',
	'V_ALIGN' => 'T',
	'T_TYPE' => 'B',
	'LN_SIZE' => 5,
	'BG_COLOR_COL0' => array(174, 141, 75),
	'BG_COLOR' => array(174, 141, 75),
	'BRD_COLOR' => array(0,92,177),
	'BRD_SIZE' => 0.2,
	'BRD_TYPE' => '1',
	'BRD_TYPE_NEW_PAGE' => '',
	);

$contenuTableau = array();
$contenuHeader = array(
	80, 62
	"Service", "Intervenant"
);

function cleanTxt2($txt){
	$origine = array("<br />", "é", "è", "Ã", "àª", "à®", "à´", "à§");
	$change   = array("", "é", "è", "à", "ê", "î", "ô", "ç");
	$txt=str_replace($origine, $change, $txt);
	return $txt;
}


function cleanGrille($txt){
	$origine = array("4", "3", "2", "1","false");
	$change   = array("A", "B", "C", "D", "n/a");
	$txt=str_replace($origine, $change, $txt);
	return $txt;
}

while($rowServ=mysql_fetch_object($reqServ)){
	$reqLiaison=verifReq("SELECT d.idInt,nom
						FROM cdgdegarde d,cdgintervenant i
						WHERE d.idInt=i.idInt 
						AND idServ='$rowServ->idServ' AND date='$date'");
	if(mysql_num_rows($reqLiaison)!=0){
		$nomSet=mysql_result($reqLiaison,0,'nom', 'telephone');
	}else{
		$nomSet="-";
	}
	array_push($contenuTableau,$rowServ->libServ,$nomSet);
}
// Définition des propriétés du reste du contenu du tableau.	
$proprieteContenu = array(
	'T_COLOR' => array(0,0,0),
	'T_SIZE' => 9,
	'T_FONT' => 'Arial',
	'T_ALIGN_COL0' => 'L',
	'T_ALIGN' => 'R',
	'V_ALIGN' => 'T',
	'T_TYPE' => '',
	'LN_SIZE' => 8,
	'BG_COLOR_COL0' => array(233, 233, 233),
	'BG_COLOR' => array(233, 233,233),
	'BRD_COLOR' => array(0,92,177),
	'BRD_SIZE' => 0.1,
	'BRD_TYPE' => '1',
	'BRD_TYPE_NEW_PAGE' => '',
	);

$PDF->drawTableau($PDF, $proprietesTableau, $proprieteHeader, $contenuHeader, $proprieteContenu, $contenuTableau);
//$PDF->Output();
$nomFichier="CDG$date";
$PDF->Output("fiches/$nomFichier.pdf", "F");
echo '
	<iframe src="fiches/'.$nomFichier.'.pdf" width="100%" height="100%"  frameborder="none"  scrolling="No">
	[Your browser does <em>not</em> support <code>iframe</code>,
	or has been configured not to display inline frames.
	You can access <a href="./fiches/'.$nomFichier.'.pdf">the document</a>
	via a link though.]</iframe>
';

?>
J'en comprends certains passages (les plus basiques, tableaux, styles) mais je n'arrive pas à comprendre le fonctionnement... Quel est le cheminement ? Comment est construit le code permettant au final d'afficher ceci :

Image

Je vous serais très reconnaissant pour l'aide apportée. Merci d'avance :)

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2012, 10:02

Si tu as compris cela tu as compris la majorité.
$PDF=new phpToPDF(); // instanciation d'un objet phpToPDF
$PDF->AddPage(); // création d'une page vierge
// écriture du tableau dans la page
$PDF->drawTableau($PDF, $proprietesTableau, $proprieteHeader, $contenuHeader, $proprieteContenu, $contenuTableau);
//$PDF->Output();
$nomFichier="CDG$date";
$PDF->Output("fiches/$nomFichier.pdf", "F"); // génération du fichier pdf
Il n'y a rien de plus, rien de moins. :)

Eléphanteau du PHP | 23 Messages

07 juin 2012, 10:05

Désolé, je me suis mal exprimé.

En fait, je ne comprends pas comment les données vont de la BDD au tableau, ni comment le modifier par conséquent.
J'ai tenté certaines choses, sans résultat...

Pour résumer, je dois ajouter une colonne "Téléphone" et prendre les numéros de ma BDD (sélectionnés selon le nom utilisé) pour les y inscrire dans le tableau.

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2012, 10:16

Tu as une variable :
$contenuHeader = array(
        80, 62
        "Service", "Intervenant"
);
As-tu essayé de rajouter une colonne dedans à tout hasard ?
Après je ne connais pas cette librairie, mais ils doivent bien avoir un site et une documentation.
Tu devrais y trouver des exemples dedans.

Eléphanteau du PHP | 23 Messages

07 juin 2012, 10:19

Oui, j'y ai tenté quelque chose, en vain. Cette partie là ne change que le header tout en cassant le contenu du tableau.
J'essaie plusieurs choses mais je n'y arrive pas... J'ai tenté de récupérer le numéro de téléphone via requête SQL, sans résultat. :/

Fais-je fausse route ?

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2012, 10:21

Commençons par le début alors si tu ne sais pas récupérer le téléphone.
Montres nous ta requête pour récupérer le téléphone qu'on te dise ce qui cloche.

Eléphanteau du PHP | 23 Messages

07 juin 2012, 10:27

Si je ne me trompe pas, c'est dans cette partie du code :
while($rowServ=mysql_fetch_object($reqServ)){
        $reqLiaison=verifReq("SELECT d.idInt,nom
                                                FROM cdgdegarde d,cdgintervenant i
                                                WHERE d.idInt=i.idInt
                                                AND idServ='$rowServ->idServ' AND date='$date'");
        if(mysql_num_rows($reqLiaison)!=0){
                $nomSet=mysql_result($reqLiaison,0,'nom', 'telephone');
        }else{
                $nomSet="-";
        }
        array_push($contenuTableau,$rowServ->libServ,$nomSet);
}
J'ai simplement rajouté la colonne telephone après nom :
while($rowServ=mysql_fetch_object($reqServ)){
        $reqLiaison=verifReq("SELECT d.idInt,nom, telephone
                                                FROM cdgdegarde d,cdgintervenant i
                                                WHERE d.idInt=i.idInt
                                                AND idServ='$rowServ->idServ' AND date='$date'");
        if(mysql_num_rows($reqLiaison)!=0){
                $nomSet=mysql_result($reqLiaison,0,'nom', 'telephone');
        }else{
                $nomSet="-";
        }
        array_push($contenuTableau,$rowServ->libServ,$nomSet);
}
Cette dernière se trouve aussi dans la table cdgintervenant. Je ne vois pas où est-ce qu'elle pourrait être appelée... A moins qu'il faille que je crée une nouvelle requête, et que je gère le numero de télephone à part ?

ViPHP
xTG
ViPHP | 7331 Messages

07 juin 2012, 10:35

Ta requête est correcte mais c'est on utilisation de mysql_result() qui ne l'est pas.
Il faut faire ainsi :
if(mysql_num_rows($reqLiaison)!=0){
  $nomSet=mysql_result($reqLiaison,0,'nom');
  $telephoneSet=mysql_result($reqLiaison,0, 'telephone');
}else{
  $nomSet="-";
  $telephoneSet='-';
}
Ensuite pour les insérer je modifierai la variable header ainsi que rajouter le téléphone dans le array_push de la boucle. :)

Eléphanteau du PHP | 23 Messages

07 juin 2012, 10:47

Merci beaucoup, ça fonctionne. Qui plus est, j'ai compris comment.
Merci encore =)