Moteur de recherche et sortie du résultat en PDF

C3D
Petit nouveau ! | 9 Messages

18 juin 2009, 16:08

Bonjour ,

J'ai modifié un moteur de recherche afin de faire mes périodes de facturation et de mes taxes, celui ci fonctionne entre deux dates, il m'affiche les clients, le montant que les clients on payé, la somme total et une calculatrice me génère le montant que je doit payer, j'aimerai sortir ces données sur un PDF.

J'ai essayé pas mal de solutions mais à chaque fois celui ci me sort qu'un client et je ne sais pas comment faire pour y arrivé.

Voici le code (juste le php) de ma page concernée (celle ci est encore un brouillon et le code est pas du tout nettoyé désolé les puristes)
<?php
require('fonctions_dates.php');

if(isset($_POST['date1']) && $_POST['date2'] != NULL)
{
include('conf.php');
$date1 = htmlentities($_POST['date1'], ENT_QUOTES);
$date2 = htmlentities($_POST['date2'], ENT_QUOTES);


$query = mysql_query("SELECT * FROM client WHERE date BETWEEN '$date1' AND '$date2'") or die (mysql_error());
$nb_resultats = mysql_num_rows($query);
if($nb_resultats != 0)

{
	function sans_accent($chaine)
{
   $accent  ="??????????????????????????????????????????????????????????????";
   $noaccent="aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyyby";
   return strtr(trim($chaine),$accent,$noaccent);
}
?>
  <?php
include('conf.php');	
$requete=mysql_query("SELECT SUM(prix) FROM client WHERE date BETWEEN '$date1' AND '$date2'");
$donnee = mysql_fetch_array($requete);
$somme=$donnee['SUM(prix)'];
?>
  
  <center>
</p>
<h3>R&eacute;sultats de votre recherche.</h3>
<p>&nbsp;</p>
<p><strong><?php echo $nb_resultats;
if($nb_resultats > 1) { echo ' r&eacute;sultats '; } else { echo ' r&eacute;sultat '; }
?>
pour un montant total de <?php echo($somme) ;?> &euro; </strong><br/>
<br/>
<p></p>
<form name="frm" method="post" action="" onSubmit="return testsubmit()">

    <input name="heurenom" type="text" style="font-size:16px; background: url(../img/fdinputbleu.png); border:0px; "onkeyup="calcul();" value="<?php echo($somme) ;?>" size="5 " />
        <input name="c2" type="hidden" id="c2" value="21.3" /><input name="pheurenom" type="hidden"
  onkeyup="calcul();" value="" size="6" readonly="readonly" />
      <input name="c2b" type="hidden" id="c2b" value="100" />
        </p>
      <font color="red"><strong>TOTAL TAXE</strong></font> :
        <input name="prix" type="text" style="font-size:16px; background: url(../img/fdinputrouge.png); border:0px; "onkeyup="calcul();" value="" size="6" readonly="readonly" /></form>
<br />

<a href="pages/facturation2.inc.php" target="_blank"><img src=../img/pdf.png border="0"></a>
<br />
  <?php
//connexion au serveur:
$cnx = mysql_connect( "localhost", "root", "root" );
 
//s?lection de la base de donn?es:
$db= mysql_select_db( "depann49" );
 
//cr?ation de la requ?te SQL:
$sql = "SELECT * FROM client ORDER BY date";
 
//ex?cution de notre requ?te SQL:
$requete = mysql_query( $sql, $cnx ) or die( "ERREUR MYSQL num?ro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
 
//r?cup?ration avec mysql_fetch_object(), et affichage de nos r?sultats :
echo( "<table border=\"1\" cellpadding=\"0\" cellspacing=\"1\" align=\"center\" style=\"border-color:\"#999\" width=\"800px\">\n" );

echo( "<tr>
<td background=\"img/fdc.png\"><div align=\"center\">Client</div></td>
<td background=\"img/fdc.png\"><div align=\"center\">Ville</div></td>
<td background=\"img/fdc.png\"><div align=\"center\">Date</div></td>
<td background=\"img/fdc.png\"><div align=\"center\">Prix</div></td>
</tr>" );

echo( "<br>\n" );
echo( "<strong>- R&eacute;capitulatif du ou des clients concern&eacute;(s) : -</stong>\n" );
echo( "<br>\n" );
echo( "<br>\n" );
while( $donnees = mysql_fetch_object( $query ) )
{
 echo( "<tr>\n" );
 echo( "<td><div align=\"center\">".$donnees->titre." ".$donnees->nom." ".$donnees->prenom."</div></td>\n" );
 echo( "<td><div align=\"center\">".$donnees->ville."</div></td>\n" );
 echo( "<td><div align=\"center\">".dateFR($donnees->date)."</div></td>\n" );
 echo( "<td><div align=\"center\">".$donnees->prix." &euro;</div></td>\n" );
 echo( "</tr>\n" );
}
echo( "</table>\n" );
?>

   <br/>
  <br/>
  
  <?php
}
else
{
?>
</p>
<p><br />
<h3>Pas de r&eacute;sultats</h3><br />
<p>Nous n'avons trouv&eacute; aucun r&eacute;sultats pour votre requ&ecirc;te "<?php echo $_POST['date1']; ?> au <?php echo $_POST['date2']; ?>". <br />
<a href="index.php?page=facturation">R&eacute;essayez</a> avec d'autres dates.</p>
<br />
<br />
<br />
<br />
<?php
}
mysql_close();
}
else
{
?>
<center>
<img src="../img/tfacturation.png">
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="Post">
<table width="431" height="93" border="0">
				  <tr>
				    <td width="175" height="47" align="right">Date de D&eacute;but :</td>
				    <td width="240" align="center"><input name="date1" type="text" id="datepicker" readonly="readonly" /></td>
			      </tr>
				  <tr>
				    <td height="40" align="right">Date de Fin :</td>
				    <td align="center"><input name="date2" type="text" id="datepicker2" readonly="readonly" /></td>
			      </tr>
  </table>
<br />
<INPUT border=0 src="../img/rechercher.png " type=image Value=submit align="middle"/>
</form>
<br />
<?php
}

?>
Les captures vonts peut être données des idées à un membres :


Index du Moteur Modifié:
Image

RÉSULTAT DU MOTEUR :
Image

Donc je souhaite exporter en PDF via FPDF/FPDI le résultat du moteur de recherche ci dessous (comme j'ai déja fait pour les fiche client factures et autres), j'ai essayé pas mal de méthodes mais rien ne passe.

Merci à vous.

PS: La mise en page n'est pas la version final

ViPHP
ViPHP | 3300 Messages

19 juin 2009, 10:18

pas compris ton probleme au millieu de ce flot d'info qui n'ont rien à voir :)
tu peux etre plus spécifique?
Fait du php depuis que ca existe ou presque :)

C3D
Petit nouveau ! | 9 Messages

19 juin 2009, 10:38

Bonjour et merci de te réponse,

Les infos en faite on toutes avoir quelques chose ensemble (le fonctionnement et le résultat), en faite j'aimerai exporté en PDF le résultat de mon moteur de recherche qui fonctionne entre deux dates, j'ai essayé a plusieurs reprise mais a chaque fois cela ne m'affiche qu'un seul client et non le résultat, donc je demande de l'aide.
J'ai utilisé la méthode (la même que j'utilise pour mes 5 autres PDF :

Code : Tout sélectionner

$this->Write(180,$_POST["nom"]);
peut être l'erreur vient de la

Cordialement.

ViPHP
ViPHP | 3300 Messages

19 juin 2009, 11:23

ben oui mais la tu nous force à deviner ce qui va pas, on a pas les infos nécessaires. personellement je ne vois pas comment t'aider sans avoir du code et des print_r de tes données sorties de la base de donnée.
Fait du php depuis que ca existe ou presque :)

