Controle PHP script - Online bezoekers
Ik heb een scriptje gemaakt waarmee je het aantal online gebruikers kan lezen. Ook is er een functie bijingebouwd voor het weergeven van het aantal online leden.
Zouden jullie even willen kijken of deze snippet in de scriptdatabase kan? (eventuele fouten of tips melden)
MVG Max van den Bosch
---------------Online_users.php-------------------------
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
session_start();
if (isset($_GET['destroy'])){
session_destroy ();
}
$ip=$_SERVER['REMOTE_ADDR'];
$time=time();
$timeout=120+$time; //is in seconden
$dbhost = ""; // MySQL host
$dbuser = ""; // MySQL gebruikersnaam
$dbpass = ""; // MySQL wachtwoord
$dbname = ""; // database naam
$sql="INSERT INTO onlineusers (ip, timeout";
if (isset($_SESSION['username'])){
$sql .=", username";
}
$sql.=") VALUES ('".$_SERVER['REMOTE_ADDR']."', $timeout";
if (isset($_SESSION['username'])){
$sql .=", '".$_SESSION['username']."'";
}
$sql .=")";
// Connect to MySQL Database
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname) or die("Geen database geselecteerd");
if (!mysql_query($sql)){
echo "Er mislukte iets...</br>Technische informatie: ".mysql_error()."</br>";
}
$sql="DELETE FROM onlineusers WHERE timeout < ".$time;
if (!mysql_query($sql)){
echo "Er mislukte iets...</br>Techinische informatie: ".mysql_error();
}
$uitslag=mysql_query("SELECT DISTINCT ip FROM `onlineusers` WHERE `username` IS NULL") or echo "Ophalen van gegevens is mislukt (1)";
$aantal_ongeregistreert=mysql_num_rows($uitslag);
$uitslag2=mysql_query("SELECT DISTINCT ip FROM `onlineusers` WHERE `username` IS NOT NULL") or echo "Ophalen van gegevens is mislukt (2)";;
$aantal_geregistreert=mysql_num_rows($uitslag2);
echo "Online bezoekers: ".$aantal_ongeregistreert;
echo "</br>";
echo "Online leden: ".$aantal_geregistreert;
//BEKIJK timeout en time
//echo "</br>";
//echo "Timeout: ".$timeout;
//echo "</br>";
//echo "Time---: ".$time;
//echo "</br>";
//echo "time(); = ".time();
if ($time == $timeout){
echo "Error! Time en timeout zijn gelijk";
}
//Bugger, zodat eventuele fouten kunnen worden weergeven
mysql_close();
?>
session_start();
if (isset($_GET['destroy'])){
session_destroy ();
}
$ip=$_SERVER['REMOTE_ADDR'];
$time=time();
$timeout=120+$time; //is in seconden
$dbhost = ""; // MySQL host
$dbuser = ""; // MySQL gebruikersnaam
$dbpass = ""; // MySQL wachtwoord
$dbname = ""; // database naam
$sql="INSERT INTO onlineusers (ip, timeout";
if (isset($_SESSION['username'])){
$sql .=", username";
}
$sql.=") VALUES ('".$_SERVER['REMOTE_ADDR']."', $timeout";
if (isset($_SESSION['username'])){
$sql .=", '".$_SESSION['username']."'";
}
$sql .=")";
// Connect to MySQL Database
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname) or die("Geen database geselecteerd");
if (!mysql_query($sql)){
echo "Er mislukte iets...</br>Technische informatie: ".mysql_error()."</br>";
}
$sql="DELETE FROM onlineusers WHERE timeout < ".$time;
if (!mysql_query($sql)){
echo "Er mislukte iets...</br>Techinische informatie: ".mysql_error();
}
$uitslag=mysql_query("SELECT DISTINCT ip FROM `onlineusers` WHERE `username` IS NULL") or echo "Ophalen van gegevens is mislukt (1)";
$aantal_ongeregistreert=mysql_num_rows($uitslag);
$uitslag2=mysql_query("SELECT DISTINCT ip FROM `onlineusers` WHERE `username` IS NOT NULL") or echo "Ophalen van gegevens is mislukt (2)";;
$aantal_geregistreert=mysql_num_rows($uitslag2);
echo "Online bezoekers: ".$aantal_ongeregistreert;
echo "</br>";
echo "Online leden: ".$aantal_geregistreert;
//BEKIJK timeout en time
//echo "</br>";
//echo "Timeout: ".$timeout;
//echo "</br>";
//echo "Time---: ".$time;
//echo "</br>";
//echo "time(); = ".time();
if ($time == $timeout){
echo "Error! Time en timeout zijn gelijk";
}
//Bugger, zodat eventuele fouten kunnen worden weergeven
mysql_close();
?>
Gewijzigd op 10/06/2011 13:49:18 door Max van den Bosch
Geen @-jes gebruiken om fouten te onderdrukken.
Backtics horen niet in een query.
Mysql_connect gewoon bovenaan je pagina neerknallen (na session_start). Zo weet je zeker dat je altijd verbinding hebt. En mysql_close() is overbodig. En natuurlijk de belangrijke punten van santhe.
@Arjan
Ik heb geleerd dat je altijd zo laat mogelijk je verbinding moet openen, en zo vroeg mogelijk moet sluiten, i.v.m hacking en snelheid.
http://snipplr.com/view/45252/goede-foutafhandeling-mysql/
- Haal vervolgens alle backtricks ´ uit de SQL, deze horen hier niet.
- Maak je code ook wat netter door op een regelmatige manier tabs en enters te gebruiken.
- Voeg eerst eens goede foutafhandeling toe: - Haal vervolgens alle backtricks ´ uit de SQL, deze horen hier niet.
- Maak je code ook wat netter door op een regelmatige manier tabs en enters te gebruiken.
Max vd Bosch op 10/06/2011 13:50:41:
Veranderd. Zo beter?
@Arjan
Ik heb geleerd dat je altijd zo laat mogelijk je verbinding moet openen, en zo vroeg mogelijk moet sluiten, i.v.m hacking en snelheid.
@Arjan
Ik heb geleerd dat je altijd zo laat mogelijk je verbinding moet openen, en zo vroeg mogelijk moet sluiten, i.v.m hacking en snelheid.
Dat het bovenaan moet staan is onzin. Dat je leert om het zo laat mogelijk te openen en zo vroeg mogelijk te sluiten vind ik ook erg apart. Een soort van schijnveiligheid. En dan het 'performanceverschil'. Het verschil tussen beide uitersten zal niet eens meetbaar zijn (tenzij je wellicht het proces 10.000x herhaalt en dat gaat meten). Dat is hetzelfde als onnodige id's gebruiken in database 'omdat dat sneller is'. Of zo weinig mogelijk commentaar gebruiken omdat PHP dat allemaal maar verwerken moet ;). Dus maak je niet druk om de positie.
De uitkomst
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
session_start();
if (isset($_GET['destroy'])){
session_destroy ();
}
$ip=$_SERVER['REMOTE_ADDR'];
$time=time();
//WAARDEN DIE JE MOET VERANDEREN!!!!!!!!//////
$timeout=120+$time; //is in seconden //////
$dbhost = ""; // MySQL host //////
$dbuser = ""; // MySQL gebruikersnaam //////
$dbpass = ""; // MySQL wachtwoord //////
$dbname = ""; // database naam //////
//////////////////////////////////////////////
define('DEBUG_MODE', true); //DEBUG_MODE instellen, true is aan en false is uit.
if(DEBUG_MODE)
{ // Als de debug mode aanstaat
error_reporting(E_ALL | E_STRICT); //Laat alle errors zien
ini_set('display_errors', 1); // Nog een keer alle errors aanzetten
}
elseif(!DEBUG_MODE)
{ // Als de debug mode uitstaat
error_reporting(0); //Laat geen error zien.
ini_set('display_errors', 0); //idem
}
// Connect to MySQL Database
$mysqlconnector=mysql_connect($dbhost,$dbuser,$dbpass);
if(!$mysqlconnector)
{ //Als er geen verbinding is.
echo "Er kan geen verbinding worden gemaakt";
if(DEBUG_MODE)
{ //Als debug_mode aanstaat.
echo "<br />".mysql_error($mysqlconnector);
}
}
else
{ //Als er verbinding is
$db = mysql_select_db($dbname,$mysqlconnector)
if(!$db)
{ //Als er geen database is gevonden
echo "Er kan geen databasecontact worden gemaakt";
if(DEBUG_MODE)
{
echo "<br />".mysql_error($db);
}
}else{
$sql="INSERT INTO onlineusers (ip, timeout";
if (isset($_SESSION['username'])){
$sql .=", username";
}
$sql.=") VALUES ('".$_SERVER['REMOTE_ADDR']."', $timeout";
if (isset($_SESSION['username'])){
$sql .=", '".$_SESSION['username']."'";
}
$sql .=")";
$return1=mysql_query($sql);
if (!$return1){
echo "Er mislukte iets!";
if(DEBUG_MODE)
{
echo "<br />".mysql_error($return1)."<br />".$sql; //Query echoen om te zien of daar iets fout in is
}
}
$sql="DELETE FROM onlineusers WHERE timeout < ".time();
$return2=mysql_query($sql);
if (!$return2){
echo "Iets mislukte!";
if(DEBUG_MODE)
{
echo "<br />".mysql_error($return2)."<br />".$sql; //Query echoen om te zien of daar iets fout in is
}
}
$sql1="SELECT DISTINCT ip FROM onlineusers WHERE username IS NULL";
$uitslag=mysql_query($sql1);
if (!$uitslag){
echo "Het ophalen lukt niet!";
if(DEBUG_MODE)
{
echo "<br />".mysql_error($uitslag)."<br />".$sql1; //Query echoen om te zien of daar iets fout in is
}
}else{
$aantal_ongeregistreert=mysql_num_rows($uitslag);
}
$sql2="SELECT DISTINCT ip FROM onlineusers WHERE username IS NOT NULL";
$uitslag2=mysql_query($sql2);
if (!$uitslag2){
echo "Het ophalen lukt niet!";
if(DEBUG_MODE)
{
echo "<br />".mysql_error($uitslag2)."<br />".$sql2; //Query echoen om te zien of daar iets fout in is
}
}
$aantal_geregistreert=mysql_num_rows($uitslag2);
echo "Online bezoekers: ".$aantal_ongeregistreert;
echo "</br>";
echo "Online leden: ".$aantal_geregistreert;
//BEKIJK timeout en time
//echo "</br>";
//echo "Timeout: ".$timeout;
//echo "</br>";
//echo "Time---: ".$time;
//echo "</br>";
//echo "time(); = ".time();
if ($time == $timeout){
echo "Error! Time en timeout zijn gelijk, dit kan niet!!!!!";
}
}
?>
session_start();
if (isset($_GET['destroy'])){
session_destroy ();
}
$ip=$_SERVER['REMOTE_ADDR'];
$time=time();
//WAARDEN DIE JE MOET VERANDEREN!!!!!!!!//////
$timeout=120+$time; //is in seconden //////
$dbhost = ""; // MySQL host //////
$dbuser = ""; // MySQL gebruikersnaam //////
$dbpass = ""; // MySQL wachtwoord //////
$dbname = ""; // database naam //////
//////////////////////////////////////////////
define('DEBUG_MODE', true); //DEBUG_MODE instellen, true is aan en false is uit.
if(DEBUG_MODE)
{ // Als de debug mode aanstaat
error_reporting(E_ALL | E_STRICT); //Laat alle errors zien
ini_set('display_errors', 1); // Nog een keer alle errors aanzetten
}
elseif(!DEBUG_MODE)
{ // Als de debug mode uitstaat
error_reporting(0); //Laat geen error zien.
ini_set('display_errors', 0); //idem
}
// Connect to MySQL Database
$mysqlconnector=mysql_connect($dbhost,$dbuser,$dbpass);
if(!$mysqlconnector)
{ //Als er geen verbinding is.
echo "Er kan geen verbinding worden gemaakt";
if(DEBUG_MODE)
{ //Als debug_mode aanstaat.
echo "<br />".mysql_error($mysqlconnector);
}
}
else
{ //Als er verbinding is
$db = mysql_select_db($dbname,$mysqlconnector)
if(!$db)
{ //Als er geen database is gevonden
echo "Er kan geen databasecontact worden gemaakt";
if(DEBUG_MODE)
{
echo "<br />".mysql_error($db);
}
}else{
$sql="INSERT INTO onlineusers (ip, timeout";
if (isset($_SESSION['username'])){
$sql .=", username";
}
$sql.=") VALUES ('".$_SERVER['REMOTE_ADDR']."', $timeout";
if (isset($_SESSION['username'])){
$sql .=", '".$_SESSION['username']."'";
}
$sql .=")";
$return1=mysql_query($sql);
if (!$return1){
echo "Er mislukte iets!";
if(DEBUG_MODE)
{
echo "<br />".mysql_error($return1)."<br />".$sql; //Query echoen om te zien of daar iets fout in is
}
}
$sql="DELETE FROM onlineusers WHERE timeout < ".time();
$return2=mysql_query($sql);
if (!$return2){
echo "Iets mislukte!";
if(DEBUG_MODE)
{
echo "<br />".mysql_error($return2)."<br />".$sql; //Query echoen om te zien of daar iets fout in is
}
}
$sql1="SELECT DISTINCT ip FROM onlineusers WHERE username IS NULL";
$uitslag=mysql_query($sql1);
if (!$uitslag){
echo "Het ophalen lukt niet!";
if(DEBUG_MODE)
{
echo "<br />".mysql_error($uitslag)."<br />".$sql1; //Query echoen om te zien of daar iets fout in is
}
}else{
$aantal_ongeregistreert=mysql_num_rows($uitslag);
}
$sql2="SELECT DISTINCT ip FROM onlineusers WHERE username IS NOT NULL";
$uitslag2=mysql_query($sql2);
if (!$uitslag2){
echo "Het ophalen lukt niet!";
if(DEBUG_MODE)
{
echo "<br />".mysql_error($uitslag2)."<br />".$sql2; //Query echoen om te zien of daar iets fout in is
}
}
$aantal_geregistreert=mysql_num_rows($uitslag2);
echo "Online bezoekers: ".$aantal_ongeregistreert;
echo "</br>";
echo "Online leden: ".$aantal_geregistreert;
//BEKIJK timeout en time
//echo "</br>";
//echo "Timeout: ".$timeout;
//echo "</br>";
//echo "Time---: ".$time;
//echo "</br>";
//echo "time(); = ".time();
if ($time == $timeout){
echo "Error! Time en timeout zijn gelijk, dit kan niet!!!!!";
}
}
?>
Gewijzigd op 12/06/2011 19:46:33 door Max van den Bosch
Het is niet verstandig te copy/pasten, je moet begrijpen wat je doet. Als je je code zelf niet begrijpt is het verstandig om dit niet in de scriptlib te plaatsen. Lees dus eerst een de beginnershandleidingen en leer daaruit.
Wouter J op 12/06/2011 16:46:53:
Heb je het script bewerkt of ga je gewoon mijn snippet overnemen met een hele kleine aanpassing? Zelfs mijn comments staan er nog in...
Het is niet verstandig te copy/pasten, je moet begrijpen wat je doet. Als je je code zelf niet begrijpt is het verstandig om dit niet in de scriptlib te plaatsen. Lees dus eerst een de beginnershandleidingen en leer daaruit.
Het is niet verstandig te copy/pasten, je moet begrijpen wat je doet. Als je je code zelf niet begrijpt is het verstandig om dit niet in de scriptlib te plaatsen. Lees dus eerst een de beginnershandleidingen en leer daaruit.
Ja, ik snap hem nu wel, maar nu heb ik wel even geknipt en geplakt, omdat ik nu wist dat hij het dan deed...
Ik heb een nieuw PHP boek geleend bij de bieb, Handboek PHP 5. Ik zet hem zo wel even bij de PHP boeken.
In elke echo-regel achter alle if(DEBUG_MODE)-regels zit een fout.
- SanThe - op 12/06/2011 17:18:56:
In elke echo-regel achter alle if(DEBUG_MODE)-regels zit een fout.
Kan kloppen. Ik heb de code gebruikt die hier werd weergeven. 'K ga ze even fixen...
Toevoeging op 12/06/2011 19:28:31:
Fixed
- SanThe - op 12/06/2011 17:18:56:
In elke echo-regel achter alle if(DEBUG_MODE)-regels zit een fout.
Dom, ik zie het nu ook. Ga het straks goed maken in de snippet.
Wouter J op 12/06/2011 19:29:04:
Dom, ik zie het nu ook. Ga het straks goed maken in de snippet.
- SanThe - op 12/06/2011 17:18:56:
In elke echo-regel achter alle if(DEBUG_MODE)-regels zit een fout.
Dom, ik zie het nu ook. Ga het straks goed maken in de snippet.
Maakt niet uit, iedereen is wel eens dom (ik kijk nu even in de spiegel)
Max vd Bosch op 12/06/2011 19:25:33:
Toevoeging op 12/06/2011 19:28:31:
Fixed
Toevoeging op 12/06/2011 19:28:31:
Fixed
Nog steeds niet goed: Regel 73, 86, 96 en 110.
Fixed 2
Max vd Bosch op 12/06/2011 19:46:50:
Fixed 2
Yep.
Nog steeds niet goed toch? Ook regel 52 is fout, kijk maar eens naar de documentatie op php.net
The Force op 10/06/2011 14:14:17:
Dat het bovenaan moet staan is onzin. Dat je leert om het zo laat mogelijk te openen en zo vroeg mogelijk te sluiten vind ik ook erg apart. Een soort van schijnveiligheid. En dan het 'performanceverschil'. Het verschil tussen beide uitersten zal niet eens meetbaar zijn (tenzij je wellicht het proces 10.000x herhaalt en dat gaat meten).
Max vd Bosch op 10/06/2011 13:50:41:
Veranderd. Zo beter?
@Arjan
Ik heb geleerd dat je altijd zo laat mogelijk je verbinding moet openen, en zo vroeg mogelijk moet sluiten, i.v.m hacking en snelheid.
@Arjan
Ik heb geleerd dat je altijd zo laat mogelijk je verbinding moet openen, en zo vroeg mogelijk moet sluiten, i.v.m hacking en snelheid.
Dat het bovenaan moet staan is onzin. Dat je leert om het zo laat mogelijk te openen en zo vroeg mogelijk te sluiten vind ik ook erg apart. Een soort van schijnveiligheid. En dan het 'performanceverschil'. Het verschil tussen beide uitersten zal niet eens meetbaar zijn (tenzij je wellicht het proces 10.000x herhaalt en dat gaat meten).
Dat het geen performance winst oplevert ben ik mij wel van bewust, maar het ging mij er om dat wanneer je met de mysql database verbindt midden in de scripting en je voegt daarna een query boven je connect handler toe, dat je dan de connect handler moet gaan verplaatsen. Daarom kan je beter gewoon een sql connectie ergens bovenaan (lees: niet absoluut bovenaan) je pagina aanmaken.
Gewijzigd op 12/06/2011 21:07:11 door Arjan -