problème de boucle avec update.........(résolu)

problème de boucle avec update.........(résolu) - PHP - Programmation

Marsh Posté le 08-08-2002 à 12:10:34    

re-re-salut, décidement je me débrouille mal, j'ai sans arret besoin de vous.
 
Je fait un script de petites annonces, et je voudrais qu'il supprime automatiquement les annonces de + de 60 jours.
 
pour le moment j'essai de remplir un champ que j'ai appellé "dif_jour" avec la différence des jours entre la date d'entrée et la date actuelle.
Le nombre de jours s'appelle "$jour[0]" et j'arrive à l'afficher dans chaque message, par exemple le 1er message a 31 jours et le 2eme 61 jours.
Le problème est qu'en utilisant la fonction update à l'interieur de WHILE, il me rempli tous les champs dif_jour avec 61 et ne tiens pas compte des autres.
 
Voici le bout de code
 
// variable qui contient la différence des 2 dates
 
$jour_affichage=mysql_query("select to_days(now()) - to_days(date) from annonces" );
 
//si le nombre de ligne de résultat>0 alors afficher les résultats un par un ainsi que le nombre de jours écoulés
 
if ($lignes!=0) {
while ($rows = mysql_fetch_array($result) and $jour = mysql_fetch_array($jour_affichage))
          {
//met à jour le champ dif_jour pour chaque enregistrement
 
mysql_query("update annonces SET dif_jour = $jour[0]" );
   
// affichage du tableau des annonces
   
echo ("<table border='0' cellpadding='2' cellspacing='2' width='70%' BGCOLOR='#454545'>
   <tr BGCOLOR='#000000'>
    <td>
     <table border='0' cellpadding='0' cellspacing='0' width='100%'>
      <tr>
       <td><b><FONT COLOR='#FF6600'>$rows[1]</FONT></b></td>
       <td align='right'>$rows[7]</td>
       
       <!-- comptage du nombre de jour d'affichage et là ca fonctionne-->
       
       
       <TD> déjà $jour[0] jours</TD>
       
      </tr>
     </table>
    </td>
   </tr>
   <tr>
    <td><B>$rows[4]</B></td>
   </tr>
   <tr>
    <td>
     <table border='0' cellpadding='0' cellspacing='0' width='100%'>
      <tr>
       <td><B><FONT COLOR='#0000FF'>Email:  </B></FONT><a href='mailto:$rows[3]'>$rows[3]</a></td>
       <td align='right'>" ); if ($rows[6]!=0) {echo"<B><FONT COLOR='#0000FF'>Tel:  </FONT>$rows[6]</B>";}
       echo ("</td>
      </tr>
     </table>
    </td>
   </tr>
  </table>
<br>
" );
}
echo "</tr></table>";


Message édité par mecano1 le 08-08-2002 à 14:39:00
Reply

Marsh Posté le 08-08-2002 à 12:10:34   

Reply

Marsh Posté le 08-08-2002 à 13:47:30    

Hoy hoy !!
 
j'ai pas tout lu mais pk n'utilises-tu pas :


UPDATE tabase SET dif_jour = to_days(NOW() - date)


 
de la même facon :


DELETE FROM tabase WHERE to_days(NOW() - date) > 60


 
puis tu fais ton SELECT ....


---------------
JeuxVideo.Records.Mame
Reply

Marsh Posté le 08-08-2002 à 14:27:19    

Je viens d'essayer ce que tu m'a donné, j'ai donc mis à l'interieur de while la commande update, mais il me rempli tous les champs dif_jour avec 0 alors que j'ai un enregistrement avec 31 jours et un autre avec 61 jours de différence
 
 
voilà le script que j'ai modifié:
 
 
if ($lignes!=0) {
while ($rows = mysql_fetch_array($result))
          {
 // mise à jour du champ dif_jour
   
mysql_query("UPDATE annonces SET dif_jour = to_days(NOW() - date)" );
 
   
echo ("<table border='0' cellpadding='2' cellspacing='2' width='70%' BGCOLOR='#454545'>
   <tr BGCOLOR='#000000'>
    <td>
     <table border='0' cellpadding='0' cellspacing='0' width='100%'>
      <tr>
       <td><b><FONT COLOR='#FF6600'>$rows[1]</FONT></b></td>
       <td align='right'>$rows[7]</td>
      </tr>
     </table>
    </td>
   </tr>
   <tr>
    <td><B>$rows[4]</B></td>
   </tr>
   <tr>
    <td>
     <table border='0' cellpadding='0' cellspacing='0' width='100%'>
      <tr>
       <td><B><FONT COLOR='#0000FF'>Email:  </B></FONT><a href='mailto:$rows[3]'>$rows[3]</a></td>
       <td align='right'>" ); if ($rows[6]!=0) {echo"<B><FONT COLOR='#0000FF'>Tel:  </FONT>$rows[6]</B>";}
       echo ("</td>
      </tr>
     </table>
    </td>
   </tr>
  </table>
<br>
" );
}

Reply

Marsh Posté le 08-08-2002 à 14:33:56    

en fait je crois que j'y arrive maintenant, ta méthode était bonne, il y avait juste un twist dans la formule de calcul, je l'ai transformé comme ceci:
 
$mise=mysql_query("UPDATE annonces SET dif_jour = to_days(NOW()) - to_days(date)" );

Reply

Marsh Posté le 08-08-2002 à 14:38:06    

oui c'est bon merci, j'ai essayé avec delete et mes enregistrement disparaissent quand ils ont + de 60 jours.
merci beaucoup :bounce:

Reply

Marsh Posté le 08-08-2002 à 14:52:56    

[:youyou2224]


---------------
JeuxVideo.Records.Mame
Reply

Marsh Posté le 08-08-2002 à 15:05:32    

arf
 
j'ai pas vu mais ta méthode UPDATE, mets là au dehors de la boucle while !!!
 
par contre j'y pense tu n'as pas besoin de cet update si dans ton select tu fais :  
 

SELECT *, (TO_DAYS(NOW()) - TO_DAYS(date)) as dif_jour FROM tabase .....


 
tu peux même les trier après avec ORDER BY dif_jour   ;)  
 
tu les affiches après grâce à  

Code :
  1. $qry = "SELECT *, (TO_DAYS(NOW()) - TO_DAYS(date)) as dif_jour FROM tabase .....";
  2. $result=mysql_query($qry);
  3. while ($record=mysql_fetch_array($result)) {
  4.    // évidemment ici tu mets ton annonce
  5.   echo $record["dif_jour"]."<br>";
  6. }


 
en espérant t'avoir un peu plus aider  :benetton:


Message édité par mahu le malin le 08-08-2002 à 15:06:21

---------------
JeuxVideo.Records.Mame
Reply

Sujets relatifs:

Leave a Replay

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