Avatar billede MSR Juniormester
29. april 2013 - 19:19 Der er 6 kommentarer og
1 løsning

Time if i udtræk

Hej eksperten.
jeg har lidt bøvl med en IF sætning i mit udtræk.
jeg tror det er fordi jeg bruger strtotime forkert?
jeg vil gerne have at tabellen skifter farve når timestamp (deres login) er mere end en uge gammel. derfor 60*60 osv...
Her er koden:

$bgcolor="";
  for($i=0; $i<$num_rows; $i++){
        if($session->time > (strtotime(($timestamp)- 60*60*24*7))){ $bgcolor='#536ca6';} Else { $bgcolor='#EEAA00';}
      $uname  = mysql_result($result,$i,"username");
      $ulevel = mysql_result($result,$i,"userlevel");
      $email  = mysql_result($result,$i,"email");
      $time  = mysql_result($result,$i,"timestamp");
      echo "<tr bgcolor='".$bgcolor."'><td>$uname</td><td>$ulevel</td><td>$email</td><td><span class='dropt'>$time<span style='width:200px;'>$time</span></span></td></tr>\n";
  }

På forhånd tak

Magnus
29. april 2013 - 20:39 #1
Og hvori består dit bøvl?  Får du tabelen skrevet ud med det forventede indhold men ikke de forventede farver?  Er alle farverne ens i stedet for at variere mellem #536ca6 og #EEAA0?  I så fald hvilken af farverne får du?  Fortæl hvor det du får er noget andet end det du forventede.
Avatar billede MSR Juniormester
29. april 2013 - 22:15 #2
Undskyld ja. jeg kan godt se at jeg slet ikke nævner fejlen. Det er netop som du siger at alle linjerne er i den sidstnævnte farve (else farven) og det burde de jo ikke.
Det er som om jeg har skrevet det første forkert hvilket naturligvis "aktiverer" else call´et.

Magnus
30. april 2013 - 08:04 #3
Ja, det ser ud til at variabelen $session->time aldrig bliver større end variabelen $timestamp minus 60*60*24*24 gjort til unix timestamp.  Så er spørgsmålet naturligvis hvad du har stående i de to variabler $session->time og $timestamp.  Du kan prøve at skrive dem ud ved midlertidigt i toppen af kodeafsnittet at skrive:

echo "SESSIONTIME = ";var_dump($session->time);echo "<br>TIMESTAMP = ";var_dump($timestamp);die;

Hvis det viser sig, at $session->time er NULL, så forklarer det naturligvis, hvorfor den aldrig bliver større end en anden variabel.  Og det skulle ikke undre mig hvis $session->time er NULL.  $session er normalt en array, således at hvis der er et time element skal det hentes ved $session['time'].

Og så undrer din brug af strtotime mig, som du selv er inde på.  Ifølge  http://php.net/manual/en/function.strtotime.php forandrer strtotime en engelsk datotid beskrivelse til et Unix timestamp.  Hvis variabelen $timestamp indeholder en unix timestamp (antal sekunder siden 1 januar 1970) og $session['time'] en engelsk datotid beskrivelse, så skal det jo være omvendt, noget i retning af

if(stototime($session['time']) - 60*60*24*7 > $timestamp){ $bgcolor='#536ca6';}

Prøv at kik på det og meld tilbage.
Avatar billede MSR Juniormester
30. april 2013 - 22:16 #4
Hej Christian. jeg vender lige tilbage i morgen. jeg prøver frem og tilbage da dette er en del af en længere side. jeg kan ikke blot paste dine "echoes" ind i toppen. Der er $ slet ikke erklæret endnu...
Jeg skriver igen, tak for nu

Magnus
Avatar billede MSR Juniormester
03. maj 2013 - 15:43 #5
Hej igen.
jeg har prøvet mig lidt frem og afhængig af hvor jeg smider echos´ ind, får jeg forskellige værdier. altså enten en timestamp eller NULL.
jeg prøver her at smide noget mere af koden:

/* Display table contents */
  echo "<table align=\"left\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n";
  echo "<tr><td><b><a href='admin.php?value=1'>Brugernavn</a></b></td>
  <td><b><a href='admin.php?value=2'>Level</a></b></td>
  <td><b><a href='admin.php?value=3'>Email</a></b></td>
  <td><b><a href='admin.php?value=4'>Last Active</a></b></td>
    </tr>\n";
    $bgcolor="";
  for($i=0; $i<$num_rows; $i++){
      $uname  = mysql_result($result,$i,"username");
      $ulevel = mysql_result($result,$i,"userlevel");
      $email  = mysql_result($result,$i,"email");
      $time  = mysql_result($result,$i,"timestamp");
            $time2 = strtotime("-604800", $time);
            if(($session->time) > $time2){ $bgcolor='#536ca6';} else { $bgcolor='#EEAA00';} 
      echo "<tr bgcolor='".$bgcolor."'><td>$uname</td><td>$ulevel</td><td>$email</td><td><span class='dropt'>$time<span style='width:200px;'>$time</span></span></td></tr>\n";
  }
  echo "</table><br>\n";
}

Dette bliver hentet fra følgende:

function displayUsers(){
  global $database;
  $q = "SELECT username,userlevel,email,userid, FROM_UNIXTIME(timestamp) as timestamp FROM ".TBL_USERS ." order by timestamp DESC";
  $result = $database->query($q);
  /* Error occurred, return given name by default */
  $num_rows = mysql_numrows($result);
  if(!$result || ($num_rows < 0)){
      echo "Error displaying info";
      return;
  }
Avatar billede MSR Juniormester
03. maj 2013 - 16:12 #6
Det lykkedes mig faktisk selv at finde fejlen.
Det viser sig jo at jeg jo hentede timestampen from unixtime hvilket er svært at sammenligne med et reelt timestamp det er jo er forskellige formater. Derfor denne ekstra hent af timestamp uden from_unixtime og så virker det.

...FROM_UNIXTIME(timestamp) as timestamp2, timestamp ...
og derfor:

    $bgcolor="";
  for($i=0; $i<$num_rows; $i++){
      $uname  = mysql_result($result,$i,"username");
      $ulevel = mysql_result($result,$i,"userlevel");
      $email  = mysql_result($result,$i,"email");
      $time  = mysql_result($result,$i,"timestamp2");   
$time2 = time()-(604800);
$time3  = mysql_result($result,$i,"timestamp");   
            if(($time3) > $time2){ $bgcolor='#536ca6';} else { $bgcolor='#EEAA00';} 
      echo "<tr bgcolor='".$bgcolor."'><td>$uname</td><td>$ulevel</td><td>$email</td><td><span class='dropt'>$time<span style='width:200px;'>$time2</span></span></td></tr>\n";
    }


Tak for hjælpen Christian
Du må gerne få pointene hvis du vil?

Magnus
03. maj 2013 - 21:38 #7
I så fald, svar fra mig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester