Avatar billede blueeye97 Nybegynder
22. september 2005 - 18:11 Der er 24 kommentarer og
1 løsning

Udtræk fra database i forskellige farver

Jeg har en database hvor jeg trækker en liste ud fra med:

$foresp = mysql_query("SELECT id, ip, DATE_FORMAT(dato, '%d-%m-%Y') AS dansk, kl FROM counter ORDER BY id asc");
while($data = mysql_fetch_row($foresp)){

$out .= '<tr><td><font face="Verdana" size="1">'.$data[1].'</td><td></td><td><font face="Verdana" size="1">'.$data[2].'</td><td></td><td><font face="Verdana" size="1">'.$data[3].'</td><td>';
$tl = $tl + 1;

}
$out .= '</table>';
echo $out;
echo "<font face='Verdana' size='1'>I alt = $tl";
exit;

For at gøre listen lidt mere overskuelig tænkte jeg på om det ikke ku lade sig gøre at lave baggrundsfarven forskellig. Så ulige datoer stod med en farve og lige datoer stod meden anden ?
Avatar billede Slettet bruger
22. september 2005 - 18:17 #1
Du kan lave en 'break variabel'

$break = 0;

Og tjekke om ($break % 2 == 0), og hvis den er, sætter du <tr>'s baggrund til en farve, og hvis ikke, sætter du den til en anden.

I slutningen af while løkken inkrementerer du så $break++;

--
pacroon
Avatar billede blueeye97 Nybegynder
22. september 2005 - 18:19 #2
øøøøøøh..... det forstod jeg ikke lige.. :o))
Avatar billede dmdisco Nybegynder
22. september 2005 - 18:34 #3
$break = 0;
while($data = mysql_fetch_row($foresp)){
if ($break == 1) {
  $color = " color=\"#FFFFFF\"";
} else {
  $color = " color=\"#FFFFFF\"";
}
$out .= '<tr><td><font face="Verdana" size="1">'.$data[1].'</td><td></td><td><font face="Verdana" size="1">'.$data[2].'</td><td></td><td><font face="Verdana" size="1">'.$data[3].'</td><td>';
$tl = $tl + 1;
$break++;
}
Avatar billede dmdisco Nybegynder
22. september 2005 - 18:34 #4
hov
$break = 0;
while($data = mysql_fetch_row($foresp)){
if ($break == 1) {
  $color = " color=\"#FFFFFF\"";
} else {
  $color = " color=\"#FFFFFF\"";
}
$out .= '<tr".$color."><td><font face="Verdana" size="1">'.$data[1].'</td><td></td><td><font face="Verdana" size="1">'.$data[2].'</td><td></td><td><font face="Verdana" size="1">'.$data[3].'</td><td>';
$tl = $tl + 1;
$break++;
}
Avatar billede blueeye97 Nybegynder
22. september 2005 - 18:45 #5
Det resulterer i en blank side. Jeg så lige at du ikke havde echo $out; med.

Jeg smed den ind sådan her:

$break = 0;
while($data = mysql_fetch_row($foresp)){
if ($break == 1) {
  $color = " color=\"#FFFFFF\"";
} else {
  $color = " color=\"#FFFFFF\"";
}
$out .= '<tr".$color."><td><font face="Verdana" size="1">'.$data[1].'</td><td></td><td><font face="Verdana" size="1">'.$data[2].'</td><td></td><td><font face="Verdana" size="1">'.$data[3].'</td><td>';
$tl = $tl + 1;
$break++;
}
echo $out;

Men det giver et weird resultat. Det står i éen lang vandret linie ??
Avatar billede blueeye97 Nybegynder
22. september 2005 - 18:47 #6
I øvrigt uden anden baggrundsfarve end hvid. Og ja ja ja... jeg har ændret FFFFFF til andre farver da jeg testede :o))
Avatar billede nielle Nybegynder
22. september 2005 - 18:48 #7
$foresp = mysql_query("SELECT id, ip, DATE_FORMAT(dato, '%d-%m-%Y') AS dansk, kl FROM counter ORDER BY id asc");

while ($data = mysql_fetch_row($foresp))
{
    $DayInt = (int) date("j", $data[2]);
    $bgColor = ($DayInt % 2 == 0) ? "#FF000" : "#0000FF";   

    $out .= '<tr bgcolor="' . $bgColor . '"><td><font face="Verdana" size="1">'.$data[1].'</td><td></td><td><font face="Verdana" size="1">'.$data[2].'</td><td></td><td><font face="Verdana" size="1">'.$data[3].'</td><td>';

    $tl = $tl + 1;
}

$out .= '</table>';
echo $out;
echo "<font face='Verdana' size='1'>I alt = $tl";
exit;
Avatar billede blueeye97 Nybegynder
22. september 2005 - 19:40 #8
Vi nærmer os :o))

Dit seneste eksempel laver samme baggrundsfarve i hele listen. Farven er taget fra den sidste af farverne i dit eksempel, altså #0000FF
Avatar billede nielle Nybegynder
22. september 2005 - 19:52 #9
Hmmm.

$DayInt = (int) date("j", $data[2]);

- burde ellers give dig dag-nummeret i måneden som et tal. Du ville gerne have at ulige dage skulle give dig een baggrund (f.eks. dagene 21/9 og 31/9) mens at lige dage skulle have en anden baggrund (f.eks. 10/9 og 22/9). Er det korrekt forstået?
Avatar billede nielle Nybegynder
22. september 2005 - 20:02 #10
Hvis du nu udvider:

$foresp = mysql_query("SELECT id, ip, DATE_FORMAT(dato, '%d-%m-%Y') AS dansk, kl FROM counter ORDER BY id asc");

- til:

$foresp = mysql_query("SELECT id, ip, dato, DATE_FORMAT(dato, '%d-%m-%Y') AS dansk, kl FROM counter ORDER BY id asc");

- og så tjekker på dato-feltet istedet for det felt som du har formateret til danske format.
Avatar billede nielle Nybegynder
22. september 2005 - 20:07 #11
... eller måske bare:

$foresp = mysql_query("SELECT id, ip, Day(dato) AS dag, DATE_FORMAT(dato, '%d-%m-%Y') AS dansk, kl FROM counter ORDER BY id asc");

- og så tjekke direkte på "Dag" isetedet for at skulle igennem:

$DayInt = (int) date("j", $data[2]);
Avatar billede blueeye97 Nybegynder
22. september 2005 - 21:43 #12
Altså sådan her ?

$foresp = mysql_query("SELECT id, ip, Day(dato) AS dag, DATE_FORMAT(dato, '%d-%m-%Y') AS dansk, kl FROM counter ORDER BY id asc");

while ($data = mysql_fetch_row($foresp))
{
    $DayInt = (int) date("j", $data[2]);

    $bgColor = ($DayInt % 2 == 0) ? "#ff0000" : "#ffff00";   

    $out .= '<tr bgcolor="' . $bgColor . '"><td><font face="Verdana" size="1">'.$data[1].'</td><td></td><td><font face="Verdana" size="1">'.$data[2].'</td><td></td><td><font face="Verdana" size="1">'.$data[3].'</td><td>';

    $tl = $tl + 1;
}

$out .= '</table>';
echo $out;
echo "<font face='Verdana' size='1'>I alt = $tl";
exit;

Ovenstående finder ingen records overhovedet ??
Avatar billede nielle Nybegynder
22. september 2005 - 21:59 #13
$foresp = mysql_query("SELECT id, ip, Day(dato) AS dag, DATE_FORMAT(dato, '%d-%m-%Y') AS dansk, kl FROM counter ORDER BY id asc");

while ($data = mysql_fetch_row($foresp))
{
    $bgColor = ($data[2] % 2 == 0) ? "#ff0000" : "#ffff00";   

    $out .= '<tr bgcolor="' . $bgColor . '"><td><font face="Verdana" size="1">' . $data[1] . '</td><td></td><td><font face="Verdana" size="1">' . $data[3] . '</td><td></td><td><font face="Verdana" size="1">' . $data[4] . '</td><td>';

    $tl = $tl + 1;
}

$out .= '</table>';
echo $out;
echo "<font face='Verdana' size='1'>I alt = $tl";
exit;
Avatar billede blueeye97 Nybegynder
22. september 2005 - 22:24 #14
Det er da ufatteligt. min karma må være helt i bund i aften :o))

Her er hele koden incl. seneste forslag. Men der sker intet som helst.

Der står kun "I alt =", så den del fungerer jo tilsyneladende :o))

<?
$db = mysql_connect("00.00.00.00", "xxx", "xxx");
mysql_select_db("xxx", $db);

echo "<font size='2' face='verdana'>Counter Log:<br><br>";
$out = '<table>';
$tl = 0;


$foresp = mysql_query("SELECT id, ip, Day(dato) AS dag, DATE_FORMAT(dato, '%d-%m-%Y') AS dansk, kl FROM counter ORDER BY id asc");

while ($data = mysql_fetch_row($foresp))
{
    $bgColor = ($data[2] % 2 == 0) ? "#99ADC9" : "#ffff00";   

    $out .= '<tr bgcolor="' . $bgColor . '"><td><font face="Verdana" size="1">' . $data[1] . '</td><td></td><td><font face="Verdana" size="1">' . $data[3] . '</td><td></td><td><font face="Verdana" size="1">' . $data[4] . '</td><td>';

    $tl = $tl + 1;
}

$out .= '</table>';
echo $out;
echo "<font face='Verdana' size='1'>I alt = $tl";
exit;
?>
Avatar billede nielle Nybegynder
22. september 2005 - 22:35 #15
Prøv med:

$foresp = mysql_query("SELECT id, ip, Day(dato) AS dag, DATE_FORMAT(dato, '%d-%m-%Y') AS dansk, kl FROM counter ORDER BY id asc") or die(mysql_error());
Avatar billede blueeye97 Nybegynder
22. september 2005 - 22:42 #16
så får jeg følgende fejlbesked:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(dato) AS dag, DATE_FORMAT(dato, '%d-%m-%Y') AS dansk, kl FROM
Avatar billede nielle Nybegynder
23. september 2005 - 08:35 #17
Ok, det tyder jo på at den ikke kender DAY(...) - det må være en lidt ældre MySQL. Prøv i stedet med DAYOFMONTH(...):

http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html
Avatar billede blueeye97 Nybegynder
23. september 2005 - 22:42 #18
PHP versionen er: http://ws1.surf-town.net/phpinfo.php

Jeg prøver lige at kigge på det andet en gang...
Avatar billede blueeye97 Nybegynder
23. september 2005 - 22:58 #19
I VB ville jeg ha kigget på de 2 første karakterer i datoen og så tjekket om det var lige eller ulige.

I VB ville jeg ha brugt RIGHT til at se de 2 første karakterer i datoen og så tjekke med mod om et var lige eller ulige. Findes der ikke noget i stil med RIGHT i PHP, for så er jeg vel ovre det med om DAY eller DAYOFMONTH virker ?

Eller er jeg lidt ude at svømme der ? :O))
Avatar billede blueeye97 Nybegynder
23. september 2005 - 22:59 #20
LEFT... ikke RIGHT....
Avatar billede blueeye97 Nybegynder
23. september 2005 - 23:00 #21
Doooh... Jeg er vist søvnig...

I VB ville jeg ha brugt LEFT til at se de 2 første karakterer i datoen og så tjekke med MOD 2 om et var lige eller ulige. Findes der ikke noget i stil med LEFT i PHP, for så er jeg vel ovre det med om DAY eller DAYOFMONTH virker ?

sådan..
Avatar billede nielle Nybegynder
23. september 2005 - 23:14 #22
PHP versionen er ligegyldig i denne sammenhæng - det er MySQL-versionen som bestemmer om den kender Day eller ej. :^)
Avatar billede nielle Nybegynder
23. september 2005 - 23:14 #23
Har du prøvet DAYOFMONTH endnu?
Avatar billede blueeye97 Nybegynder
23. september 2005 - 23:43 #24
Det har jeg lige gjort... OG DET VIRKER :o))

Tusind tak for hjælpen... Smid straks et svar ;o)
Avatar billede nielle Nybegynder
24. september 2005 - 08:43 #25
Svar :^)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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