[ RESOLU ] [ PHP ] Modification de chaines

Modification de chaines [ RESOLU ] [ PHP ] - PHP - Programmation

Marsh Posté le 29-10-2007 à 16:47:56    

Bonjours, je vous expose mon probleme :
 
Sur une gallerie, dans une table Sql, je souhaite inscrire la date ( mais pas la date de l'ajout a la gallerie, une date qu'on ajoute manuellement par formulaire, qui correspond a la date de creation de la photo ), Sous la forme 01.01.07.
 
Ensuite je balance un triage Sql, pour faire un classement par année.
 
Le seul probleme c'est que Sql trie litterallement les expression, et me pond donc une ligne par date, donc sa ne fonctionne pas.
 
Comment je pourrai faire en php pour lui dire de ne pas regarder les premiere valeur "01.01." ( quite a mettre une autre valeur a la place ), et ne pouvoir garder que la derniere expression ?
 

Code :
  1. $date2 = str_replace(" . ", ". ", $date2);


 
Je penssai a un truc de cette forme, mais j'y connait fichtre rien en php un peu approfondi.
 
Merci d'avance :)
 
Resolution :
 
 

Code :
  1. $sql = 'SELECT distinct id,date,mini  FROM galerie_tbl ORDER BY YEAR(date) DESC';
  2. // on envoie la requête
  3. $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  4. // SELECTION DU SKIN
  5. if(isset($_GET["css"])){ $css = $_GET["css"]; }else echo "FAUT CHOISIR UN SKIN";
  6. $current_date = 'XXXX';
  7. $limite = 6;
  8. // on fait une boucle qui va faire un tour pour chaque enregistrement
  9. while($data = mysql_fetch_assoc($req))
  10.     {
  11. // on affiche les informations de l'enregistrement en cours
  12.   $id = $data['id'];
  13.   $mini = $data['mini'];
  14.   $date = substr($data['date'], 0, 4);
  15.   //echo "Date : <$date> <br></br>";
  16.   //echo "Current date : < $current_date ><br></br>" ;
  17.   if ($current_date != $date) {
  18.   $current_date = $date;
  19.   echo "<br><a href=\"page.php?rubrique=galerie2&date=$date&css=$css\" class=\"galerie_lien\" target=\"_self\"><font class=\"galerie_lien\">$date</font></a><br>";
  20.   $limite = 6;
  21.  }
  22.  if ($limite > 0)
  23.   echo "<a HREF=\"#\"onClick=\"popupcentre('_photo.php?id=$id','','scrollbars=no ,width=780,height=650');return(false)\"><img src=$mini width=\"100\" height=\"100\" border=\"4\"></a> ";
  24.  $limite -= 1;
  25. }
  26.      
  27. // on ferme la connexion à mysql
  28. mysql_close();


Message édité par _Rit0n_ le 01-11-2007 à 01:51:49

---------------
Site web : http://nobock.fr
Reply

Marsh Posté le 29-10-2007 à 16:47:56   

Reply

Marsh Posté le 29-10-2007 à 16:59:07    

Tu peux réorganiser par année facilement en SQL :

Code :
  1. ... ORDER BY YEAR(`champdate`) ...

Reply

Marsh Posté le 29-10-2007 à 17:09:16    

apercu de la page ici > http://nobock.fr/page.php?rubrique=niak&css=_niak
 
En fait le select sur sql ce fait comme sa :  
 

Code :
  1. // on crée la requête SQL
  2. $sql = 'SELECT distinct date FROM galerie_tbl ORDER BY date DESC';


 
Le truc qui aurai été le plus simple ( sa doit etre la solution ),  
 
Sa serai un truc du genre :
 
la variable Date2 > supprimer les 5 premier caractere en partant de la gauche,  réenregistrer dans date2 ( qui lui repasse dans une moulinette pour un classement de chaque année ).
 
J'ai trouvé la fonction n substr_replace qui pourrai fonctionner, mais je sait pas comment on peut lui faire comprendre de mettre une etoile *, pour subtiliser n'importe quelle valeur ensuite.
 


---------------
Site web : http://nobock.fr
Reply

Marsh Posté le 29-10-2007 à 17:23:56    

Fait-ça directement dans le SQL, ça sera plus rapide :

Code :
  1. $sql = 'SELECT distinct date FROM galerie_tbl ORDER BY YEAR(date) DESC';

Message cité 1 fois
Message édité par FlorentG le 29-10-2007 à 17:24:06
Reply

Marsh Posté le 29-10-2007 à 19:18:27    

ou alors réorganise la structure de tes dates en utilisant le format japonais : yyyy-mm-dd, après tu peux trier "alphabétiquement" et tu auras le bon ordre


---------------
The Rom's, à votre service
Reply

Marsh Posté le 29-10-2007 à 20:31:56    

FlorentG a écrit :

Fait-ça directement dans le SQL, ça sera plus rapide :

Code :
  1. $sql = 'SELECT distinct date FROM galerie_tbl ORDER BY YEAR(date) DESC';



 
 
Ok, je vais essayer, mais bon dans mon champs date, je doit lui definir la YEAR, et je fait comment ( mon champ date est 01.01.07 )
 
 
Il y aura la reponse la bas :
 
http://www.laltruiste.com/document [...] heure.html
 
On va test et j'en dit + dans la soirée


---------------
Site web : http://nobock.fr
Reply

Marsh Posté le 30-10-2007 à 09:40:32    

_Rit0n_ a écrit :

Ok, je vais essayer, mais bon dans mon champs date, je doit lui definir la YEAR, et je fait comment ( mon champ date est 01.01.07 )


tu utilises la fonction mysql year qui s'applique sur un champ type date (voir la doc) et que FlorentG te conseille depuis le début [:w3c compliant]

TheRom_S a écrit :

ou alors réorganise la structure de tes dates en utilisant le format japonais : yyyy-mm-dd, après tu peux trier "alphabétiquement" et tu auras le bon ordre


[:prozac]

Reply

Marsh Posté le 30-10-2007 à 10:46:20    

Code :
  1. $sql = 'SELECT distinct date FROM galerie_tbl ORDER BY YEAR(date) DESC';


 
Sa marche nickel, mais maintenant le probleme, c'est qu'ensuite  
 
En fait avec year effectivement sa marchait, sauf que c'etait en fait ensuite un autre probleme qui survenait.
 
Le classement s'éffectue par année, mais le probleme c'est qu'ensuite je charge l'info apres l'avoir classée
 

Code :
  1. // on affiche les informations de l'enregistrement en cours  $date = $data['date'];


 
Et du coup la date complete apparait, au lieu de juste l'année, et sa me crée une ligne par thumb.
 
Faudrai un truc du genre :
 

Code :
  1. // on affiche les informations de l'enregistrement en cours  $date = $data['YEAR(date)'];


 
Mais bon mes conaissance en php sont tres limité, et encore plus en sql, vu que c'est pas vraiment mon metier.
 
Merci pour tout ces conseil !
 


---------------
Site web : http://nobock.fr
Reply

Marsh Posté le 30-10-2007 à 10:52:57    

Tu peux mettre :

Code :
  1. SELECT YEAR(`date`) AS `annee` FROM `galerie_tbl` ORDER BY `annee`DESC

Reply

Marsh Posté le 30-10-2007 à 11:43:16    

En fait un
 
 

Code :
  1. $date = substr("$date", 0, 4);


 
Suffit largement, comme sa il me charge la date , ex : " 2007.01.01 " , et ne garde que l'année " 2007 ".
 
Par contre apres pour ma seconde requette
 

Code :
  1. $sql2 = "SELECT id,date,mini FROM galerie_tbl WHERE date  = '$date' ORDER BY id DESC LIMIT 0,6";


 
Elle selectionne 6 thumb par année, mais le probleme c'est que sa trie par rapport a la date exacte, et que ici la variable $date ne contient que l'année.
 


---------------
Site web : http://nobock.fr
Reply

Marsh Posté le 30-10-2007 à 11:43:16   

Reply

Marsh Posté le 30-10-2007 à 11:44:17    

Rajoute un year :

Code :
  1. WHERE YEAR(date) = '$date'

Reply

Marsh Posté le 30-10-2007 à 11:52:45    

Code :
  1. $sql2 = "SELECT id,date,mini FROM galerie_tbl WHERE YEAR(date)  = '$date' ORDER BY id DESC LIMIT 0,6";


 
Transmission de penssée, le temps que je fasse validé et j'ai trouver sa, par contre sa me pond toujours plusieur ligne ( faudrai que je fasse des recoupement ).
 
Apres recoupement, une ligne est crée pour chaque valeur d'anné, mais par contre l'organisation ce passe nickel.


---------------
Site web : http://nobock.fr
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed