Surligne ligne avec condition

Eléphanteau du PHP | 22 Messages

23 nov. 2010, 10:02

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

ViPHP
ViPHP | 5462 Messages

23 nov. 2010, 11:09

14/11/2010-13:43 n'est pas un format standard, utilise date_parse_form_format

Eléphanteau du PHP | 22 Messages

23 nov. 2010, 12:37

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
?>

ViPHP
ViPHP | 5462 Messages

23 nov. 2010, 14:25

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
Modifié en dernier par stealth35 le 23 nov. 2010, 15:52, modifié 1 fois.

Eléphanteau du PHP | 22 Messages

23 nov. 2010, 15:15

Ok je vais essayer ce soir je te tiens au courant

Merci

Eléphanteau du PHP | 22 Messages

24 nov. 2010, 09:34

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

ViPHP
ViPHP | 5462 Messages

24 nov. 2010, 11:01

regarde bien la doc de date_parse_from_format et tu comprendra :wink:

Eléphanteau du PHP | 22 Messages

24 nov. 2010, 12:11

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;
?>

ViPHP
ViPHP | 5462 Messages

24 nov. 2010, 12:15

montre comment t'as fait ton date_parse_from_format

Eléphanteau du PHP | 22 Messages

24 nov. 2010, 12:22

$date = date("d-m-Y");
$date2=date_parse_from_format(($row['maj']),$date);

ViPHP
ViPHP | 5462 Messages

24 nov. 2010, 12:25

et $row['maj'] ca correspond a quoi par exemple ?

Eléphanteau du PHP | 22 Messages

24 nov. 2010, 12:29

Ca correspond que la date du jour dois comparer toute les dates la colonne MAJ

ViPHP
ViPHP | 5462 Messages

24 nov. 2010, 12:30

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 ?

Eléphanteau du PHP | 22 Messages

24 nov. 2010, 12:32

Si j'arrete pas de la lire mais je suis perdu

ViPHP
ViPHP | 5462 Messages

24 nov. 2010, 12:43

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);