Archief - PHP: elke tr andere kleur

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

joyraider

Legacy Member
hidiho,

ik ben met een eigen php-forum bezig, en dit lukt al redelijk, alleen zit ik ergens vast;

in bvb forum.php?forumid=3 krijg je een lijst met threads te zien, wat ik op volgende manier doe:

Code:
$sql = "select * from fx_threads WHERE forumid = $forumid";
$resultaat = mysql_query($sql);
while ($record = mysql_fetch_object($resultaat)) {
echo "<tr><td bgcolor='lightgrey'><b><a href='thread.php?threadid=$record->threadid&forumid=$forumid'>$record->threadname</a></b><br 
/><font size='2'>$record->threadstarter</font></td></tr>";
}

nu wil ik echter, dat die <td>-tags elke keer een andere kleur meekrijgen (wit-grijs-wit-grijs) zodat de regels overzichtelijk blijven...

op school had ik al een klein algoritme uitgedacht;
Code:
if ($kleur==1) {
echo "bgcolor='grijs'";
$kleur++;
} else {
echo "bgcolor='wit'";
$kleur--;
}

dit werkt ook in theorie, maar jammer genoeg kan ik die IF niet gebruiken in de while-loop. iemand die een betere manier weet, of misschien een manier om toch de IF te kunnen gebruiken in de WHILE ?

0n3Liner

Legacy Member
PHP:
<?php
$color1 = 'white';
$color2 = 'sivler';

$sql = "select * from fx_threads WHERE forumid = $forumid";
$resultaat = mysql_query($sql);
for ($kleur=0;$record = mysql_fetch_object($resultaat);$kleur++) {

	$bgcolor = ($kleur % 2) ? $color1 : $color2;
	 echo "<tr><td style='background: $bgcolor'><b><a href='thread.php?threadid=$record->threadid&forumid=$forumid'>$record->threadname</a></b><br /><font size='2'>$record->threadstarter</font></td></tr>";

}
?>

hebbet nu rap ff geschreve, mo tzou zoiets moeten zijn

joyraider

Legacy Member
hmm, ik snap de logica niet zo goed (ben erg nieuw met php), en het werkt voorlopig ook niet, maar ik zal proberen er wat aan te sleutelen..

voorlopige error:
Notice: Undefined variable: row_count in c:\program files\easyphp1-7\www\forum.php on line 25

Al bedankt oneliner! :)

0n3Liner

Legacy Member
oops....
PHP:
<?php
$color1 = 'white';
$color2 = 'sivler';

$sql = "select * from fx_threads WHERE forumid = $forumid";
$resultaat = mysql_query($sql);
for ($kleur=0;$record = mysql_fetch_object($resultaat);$kleur++) {

    $bgcolor = ($kleur % 2) ? $color1 : $color2;
     echo "<tr><td style='background: $bgcolor'><b><a href='thread.php?threadid=$record->threadid&forumid=$forumid'>$record->threadname</a></b><br /><font size='2'>$record->threadstarter</font></td></tr>";

}
?>

probeer nu es

joyraider

Legacy Member
is er geen methode in php om te zien of een getal even of oneven is?

dan zou ik het erg simpel kunnen doen :)

0n3Liner

Legacy Member
joyraider zei:
is er geen methode in php om te zien of een getal even of oneven is?

dan zou ik het erg simpel kunnen doen :)

PHP:
<?php
$nummer = 25341232134553456;
if(($nummer % 2) == 0) {
   echo 'even nummer';
} else {
 echo 'oneven nummer';
}

?>

DarkBone

Legacy Member
PHP:
<?php

$color1	= '#eee';
$color2	= '#ccc';

$query	= 'SELECT * FROM fx_threads WHERE forumid = ' . $forumid;
$result	= mysql_query($query)
	or die('Error: ' . mysql_error());

