Page 1 sur 1

PHP +PDO+SMARTY

Posté : 30 juin 2008, 12:54
par nader198
Bonjour,
j'ai probleme un peu compliqué mais je me bloque et je trouve pas solution
en fete j'utilise PDO pour connexion avec mysql et smart comme moteur template
je me bloque dans une requete précise .
j'ai 1 table ou ou il ya 1 champs pour date . bien sur je pêux avoir milliers de lignes dans cete table
la requete que je veux la faire est parcourir cette table voir toutes les années existantes dans champs date puis affiche des liens par exemple: 2007----2008------2009 que lorsque on clique dessus une autyre requete va etre déclanché avec conditions de l'année . c'est a dire la requete a trouvé qu'il ya annee 2007 et annee 2008 et annee 2009..
j'ai utilisé requete suivante:

$requete_prepare_1=$connexion->prepare("select year(date) as date "); // on prépare notre requête
$requete_prepare_1->execute(array( 1 ));
$lignes=$requete_prepare_1->fetch(PDO::FETCH_OBJ);
$lignes->date.'<br />';

mais il affiche que la derniere ligne de la table

et aussi j'arrive pas a afficher résultat de PDO dans moteur tempate smarty surtout si'il s'agit de stoker tableau ou résultat de sql avec plusieurs résultats.
qu'elqu'un a une idée
merçi d'vance.

Posté : 30 juin 2008, 14:20
par katagoto
Regarde du côté de la fonction date()

De plus, ton problème viens de du SQL et non moteur de template, il n'était donc pas nécessaire de l'indiquer :lol:

Posté : 30 juin 2008, 14:22
par zeus
De plus, ton problème viens de du SQL et non moteur de template, il n'était donc pas nécessaire de l'indiquer :lol:
Dans une résolution de problème, on préfère trop d'informations que pas assez ... :roll:

Posté : 30 juin 2008, 14:46
par nader198
merçi les gars de me répondre.
vu mon aplication est un peu compliqué j'ai pas voulu vraiment parler de détails mais je vais essayer de simplifier explication a fin que vous puissiez m'aider
en effet j'ai beaucoup de table qui ont 2 champs comune sont date_debut et date_fin
mon application a pour but de calculer nombre de jour total soit conges soit de formation par semaine et par mois.
bien sur mes requetes marche bien avec smarty et PDO .juste j'ai voulu quand utilisateur clique sur bouton conges par exemple le script comence a afficher nombre de jour total par semaine de l'annee de date systeme. puis en fonctions des dates qui existent dans la table . des liens vont etre affichées sous formes des années et le script va affihé résultat selon année qu'on a cliqué.
en fete j'ai besoin de ça aussi pour améliorer application avec ajout de graphique qui affichera difference entre année actuelle et année précédente par exemple.
j'espere j'étais claire sinon si vous voulez aussi je vais ecrire tout le script si jamais vous n'avez pas compris mon probleme
merçi

Posté : 30 juin 2008, 14:58
par katagoto
Si je comprends bien, tu devrait faire deux parties, la première affiche tout et l'autre affiche une année, essaye de voir du côté de GROUP BY (en SQL), d'après ce que j'ai compris, ça pourrait répondre à ta problématique...

Posté : 30 juin 2008, 16:28
par nader198
oui t'a raiosn
[color=red]configuration.php[/color] 
<?php 
$PARAM_hote='localhost'; // le chemin vers le serveur 
$PARAM_nom_bd='cm'; // le nom de votre base de données 
$PARAM_utilisateur='root'; // nom d'utilisateur pour se connecter 
$PARAM_mot_passe=''; // mot de passe de l'utilisateur pour se connecter 
try 
{ 
$connexion = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe); 
} 

catch(Exception $e) 
{ 
echo 'Erreur : '.$e->getMessage().'<br />'; 
echo 'N° : '.$e->getCode(); 
} 


?> 

fichier conges.php 
require_once('Smarty-2.6.18/libs/Smarty.class.php'); 
require_once('Smarty-2.6.18/libs/SmartyPaginate-1.6/libs/SmartyPaginate.class.php'); 
require_once('configuration.php'); 
$oSmarty = new Smarty(); 
SmartyPaginate::connect(); 
// set items per page 
SmartyPaginate::setLimit(25); 





/****************************************************** LES REQUETES POUR CALCUL DE JOUR ***********************************************************/ 
$sql="SELECT SAR, Date_debut,Date_fin, " 
. "WEEK( Date_debut) AS wDebut,DAYOFWEEK( Date_debut) AS wsDebut," 
. "TO_DAYS( Date_debut) AS dDebut,TO_DAYS( Date_fin ) AS dFin, year( Date_debut) AS yDebut,year( Date_fin) AS yfin " 
. " FROM atm_2008 " 
. " WHERE YEAR(Date_debut) ='2008' AND TYPE like 'CM%' "; 


for( $i=1; $i<53; $i++ ) 
$nbrJours7[ ] = 0; 

foreach ($result as $row) 
{ 


$agent1 = $row['SAR']; 
$semaine1 = $row['wDebut']; 
$jourSemaine1 = $row['wsDebut']; // dimanche = 1 
$jourDebut1 = $row['dDebut']; 
$jourFin1 = $row['dFin']; 



for( $jour1 = $jourDebut1; $jour1 <= $jourFin1; $jour1++ ) 
{ 




if( $jourSemaine1 > 1 AND $jourSemaine1 <=7 ) 
$nbrJours7[ $semaine1]++; 
$jourSemaine1++; 
if( $jourSemaine1 > 7 ) 

{ 

$semaine1++; $jourSemaine1 = 1; 

} 
} 

} 

$total='<p><div class=text>'.implode("<div class='tab'></div>",$nbrJours7).'</div>' ; 
$somme_total=array_sum($nbrJours7); 
$oSmarty->assign("total", $total); 
$oSmarty->assign("somme_total",$somme_total); 
$oSmarty->display('index.tpl'); 

le fichier template index.tpl 

<td class="tab_resultat"> 
{$total} 
</td> 
bien sur c'est bout de code mais pour ne pas ecrire trop
maintenant structure de la tabe contient des champs dont :
|date_debut |-----|date_fin|
2008-01-05 2008-01-08

maintenant imaginez que dans cete table y'a des date de 2007 et 2006 donc je dois parcourir aussi cette table pour il affiche les année qui existe dans la table comme des liens et lorsque on clique sur lien 2007 requet en haut charge en 2007 au lieu de 2008. but de jeu ce que lorsque on atteint 2009 lors insertion dans la table ça va apparitre automatiquent lien 2009 etc...faut savoir on peut inserer date fin 2009 meme en 2008 . tu sais conges commence par exemple novembre 2008 et termine 2009
j'espere vous avez compris et j'espere modérateur va pas supprimer mon message car je croix que c'est un peu long