Page 1 sur 3

Surligne ligne avec condition

Posté : 23 nov. 2010, 10:02
par guilstunt
Bonjour a tous!!!

Je bloque sur un petit probleme:

J'ai un tableau dans lequel on rentre des stats régulierement et j'aimerai que la personne qui n'est pas rentré ses stats au bout d'une semaine soit surligné en rouge.

J'ai une colonne MAJ, dans lequel s'affiche automatiquement la date du jour des qu'il valide ses nouvelles stats.
Avant ma colonne MAJ etait en Varchar, donc la date s'affichait bien dans la BDD lorsqu'on validait les stats.

Mais vu que je veut surligné la ligne de la personne qui n'a pas rentré ses stats au bout semaine on m'a dis de mettre ma colonne MAJ en DateTime.

Donc je l'ai mise en DateTime maintenant j'ai que 00/00/00 00:00:00

J'ai cette erreur:
Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() [<a href='datetime.--construct'>datetime.--construct</a>]: Failed to parse time string (14/11/2010-13:43) at position 0 (1): Unexpected character' in C:\wamp\www\test\modifier_stats.php:134 Stack trace: #0 C:\wamp\www\test\modifier_stats.php(134): DateTime->__construct('14/11/2010-13:4...') #1 C:\wamp\www\test\modifier_stats.php(169): buildClodoTable('') #2 {main} thrown in C:\wamp\www\test\modifier_stats.php on line 134

Voici mon code ou l'on rentre nos stats:
<?php

date_default_timezone_set('Europe/Paris');
$date = new DateTime();
$date->format('Y-m-d');

//On se connecte a la Base de donnee
include('mysqlcnn.php');
//On verifie si lutilisateur est connecte
if(isset($_SESSION['Clodo']))
{
   //On verifie si le formulaire a ete envoye
   if(isset($_POST['ATT'], $_POST['DEF'], $_POST['habilite'], $_POST['attaque'], $_POST['defense']))
   {
               $ATT = mysql_real_escape_string($_POST['ATT']);
               $DEF = mysql_real_escape_string($_POST['DEF']);
               $fightvalue=($ATT*1.1)+$DEF;
               $habilite = mysql_real_escape_string($_POST['habilite']);
               $attaque = mysql_real_escape_string($_POST['attaque']);
               $defense = mysql_real_escape_string($_POST['defense']);
               
               
               
                  //On modifie les informations de l utilisateur avec les nouvelles
                  if(mysql_query('update stats set ATT="'.$ATT.'", DEF="'.$DEF.'", Fightvalue="'.$fightvalue.'", habilite="'.$habilite.'", attaque="'.$attaque.'", defense="'.$defense.'", MAJ='.$date.' where Clodo="'.$_SESSION['Clodo'].'"'))
                  {
                     //Si ca a fonctionne, on naffiche pas le formulaire
                     $form = true;

      
                  }
                  else
                  {
                     //Sinon on dit quil y a eu une erreur
                     $form = true;
                     $message = 'Une erreur est survenue lors des modifications.';
                  }
               
               
            }
         }
         
         //Sinon, on dit que les mots de passes ne sont pas identiques
         //$form = true;
         //$message = 'Les mot de passe que vous avez entré ne sont pas identiques.';
      
   
   else
   {
      $form = true;
   }
   if($form)
   {
      //On affiche un message sil y a lieu
      if(isset($message))
      {
         echo '<strong>'.$message.'</strong>';
      }
      //Si le formulaire a deja ete envoye on recupere les donnes que lutilisateur avait deja insere
      if(isset($_POST['ATT'],$_POST['DEF'],$_POST['habilite'],$_POST['attaque'],$_POST['defense']))
      {
         $ATT = htmlentities($_POST['ATT']);
            $DEF = htmlentities($_POST['DEF']);
         $habilite = htmlentities($_POST['habilite']);
         $attaque = htmlentities($_POST['attaque']);
         $defense = htmlentities($_POST['defense']);

      }
      else
      {
         //Sinon, on affiche les donnes a partir de la base de donnee
         $dnn = mysql_fetch_array(mysql_query('select ATT,DEF,habilite,attaque,defense from stats where Clodo="'.$_SESSION['Clodo'].'"'));
         $ATT = htmlentities($dnn['ATT']);
         $DEF = htmlentities($dnn['DEF']);
         $habilite = htmlentities($dnn['habilite']);
         $attaque = htmlentities($dnn['attaque']);
         $defense = htmlentities($dnn['defense']);
      }
      //On affiche le formulaire
?>
Voici mon code pour afficher le tableau avec mon code pour surligner au bout de 7 jours:
<?php

// Fonction pour construire une table à partir des résultat de la requête
function buildClodoTable($where='') {

    // Ajouter la clause where si définie (par défaut, tout le temps)
 

    // Construire la requete
    $query = "SELECT Clodo,ATT,DEF,Fightvalue,habilite,Attaque,defense,MAJ FROM stats WHERE Type='Equipier' ORDER BY Id DESC ";
 
    // Executer la requete
    $result = mysql_query($query);
 if ($result==false) {
 
    }
    $lines = '';
    while ($row = mysql_fetch_array($result)) {
 $date = new DateTime();
$date->format('Y-m-d');

$interval = date_diff(new datetime($row['MAJ']),new DateTime());
if($interval->format('%R%d') >= 7) $style = 'background-color:red';
else $style = '';
 
 
    $lines .= '
    <tr style="'.$style.'">
        <td>'.$row['Clodo'].'</td>
        <td>'.$row['ATT'].'</td>
        <td>'.$row['DEF'].'</td>
      <td>'.$row['Fightvalue'].'</td>
        <td>'.$row['habilite'].'</td>
        <td>'.$row['Attaque'].'</td>
        <td>'.$row['defense'].'</td>
    <td>'.$row['MAJ'].'</td>
 
    </tr>';
    }
    return '
<table border="1" cellpadding=5 cellspacing=5 height=50>
    <tr>
        <th class="name"> Nom clodo </th>
        <th> ATT </th>
        <th> DEF </th>
      <th> Fightvalue </th>
        <th> habilité </th>
        <th> attaque </th>
        <th> défense </th>
      <th> MAJ </th>
 
    </tr>'.$lines.'
</table>';
}

 //Construire le tableau à partir du résultat de la requête
    $table = buildClodoTable($where='');
 
    echo $table; 
?>
Merci de votre aide

Re: Surligne ligne avec condition

Posté : 23 nov. 2010, 11:09
par stealth35
14/11/2010-13:43 n'est pas un format standard, utilise date_parse_form_format

Re: Surligne ligne avec condition

Posté : 23 nov. 2010, 12:37
par guilstunt
J'ai essaye avec ce que tu viens de dire

maintenant j'ai cette erreur:

Warning: date_parse_from_format() expects parameter 2 to be string, object given in C:\wamp\www\test\modifier_stats.php on line 22

Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() [<a href='datetime.--construct'>datetime.--construct</a>]: Failed to parse time string (14/11/2010-13:43) at position 0 (1): Unexpected character' in C:\wamp\www\test\modifier_stats.php:136 Stack trace: #0 C:\wamp\www\test\modifier_stats.php(136): DateTime->__construct('14/11/2010-13:4...') #1 C:\wamp\www\test\modifier_stats.php(171): buildClodoTable('') #2 {main} thrown in C:\wamp\www\test\modifier_stats.php on line 136

Le bout de code que j'ai changé
<?php

date_default_timezone_set('Europe/Paris');
$date = new DateTime();
$date_format='Y-m-d';
$date2=date_parse_from_format($date_format, $date);


//On se connecte a la Base de donnee
include('mysqlcnn.php');
//On verifie si lutilisateur est connecte
if(isset($_SESSION['Clodo']))
{
   //On verifie si le formulaire a ete envoye
   if(isset($_POST['ATT'], $_POST['DEF'], $_POST['habilite'], $_POST['attaque'], $_POST['defense']))
   {
               $ATT = mysql_real_escape_string($_POST['ATT']);
               $DEF = mysql_real_escape_string($_POST['DEF']);
               $fightvalue=($ATT*1.1)+$DEF;
               $habilite = mysql_real_escape_string($_POST['habilite']);
               $attaque = mysql_real_escape_string($_POST['attaque']);
               $defense = mysql_real_escape_string($_POST['defense']);
               
               
               
                  //On modifie les informations de l utilisateur avec les nouvelles
                  if(mysql_query('update stats set ATT="'.$ATT.'", DEF="'.$DEF.'", Fightvalue="'.$fightvalue.'", habilite="'.$habilite.'", attaque="'.$attaque.'", defense="'.$defense.'", MAJ='.$date.' where Clodo="'.$_SESSION['Clodo'].'"'))
                  {
                     //Si ca a fonctionne, on naffiche pas le formulaire
                     $form = true;

      
                  }
                  else
                  {
                     //Sinon on dit quil y a eu une erreur
                     $form = true;
                     $message = 'Une erreur est survenue lors des modifications.';
                  }
               
               
            }
         }
         
         //Sinon, on dit que les mots de passes ne sont pas identiques
         //$form = true;
         //$message = 'Les mot de passe que vous avez entré ne sont pas identiques.';
      
   
   else
   {
      $form = true;
   }
   if($form)
   {
      //On affiche un message sil y a lieu
      if(isset($message))
      {
         echo '<strong>'.$message.'</strong>';
      }
      //Si le formulaire a deja ete envoye on recupere les donnes que lutilisateur avait deja insere
      if(isset($_POST['ATT'],$_POST['DEF'],$_POST['habilite'],$_POST['attaque'],$_POST['defense']))
      {
         $ATT = htmlentities($_POST['ATT']);
            $DEF = htmlentities($_POST['DEF']);
         $habilite = htmlentities($_POST['habilite']);
         $attaque = htmlentities($_POST['attaque']);
         $defense = htmlentities($_POST['defense']);

      }
      else
      {
         //Sinon, on affiche les donnes a partir de la base de donnee
         $dnn = mysql_fetch_array(mysql_query('select ATT,DEF,habilite,attaque,defense from stats where Clodo="'.$_SESSION['Clodo'].'"'));
         $ATT = htmlentities($dnn['ATT']);
         $DEF = htmlentities($dnn['DEF']);
         $habilite = htmlentities($dnn['habilite']);
         $attaque = htmlentities($dnn['attaque']);
         $defense = htmlentities($dnn['defense']);
      }
      //On affiche le formulaire
?>

Re: Surligne ligne avec condition

Posté : 23 nov. 2010, 14:25
par stealth35
mais ca sert a rien ce que t'as fais la, c'est a la ligne ou y'a l'erreur qui faut faire une manipe :wink: , y'a quoi au environ de la ligne 136

Re: Surligne ligne avec condition

Posté : 23 nov. 2010, 15:15
par guilstunt
Ok je vais essayer ce soir je te tiens au courant

Merci

Re: Surligne ligne avec condition

Posté : 24 nov. 2010, 09:34
par guilstunt
Bonjour,

j'ai modifier mon code maintenant j'ai cette erreur:

Warning: date_parse_from_format() expects parameter 1 to be string, object given in C:\wamp\www\test\modifier_stats.php on line 133

Fatal error: Call to a member function format() on a non-object in C:\wamp\www\test\modifier_stats.php on line 134
  while ($row = mysql_fetch_array($result)) {
$date = new DateTime();

$date2=date_parse_from_format(new datetime($row['MAJ']), $date);
if($date2->format('%R%d') >= 7) $style = 'background-color:red';
else $style = '';
Le code contient la ligne 130 a 135

Merci de votre aide

Re: Surligne ligne avec condition

Posté : 24 nov. 2010, 11:01
par stealth35
regarde bien la doc de date_parse_from_format et tu comprendra :wink:

Re: Surligne ligne avec condition

Posté : 24 nov. 2010, 12:11
par guilstunt
Je viens de modifier mon code

je n'ai plus d'erreur mais dans ma colonne MAJ les dates ne s'inscrive plus
<?php

// Fonction pour construire une table à partir des résultat de la requête
function buildClodoTable($where='') {

    // Ajouter la clause where si définie (par défaut, tout le temps)
 

    // Construire la requete
    $query = "SELECT clodo,ATT,DEF,fightvalue,habilite,attaque,defense,maj FROM membre ORDER BY Id DESC ";
 
    // Executer la requete
    $result = mysql_query($query);
 if ($result==false) {
 
    }
    $lines = '';
    while ($row = mysql_fetch_array($result)) {
$date = date("d-m-Y");
$date2=date_parse_from_format(($row['maj']),$date);
if($date2>= 7) $style = 'background-color:red';
else $style = '';
 
 
    $lines .= '
    <tr style="'.$style.'">
        <td>'.$row['clodo'].'</td>
        <td>'.$row['ATT'].'</td>
        <td>'.$row['DEF'].'</td>
      <td>'.$row['fightvalue'].'</td>
        <td>'.$row['habilite'].'</td>
        <td>'.$row['attaque'].'</td>
        <td>'.$row['defense'].'</td>
    <td>'.$row['maj'].'</td>
 
    </tr>';
    }
    return '
<table border="1" cellpadding=5 cellspacing=5 height=50>
    <tr>
        <th class="name"> Nom clodo </th>
        <th> ATT </th>
        <th> DEF </th>
      <th> Fightvalue </th>
        <th> habilité </th>
        <th> attaque </th>
        <th> défense </th>
      <th> MAJ </th>
 
    </tr>'.$lines.'
</table>';
}

 //Construire le tableau à partir du résultat de la requête
    $table = buildClodoTable($where='');
 
    echo $table;
?>

Re: Surligne ligne avec condition

Posté : 24 nov. 2010, 12:15
par stealth35
montre comment t'as fait ton date_parse_from_format

Re: Surligne ligne avec condition

Posté : 24 nov. 2010, 12:22
par guilstunt
$date = date("d-m-Y");
$date2=date_parse_from_format(($row['maj']),$date);

Re: Surligne ligne avec condition

Posté : 24 nov. 2010, 12:25
par stealth35
et $row['maj'] ca correspond a quoi par exemple ?

Re: Surligne ligne avec condition

Posté : 24 nov. 2010, 12:29
par guilstunt
Ca correspond que la date du jour dois comparer toute les dates la colonne MAJ

Re: Surligne ligne avec condition

Posté : 24 nov. 2010, 12:30
par stealth35
Ca correspond que la date du jour dois comparer toute les dates la colonne MAJ
date_parse_from_format attend un format de date pas une date...
t'as pas lu la doc ?

Re: Surligne ligne avec condition

Posté : 24 nov. 2010, 12:32
par guilstunt
Si j'arrete pas de la lire mais je suis perdu

Re: Surligne ligne avec condition

Posté : 24 nov. 2010, 12:43
par stealth35
Si j'arrete pas de la lire mais je suis perdu
qu'est ce que tu comprends pas la dedans :
$date = "6.1.2009 13:00+01:00";
$date 2 =date_parse_from_format("j.n.Y H:iP", $date);