C3D
Petit nouveau ! | 9 Messages

19 juin 2009, 14:43

J'avoue ne pas trop comprendre moi non plus sur ce coup la ? j'ai donné toutes les infos.

J'ai donné le code du moteur de recherche complet (sans le JS et autre addons), mon PDF ne fait pas appel à ma base directement (pas besoin je pense vu que je passe par le résultat de mon moteur de recherche), je le fait directement comme dit ci dessous comme cela $this->Write(180,$_POST["nom"]);

En gros ca marche comme cela :

- Je fait ma recherche
- On va dire que j'obtient 3 clients, il s'affiche dans un tableau.
- JE fait une impression via des "$this->Write(180,$_POST["nom"]);" directement en PDF

Mon erreur c'est qu'il m'affiche qu'un seul des 3 clients et je ne comprend pas pourquoi, je pense soit un probleme avec le variable Write du PDF.

Je n'ai pas eu trop de difficulté avec mes autres PDF mais la avec le moteur de recherche l'export PDF ne fonctionne pas.

Je ne sais comment être plus clair et plus précis je suis désolé, je demande juste de savoir si c'est ma fonction de faire pour généré mon PDF qui ne vas pas ou autres et non que l'on me fasse le script voir plus.

Je vais essayé de faire un autre moteur de recherche.

Cordialement.

PS: voici un test de generatepdf qui ne m'afiche qu'un seul client :

Code : Tout sélectionner

<?php define('FPDF_FONTPATH','pdf/font/'); require('pdf/fpdf.php'); require_once('pdf/fpdi.php'); require('fonctions_dates.php'); class PDF extends FPDI { //Tableau simple function BasicTable($header,$data) { //En-tête foreach($header as $col) $this->Cell(60,7,$col,1); $this->Ln(); //Données { $this->Cell(60,6,$col,1); $this->Ln(); } } //Tableau coloré function FancyTable($header,$data) { //Couleurs, épaisseur du trait et police grasse $this->SetFillColor(255,0,0); $this->SetTextColor(255); $this->SetDrawColor(128,0,0); $this->SetLineWidth(.3); $this->SetFont('','B'); //En-tête $w=array(70,60,40,15); 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 $this->Cell($w[0],6,$_POST[ 'nom' ],'LR',0,'L'); $this->Cell($w[1],6,$_POST[ 'ville' ],'LR',0,'L'); $this->Cell($w[2],6,$_POST[ 'date' ],'LR',0,'L'); $this->Cell($w[3],6,$_POST[ 'prix' ],'LR',0,'L'); $this->Ln(); } } $pdf=new PDF(); //Titres des colonnes $header=array('Client','Ville','Date','Prix'); //Chargement des données $pdf->SetFont('Arial','',14); $pdf->AddPage(); $pdf->FancyTable($header,$data); $pdf->Output(); ?>

ViPHP
ViPHP | 3300 Messages

19 juin 2009, 15:11

mkay alors déja, testes tes variables provenant d'une source sur lequel tu as peu ou pas de contrôle

les $_POST méritent d'être testé par exemple

Code : Tout sélectionner

if(!isset($_POST[ 'nom' ]) || !isset($_POST[ 'ville' ]) || !isset($_POST['date'])) { die('J\'m\'ai trompé'); }
ensuite je sais pas en quelle version de php tu es mais ta classe ressemble étrangement à du php4, c'est pas beau on définit les méthodes avec des niveau de lectures maintenant (public/protected/private) si tu as php5 bien sur.
Fait du php depuis que ca existe ou presque :)

C3D
Petit nouveau ! | 9 Messages

19 juin 2009, 15:26

Merci à toi

Alors pour la version de PHP voila exactement : PHP Version: 5.2.9-2

Concernant ce que tu m'a dit j'ai fait cela au plus vite pour ma boite perso je suis en train de refaire tous les code etc ...

Ensuite étant un grand débutant je ne comprend pas pourquoi testé les variables alors que celle-ci fonctionne enfin un client sur trois mais l'appel se fait bien mais je te fait confiance donc je le fait quand même :)

Encore merci

