Convertir un code php du mode procédural en PDO

Résolu
Mikebiz Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   -  
Mikebiz Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   - 22 juil. 2020 à 13:52
Bonsoir,

J'ai un code php en mode prcédural que je veux convertir en mode PDO parce que je veux créer un fichier pdf, est ce possible. Voici mon bout de code :
   $rek="select client from client where idclient='$client'";
   $res=mysqli_query($int,$rek);
   $tab=mysqli_fetch_array($res);
   $client=$tab['client'];


Merci d'avance
A voir également:

4 réponses

jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746
 
Bonjour,

Je pense que tu melanges plusieurs choses....
D'un côté : Style procédurale et Style Objet ( qui est une "forme" d'écriture du code )
De l'autre : Mysqli .. et Pdo. (qui sont des "drivers" permettant de se connecter à une BDD )

De plus, pourquoi vouloir changer ton code en style objet ?
Ou pourquoi vouloir le convertir en PDO ?
Quel rapport avec la génération d'un fichier PDF ?


0
Mikebiz Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir Jordan45
En fait, j'ai deja un fichier listeinterimaire qui est en style procédurale et qui marche bien. Ce fichier recupère le nom, le poste, le salaire, le début du contrat, la fin du contrat et l'entreprise de l'intérimaire. Pour imprimer cette liste il fallait passer par un pdf, donc avec fpdf j'ai pu élaborer le pdf mais problème c'est qu'il affiche l'id du client au lieu du nom du client(entreprise). le bout de code que j'ai posté précédemment me permet de récupérer dans mon fichier listeinterimaire le nom du client à partir de son id or le code pour pdf que j'ai récupéré sur le net est en PDO, je n'y connais rien. C'est pourquoi je souhaite convertir le code existant en style procédural en PDO. Voici ci-dessous mon code pdfinterimaire que je souhaite modifier :
    <?php
require "fpdf.php";
$db = new PDO('mysql:host=localhost;dbname=planninga2i','root','');

class PDF extends FPDF {
     
	  function header(){
	          $this->Image('img/login_logo.png',10,6);
			  $this->SetFont('Arial','B',14); 
			  $this->Cell(276,5,'A2I - PLANNING',0,0,'C');
			  $this->Ln();
			  $this->SetFont('Times','',12); 
			  $this->Cell(276,10,'Liste des Interimaires',0,0,'C');
			  $this->Ln(20);
			  }
			  
	  function footer(){
	          $this->SetY(-15);  
			  $this->SetFont('Arial','',8); 
			  $this->Cell(0,10,'Page '.$this->PageNo().'',0,0,'C');
			  }
			  
	  function headerTable(){
	          $this->SetFont('Times','B',12);   
			  $this->Cell(55,10,'Nom et Prenoms',1,0,'C');
			  $this->Cell(40,10,'Entreprise',1,0,'C');
			  $this->Cell(60,10,'Poste Occupe',1,0,'C');
			  $this->Cell(25,10,'Salaire',1,0,'C');
			  $this->Cell(35,10,'Debut de Contrat',1,0,'C');
			  $this->Cell(35,10,'Fin de Contrat',1,0,'C');
			  $this->Cell(30,10,'Telephone',1,0,'C');
			  $this->Ln();
			  }
			  
	 function viewTable($db){
	          $this->SetFont('Times','',12);   
			  $stat = $db->query('SELECT * FROM interimaire');
			  while($data = $stat->fetch(PDO::FETCH_OBJ)){
			        $this->Cell(55,10,$data->nominterimaire,1,0,'L');
			        $this->Cell(40,10,$data->client,1,0,'L');
			        $this->Cell(60,10,$data->posteinterimaire,1,0,'L');
			        $this->Cell(25,10,$data->salaireinterimaire,1,0,'L');
			        $this->Cell(35,10,$data->debutcontrat,1,0,'L');
			        $this->Cell(35,10,$data->fincontrat,1,0,'L');
			        $this->Cell(30,10,$data->contactinterimaire,1,0,'L');
			        $this->Ln();
                   }
			  }


}
	 
$pdf = new PDF ();
//$pdf->AliasNtPages(); 
$pdf->AddPage('L','A4','0');
$pdf->headerTable();
$pdf->viewTable($db);
$pdf->Output();
?>
0
jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746
 
Donc c'est bien ce que je disais....
Tu ne veux pas changer ton code en style "procédurale" ... mais le convertir en PDO.

Quoi qu'il en soit, je pense que c'est inutile.
Il suffit, dans ton code original, de faire une jointure dans ta requête SQL...

En remplaçant :
$stat = $db->query('SELECT * FROM interimaire');

par
$sql = "SELECT I.*
            , C.client 
            FROM interimaire I
            LEFT JOIN client C ON C.idclient = I.client";

$stat = $db->query($sql);
0
Mikebiz Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Jordan45, c'est parfait, le code marche comme je le souhaite. Cependant peux-tu m'expliquer la première requete pour mes besoins futur?
Que veux dire "Select I.*" ?
C.client ?
FROM interimaire I. ?

Merci encore
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
I et C sont déclarés et utilisés comme synonymes de "interimaire" et de "client".
pour faciliter l'écriture et la lecture.
0
jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746
 
I et C sont des "alias".
C'est pour faciliter l'écriture...

J'aurai pu simplement écrire :
SELECT interimaire .*
            , `client`.client 
            FROM interimaire 
            LEFT JOIN client  ON client.idclient = interimaire.client

Mais c'est plus simple d'utiliser des alias
SELECT I.*
            , C.client 
            FROM interimaire I
            LEFT JOIN client C ON C.idclient = I.client
0
Mikebiz Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention  
 
Bien compris. Merci beaucoup Jordan45.
0
jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746
 
Et au passage,
si tu avais réellement voulu convertir ton code mysqli en PDO, ça aurait donné ça
//préparation de la requête et des variables
$sql = "SELECT client 
   FROM client
   WHERE idclient=:idclient";

$datas = array(':idclient'=>$client);

//Execution de la requete
try{
  $requete = $db->prepare($sql) ;
  $requete->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}

$res = $requete->fetch(PDO::FETCH_OBJ);
$client = $res->client;


PS: pense à mettre le sujet en RESOLU

0