[Review] Online members
Wil ik met jullie een scriptje van me delen. Ik zie bijna nergens een members online list die de namen toont van de online spelers/bezoekers.
Deze script ziet er echt niet uit, maar als je hem gebruikt werkt hij wel :)
Ik weet ook niet of dit de juiste plaats is om het te posten, maar ik ben maar pas begonnen met PHP, dus ik post hem lekker hier :p
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php /* ------------------------- */
// Hier nemen we onze tabel in de database om te kijken hoeveel er online zijn.
$dbres = mysql_query("SELECT id FROM members WHERE showonline = 'yes'");
$online = mysql_num_rows($dbres);
/* ------------------------- */ ?>
</table>
<table width=100% class="container">
<tr><td align="center"><b>Er zijn <?php print $online; ?> members online.<hr></b><br>
<?php
// Hier nemen we gwn alle namen om te tonen die online zijn.
$sql="SELECT usr FROM members WHERE showonline = 'yes'";
$exe=mysql_query($sql);
$res=mysql_num_rows($exe);
if($res==0)
{
echo "Er zijn geen members online.";
}
else
{
while($row=mysql_fetch_assoc($exe))
{
echo '<font color="white"><a href=profile.php?x='.$row['usr'].'>'.$row['usr'].'</a> - ','</font>';
}
}
?>
</td></tr></table>
(De code hierboven word de Members Online lijst.)
mysql_query("UPDATE members SET showonline= 'no' WHERE usr='".$_SESSION['usr']."'") or die(mysql_error());
// Zet dit bovenstaande ergens in je logout.php als je die al hebt.
mysql_query("UPDATE members SET showonline= 'yes' WHERE usr='".$_SESSION['usr']."'") or die(mysql_error());
// Zet dit bovenstaande waar je de members online laat gaan.
// Hier nemen we onze tabel in de database om te kijken hoeveel er online zijn.
$dbres = mysql_query("SELECT id FROM members WHERE showonline = 'yes'");
$online = mysql_num_rows($dbres);
/* ------------------------- */ ?>
</table>
<table width=100% class="container">
<tr><td align="center"><b>Er zijn <?php print $online; ?> members online.<hr></b><br>
<?php
// Hier nemen we gwn alle namen om te tonen die online zijn.
$sql="SELECT usr FROM members WHERE showonline = 'yes'";
$exe=mysql_query($sql);
$res=mysql_num_rows($exe);
if($res==0)
{
echo "Er zijn geen members online.";
}
else
{
while($row=mysql_fetch_assoc($exe))
{
echo '<font color="white"><a href=profile.php?x='.$row['usr'].'>'.$row['usr'].'</a> - ','</font>';
}
}
?>
</td></tr></table>
(De code hierboven word de Members Online lijst.)
mysql_query("UPDATE members SET showonline= 'no' WHERE usr='".$_SESSION['usr']."'") or die(mysql_error());
// Zet dit bovenstaande ergens in je logout.php als je die al hebt.
mysql_query("UPDATE members SET showonline= 'yes' WHERE usr='".$_SESSION['usr']."'") or die(mysql_error());
// Zet dit bovenstaande waar je de members online laat gaan.
En dat is het dan xD
Bij mij werkt het. Ik heb een tabel in database genoemd members. En daar staat usr in (gebruikersnamen van spelers.) en heb gewoon een extra tabel gemaakt genoemd showonline. varchar(32)en standaardwaarde is gewoon 'no'.
Ook kan je in een profiel scriptje laten zien of een member online is.
Ik hoop dat vele mensen dit kunnen gebruiken. Of sommige het nou als troep bekijken of niet. Het werkt ;)
En nogmaals bedankt voor al jullie hulp. :)
Toevoeging op 15/12/2011 09:12:51:
Ruim de code een beetje op als je deze wenst te gebruiken :p ik ben nogal rommelig.
Ik heb de titel van je topic aangepast aangezien je een script in feite laat reviewen. Overigens is dit de juiste manier voor het delen van scripts wanneer je nog niet zeker weet of dit juist geprogrammeerd is. Dankjewel!
[/modedit]
Gewijzigd op 15/12/2011 14:53:02 door Ken DC
or die() is GEEN goede foutafhandeling... ;-)
Dan kunnen ze voorlopig een andere foutafhandeling zoeken :p Toch?
2) Zou je misschien [code] en [/code] om je code heen willen zetten, dat leest wat makkelijker
3) Zodra je van jezelf weet dat een code er rommelig uitziet, waarom ruim je het dan zelf niet op? Zodra je een script deelt met andere moet je er zeker van zijn dat het 100% werkt en voor iedereen overzichtelijk is.
Verder:
- Geen foutafhandeling, wat als er nu iets verkeerd gaat? Voorbeelden: SQL boilerplate
- Gebruik geen backtricks in je query
- Een lay-out moet niet gemaakt worden met tabellen, maar met divisions. Gebruik dus de div tags voor lay-out.
- Or die is geen goede foutafhandeling, niks gaat dood als er iets fout gaat
- Waarom met online = yes/no werken? Met getallen (1 en 0) werkt het stukken simpeler in combinatie met PHP, deze zit de getallen namelijk als true en false.
- Gebruik mysql_fetch_assoc en niet fetch_array. dit is namelijk een stuk langzamer
- Alle keywords in een query (INSERT, WHERE, INTO, enz.) moet je met hoofdletters schrijven
- Het eerste scriptje bevat een verkeerde volgorde. Eerst moet je een query uitvoeren en dan het resultaat ophalen.
- Query1 en query2 kunnen makkelijk in 1 query als je gebruikt maakt van MySQL: COUNT()
- Het inloggen van geen gebruiker moet niet alleen in een database gebeuren, maar ook met een session. Dit is stukken veiliger.
Quote:
Dan kunnen ze voorlopig een andere foutafhandeling zoeken :p Toch?
Nee, als jij hier een script plaatst moet je zelf zorgen dat hij 120% correct is. Het is toch niet zo dat je hier een totaal verkeerd script plaatst en dat als je hem wilt gebruiken je zelf maar even het hele script opnieuw moet schrijven?
Gewijzigd op 15/12/2011 09:26:02 door Wouter J
Zo ver ben'k nog niet xD Ik toon ook alleen maar wat'k tot hiertoe heb xD
Maar ik zal er zeker verder naar kijken als m'n game af is. En dan update ik alles ;)
Toevoeging op 15/12/2011 09:33:37:
Wouter:
Nee, als jij hier een script plaatst moet je zelf zorgen dat hij 120% correct is. Het is toch niet zo dat je hier een totaal verkeerd script plaatst en dat als je hem wilt gebruiken je zelf maar even het hele script opnieuw moet schrijven?
Bij mij werkt hij perfect. Dus ik denk dat hij dan ook wel voor anderen werkt?
Toevoeging op 15/12/2011 10:19:54:
Script voor een groot deel aangepast. Behalve de foutafhandeling.
Wat betreft die table en div... bij mij staat hij in div xD Maar dat staat in m'n menu.php etc. ;)
Het gebruik van overzichtlijke PHP, daarmee doel ik op gebruik van spaties en tabs, is een stuk beter. Maak je code bijv. eens zo:
In tabellen horen alleen tabeluaire data te staan, dat is dit niet. Dat je hieromheen een div zet is inderdaad wel in een div, maar niet zoals het bedoelt is. Gebruik HTML op de juiste manier met de juiste semantiek.
Maar het begint er al stukken beter uit te zien! Nog even de andere punten veranderen en hij is goed!
Gewijzigd op 15/12/2011 14:46:33 door Wouter J
Ik doe header = div open, div dicht + begin div van menu.
Dan in menu zelf enkel div dicht + begin div van rechterkolom.
En in rechterkolom doe ik alleen maar div dicht. Bespaart me een hoop werk om steeds alles opnieuw te schrijven. :o
Ik include nu gwn header & menu in elke pagina, en hij werkt zoals ik wil :p
Daarna volgt footer, die dan ook ineens html en body enz dichtdoet voor de footer begint xD Die include ik dan op de bodem van elke page.
Ik zal nu de spaties toevoegen. :p
Edit : Is gebeurd :p Maar van die errorhandling, daar kan ik nog niet zo goed uit. :$
Gewijzigd op 15/12/2011 14:54:30 door Ken DC