for ($counter=0; $record = mysql_fetch_object($result); $counter++)
{
    $bgcolor = ($counter % 2) ? $color1 : $color2;	// is de counter even? ja => kleur1, neen => kleur2

	echo '<tr>\n';
	echo'\t<td style="background: ' . $bgcolor . '"><b><a href="thread.php?threadid=' . $record->threadid . '&forumid=' . $forumid . '">' . $record->threadname . '</a></b><br /><font size="2">' . $record->threadstarter . '</font></td>\n'
	echo '</tr>\n';

}

?>

xml

Legacy Member
kijken of een getal even (of bvb deelbaar is door drie, of vier, of vijf, of.. ) kan je doen door middel van de % operator. Die geeft met name de rest.

7 % 2 = 1 (= 3, rest 1)
22 % 5 = 2 (= 4, rest 2)
...


De notatie "$bgcolor = ($counter % 2) ? $color1 : $color2;" is een verkorte if, then, else structuur...


't is maar dat ge weet wat uw code doet..

joyraider

Legacy Member
ok bedankt voor alle uitleg :)

inmiddels heb ik weer een vraagje, ditmaal over sql;

om een thread toe te voegen (zoals hier op tg-forum), gebruik ik volgende code:

PHP:
$sql = " INSERT INTO fx_threads ";
$sql .= " (threadname, threadstarter, forumid, message, kind, date, lastpost) VALUES ";
$sql .= " ('$threadname', '$threadstarter', '$forumid', '$message', '$kind', '$date', '$date') ";
$result = mysql_query($sql, $cid);

in elke thread-record wordt de datum van de laatste post bijgehouden (in het veld lastpost dus), maar bij het starten van een nieuwe thread wordt gelijk de huidige datum daarin gezet natuurlijk.

nu is mijn vraag.. als ik een reactie post op een thread (een post dus), moet ik eerst bovenstaande code gebruiken om die post toe te voegen in de tabel "posts" (een nieuwe record dus, dit is niet moeilijk, zelfde als code hierboven), maar ik wil ook de huidige datum overschrijven in het veld "lastpost" in de tabel threads, maar niet in een nieuwe record, slechts in het record met overeenkomstige threadid.

hoe doe ik dit? iets zoals dit?

PHP:
 "INSERT INTO fx_threads WHERE threadid = $threadid" 
values blabla

of is dit een heel ander systeem?

joyraider

Legacy Member
juist een tutorial gevonden over "UPDATE", denk dus dat ik het gevonden heb :)

[SWFD]WiM

Legacy Member
Die tabel met rijen in afwisselende kleur kan ook zonder counter bij te houden

gewoon buiten uw while lus:
$kleur = wit;

en erin deze if:
if ($kleur == wit)
$kleur = grijs;
else
$kleur = wit;

joyraider

Legacy Member
de update is gelukt, weeral iets opgelost ;) nu heb ik weer een volgende vraag...

PHP:
$sql = "SELECT * FROM fx_posts WHERE threadid = '$threadid'";
$resultaat = mysql_query($sql);
while ($record = mysql_fetch_object($resultaat)) {
echo "<table width='800' cellpadding='5' cellspacing='0' bgcolor='white' style='border: 1px solid 
brown;'><tr><td><br />$record->message</b><br /><br />gepost door $record->author<br /><br /></td></tr></table>";
}

dit is de code die de "reacties" (posts) op een thread genereert. vrij logisch dus.

het probleem is; ik heb natuurlijk een aparte tabel fx_users (met alle users en hun gegevens dus), die ik zal moeten aanspreken om elke keer de avatars en pm-stuff te laden in elke reactie.

uit mijn vage sql-geschiedenis weet ik nog iets over inner joins, en vermoed dat ik die in dit geval zal moeten gebruiken.

het probleem: hoe? ik heb wat tutorials gezocht, maar ik heb echt geen idee hoe ik het hier moet toepassen?

ik weet wel de relatie tussen de 2 tabellen: author (uit fx_posts) en username (uit fx_users)

kan iemand me hiermee verder helpen? :)

dank bij voorbaat

maT'