EDITION:
J'ai ajouté les if juste avant mon tableau d'affichage de résultat et j'ai bel et bien l'erreur (si j'ai mit les if au bon endroit)
Modifié en dernier par C3D le 19 juin 2009, 15:38, modifié 1 fois.

ViPHP
ViPHP | 3300 Messages

19 juin 2009, 15:36

ben l'idée est que toutes provenances, qui n'est pas controllable à 100% par le développeur doit être testée (ce qui explique d'ailleurs que la paranoia soit une déformation profesionnelle chez les codeurs et admin sys) donc, le post par exemple peut etre envoyé à partir d'une source différente de celle que tu as prévu initialement, et détournée pour être utilisée contre ton serveur (et donc te le pirater) le fait de le tester systématiquement est généralement une bonne habitude qui sauvera potentiellement quelques minutes et quelques sueurs froides dans un futur hypothétique :)

la paranoia = la paix
en informatique du moins :)
Fait du php depuis que ca existe ou presque :)

C3D
Petit nouveau ! | 9 Messages

19 juin 2009, 15:40

Ok je te remercie pour ces informations relativement précieuse pour la suite car même si cette appli est du 100% autonome (clef usb) on ne sais jamais ce que je vais fait par la suite.

Je commence depuis peu le PHP et j'ai déjà réussi à faire pas mal de chose avec ce langage je me suis surpris à réussir certains truc et j'en suis super content, il est clair que ce n'est pas parfait mais cela fonctionne très bien et mes clients et moi même en sont content :), maintenant que j'ai prix gout à cela je vais me mettre activement au PHP c'est un langage hallucinant avec énormément de possibilité.

J'ai edité mon post au dessus, nos posts ce sont croisé si j'ai bien mi les if ou il faillais j'ai une erreur en effet ...
Modifié en dernier par C3D le 19 juin 2009, 15:46, modifié 1 fois.

ViPHP
ViPHP | 3300 Messages

19 juin 2009, 15:45

Ok je te remercie pour ces informations relativement précieuse pour la suite car même si cette appli est du 100% autonome (clef usb) on ne sais jamais ce que je vais fait par la suite.

J'ai edité mon post au dessus, nos posts ce sont croisé si j'ai bien mi les if ou il faillais j'ai une erreur en effet ...
Je t'avouerais que c'est le deuxieme avantage des tests, c'est qu'on est souvent battu par l'ordinateur en matière de logique, on est pas parfait :)
Fait du php depuis que ca existe ou presque :)

C3D
Petit nouveau ! | 9 Messages

19 juin 2009, 15:48

Et je suis souvent battu par l'informatique a ce niveau la lol la preuve je comprend pas pourquoi les if ne me font pas de retour alors que mon ficher PDF fonctionne, c'est pas très logique en soit, il aurais du au moins m'affiché un client tous comme le PDF

EDITION :

J'ai refait un autre moteur de recherche et cela fait pareil pas d'affichage je vais finir par lâché l'affaire je le sens..
<form method="post" action="index.php?page=moteur">
<center>
  <p>&nbsp;    </p>
  <table width="100%" border="0">
    <tr>
      <td colspan="2" align="center" valign="middle"> Choisissez vos dates de facturation à calculer: </td>
      </tr>
    <tr>
      <td width="50%" align="right" valign="middle"><input type="text" name="date1" id="datepicker" /></td>
      <td width="50%"><input type="text" name="date2" id="datepicker2" /></td>
    </tr>
    <tr>
      <td height="54" colspan="2" align="center" valign="middle"><input type="submit" name="search" value="Rechercher" /></td>
      </tr>
  </table>

  </p>
</center>
</form>

<?
require('fonctions_dates.php');

$sql_server="localhost"; // Server où si situe la base de données
$sql_user="root"; // Login d'accès à la base de données
$sql_pass="root"; // Mot de passe d'accès à la base de données
$sql_bdd="bdd"; // Nom de la base de données

//connexion à la base de données
mysql_connect("$sql_server","$sql_user","$sql_pass")
or die("Erreur de connexion au serveur $sql_server");
mysql_select_db("$sql_bdd")
or die("Erreur de connexion à la base de données $sql_bdd");

if(isset($_POST['date1']) && $_POST['date2'] != NULL)
{
//$search_mod = "$mod"; // mode de recherche OR ou AND, pour indiquer si on fait un OU ou un ET des mots clefs


$date1 = htmlentities($_POST['date1'], ENT_QUOTES);
$date2 = htmlentities($_POST['date2'], ENT_QUOTES);

/*On construit la requête sql et on boucle afin que tous les mots de le requête soient intégrés à la recherche*/

$sql = " SELECT * FROM client WHERE date BETWEEN '$date1' AND '$date2'";

for($i=1 ; $i<$nb_words; $i++)
{

$sql.=" ".$_POST['mod']." `artiste` like \"%$tab[$i]%\" OR `titre` like \"%$tab[$i]%\" OR `genre` like \"%$tab[$i]%\" ";

}


$result = mysql_db_query($sql_bdd,$sql); // on execute la requête SQL.

if( $result )
{
if(mysql_num_rows($result)==0)

{
echo "<center><b>Il n'y a aucun r&eacute;sultats concernant votre recherche.</b></center>"; //si il n'y a pas de résultats
}

else

{

echo "<center><b>R&eacute;sultat(s)</b></center><br>";
echo '<form method=post action=pages/generatepdf_facturation.php>';
 echo '<center><table bgcolor="#FFFFFF" border="1" cellpadding="0" style="border-color:#999" width="800px">'."\n";
        // premi&egrave;re ligne on affiche les titres pr&eacute;nom et surnom dans 2 colonnes
       
        echo '<td background="img/fdc.png" width="56%" align="center"><b><u>Client</u></b></td>';
        echo '<td background="img/fdc.png" "width="20%" align="center"><b><u>Ville</u></b></td>';
		echo '<td background="img/fdc.png" width="12%" align="center"><b><u>Date & Heure</u></b></td>';

        echo '</tr>'."\n";
    // lecture et affichage des r&eacute;sultats sur 2 colonnes, 1 r&eacute;sultat par ligne. 

    while($row = mysql_fetch_array($result)) {
			 
 echo '<td bgcolor="#F9F9F9">'.$row['nom'].' '.$row['prenom'].' '.$row['titre'].'</td>';
        echo '<td bgcolor="#F9F9F9">'.$row['ville'].'</td>';
		echo '<td bgcolor="#F9F9F9">Le  '.dateFR($row['date']).'<p>&agrave; '.$row['heure'].'</td>';
        echo '</tr>'."\n";
		
		
    }
echo '</table>'."\n";
echo ' </form>'."\n";
}
mysql_free_result($result);

}

echo "<br>";
echo '<input border=0 src="../img/pdf.png" type=image value=submit align="middle" alt="Exporter PDF">'."\n";


}

//fermeture de la connexion
mysql_close();

?>

ViPHP
ViPHP | 3300 Messages

20 juin 2009, 14:58

tu ne testes toujours pas tout tes $_POST, tu devrais aussi coder avec error_reporting(E_ALL); en haut du script histoire de voire toutes les erreurs (pour coder plus propre c'est un must ça) aussi penses à faire des echo de tes requêtes sql avant envoi pour vérifier que ce qui est requêté est réellement ce que tu veux requêter et enfin fais des print_r() de tes résultats avant de les balancer dans le pdf :)
Fait du php depuis que ca existe ou presque :)

C3D
Petit nouveau ! | 9 Messages

20 juin 2009, 22:35

Je sais pas j'ai fonctionné comme les 5 ou 6 PDF que j'ai actuellement et cela na posé aucuns problèmes .. enfin pas graves je verrais cela .

Merci

ViPHP
ViPHP | 3300 Messages

22 juin 2009, 21:52

le debug en php c'est facile, suffit d'afficher avec des print_r, de jongler avec die et echo, et tu finis toujorus par piger ce qui se passes :)
Fait du php depuis que ca existe ou presque :)