Legacy Member
PHP:
$sql = "SELECT t.*, u.* FROM fx_posts AS t ";
$sql .= "INNER JOIN fx_users AS u ON t.author = u.username ";
$sql .= "WHERE t.threadid = '". $threadid ."'";
om je even de pap in de mond te geven.
mysql.org is een duidelijk referentiepunt, zoeken op keywords "inner, left of right join" geven direct goede resultaten terug.

joyraider

Legacy Member
daar ben ik weer met een vraag, alleen is t een die je ni zomaar op google vindt :)

ik ben in forum.php bezig, waar een lijst van threads komt. natuurlijk moet ik hier met pagina's werken (zoals hier). Per pagina komen er 20 threads tevoorschijn, en wel met volgende code:

PHP:
switch($page) {
 case "1": $limiet = "0, 20";
 break;
 case "2": $limiet = "21, 20";
 break;
 case "3": $limiet = "41, 20";
 break;
 case "4": $limiet = "61, 20";
 break;
 case "5": $limiet = "81, 20";
 break;
 case "6": $limiet = "101, 20";
 break;
 case "7": $limiet = "121, 20";
 break;
 case "8": $limiet = "141, 20";
 break;
 case "9": $limiet = "161, 20";
 break;
 case "10": $limiet = "181, 20";
 break;
}

PHP:
$sql = "select * from fx_threads WHERE (forumid = $forumid) and (kind = 'n') ORDER BY lastpost DESC LIMIT '$limiet'";
$resultaat = mysql_query($sql);
for ($kleur=0;$record = mysql_fetch_object($resultaat);$kleur++) { 
$bgcolor = ($kleur % 2) ? $color1 : $color2;
 echo "<tr><td bgcolor='$bgcolor' style='border-top: 1px solid gray;'>&nbsp;<img src='$record->kind.gif' alt='Thread' />&nbsp;</td><td 
bgcolor='$bgcolor' width='500' style='border-top: 1px solid gray;'><b><a 
href='thread.php?threadid=$record->threadid&forumid=$forumid'>$record->threadname</a></b><br /><font 
size='2'>$record->threadstarter</font></td><td width='300' bgcolor='$bgcolor' style='border-top: 1px solid gray;'>Last post by 
$record->lastauthor<br />($record->lastpost)</td></tr>";
}

als error krijg ik dan toch wel niet:


php-madam zei:
Parse error: parse error, unexpected $end in c:\program files\easyphp1-7\www\forum.php on line 118


en op die regel staat:

Code:
</html>

iemand die de oplossing weet? :f

0n3Liner

Legacy Member
die error betekent meestal dat je een { bent begonnen maar een } bent vergeten, have fun looking for it!

frenzal

Legacy Member
ik zou toch nog eens nadenken over uw pagina systeem, hoe alles er nu zo "hardcoded" in zit lijkt mij alles behalve de beste methode

manky

Legacy Member
PHP:
$off=$_GET[offset];
$limit=3;
if (empty($offset)) $offset=0;

    $sql="SELECT * FROM uwtbl ORDER BY 'id' DESC LIMIT $offset,$limit";
    $mysql_result=mysql_query($sql,$connection);
    $num_rows=mysql_num_rows($mysql_result); 
    $mysql_result=mysql_query($sql) or die(mysql_error());
      while ($row=mysql_fetch_array($mysql_result))
    {
            ier uw stuff
    }



if (empty($offset)) $offset=0;
$sql="SELECT id FROM uwtbl ORDER BY id DESC ";
$result = mysql_query($sql);
$numrows=mysql_num_rows($result);
$pages=intval($numrows/$limit);
if ($numrows%$limit)
{
	$pages++;
}
for ($i=1;$i<=$pages;$i++)
{
	$newoffset=$limit*($i-1);
	if($newoffset==$offset)
	{
		$links.="$i ";
	}
	else
	{
		$links.="<a href=\"$PHP_SELF?offset=$newoffset\">$i</a> \n";
	}
}

echo " page $links ";

dit gebruik ik...
verander de limit waarde om het aantal topics te tonen op 1 pag
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan