Controle PHP script - Online bezoekers

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Max van den Bosch

Max van den Bosch

10/06/2011 07:51:28
Quote Anchor link
Hallo PHPers...
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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();
?>
Gewijzigd op 10/06/2011 13:49:18 door Max van den Bosch
 
PHP hulp

PHP hulp

23/12/2024 23:59:59
 
- SanThe -

- SanThe -

10/06/2011 12:46:07
Quote Anchor link
Je mist nog diverse foutafhandeling.
Geen @-jes gebruiken om fouten te onderdrukken.
Backtics horen niet in een query.
 
Arjan -

Arjan -

10/06/2011 12:54:30
Quote Anchor link
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.
 
Max van den Bosch

Max van den Bosch

10/06/2011 13:50:41
Quote Anchor link
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.
 
Wouter J

Wouter J

10/06/2011 13:55:17
Quote Anchor link
- Voeg eerst eens goede foutafhandeling toe: 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.
 
The Force

The Force

10/06/2011 14:14:17
Quote Anchor link
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.

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.
 
Max van den Bosch

Max van den Bosch

12/06/2011 16:36:00
Quote Anchor link
Nou, ik heb het script bewerkt...
De uitkomst
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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!!!!!";
    }
}

?>
Gewijzigd op 12/06/2011 19:46:33 door Max van den Bosch
 
Wouter J

Wouter J

12/06/2011 16:46:53
Quote Anchor link
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.
 
Max van den Bosch

Max van den Bosch

12/06/2011 16:53:44
Quote Anchor link
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.


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.
 
- SanThe -

- SanThe -

12/06/2011 17:18:56
Quote Anchor link
In elke echo-regel achter alle if(DEBUG_MODE)-regels zit een fout.
 
Max van den Bosch

Max van den Bosch

12/06/2011 19:25:33
Quote Anchor link
- 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
 
Wouter J

Wouter J

12/06/2011 19:29:04
Quote Anchor link
- 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.
 
Max van den Bosch

Max van den Bosch

12/06/2011 19:32:12
Quote Anchor link
Wouter J op 12/06/2011 19:29:04:
- 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)
 
- SanThe -

- SanThe -

12/06/2011 19:42:51
Quote Anchor link
Max vd Bosch op 12/06/2011 19:25:33:

Toevoeging op 12/06/2011 19:28:31:

Fixed


Nog steeds niet goed: Regel 73, 86, 96 en 110.
 
Max van den Bosch

Max van den Bosch

12/06/2011 19:46:50
Quote Anchor link
Fixed 2
 
- SanThe -

- SanThe -

12/06/2011 19:51:38
Quote Anchor link
Max vd Bosch op 12/06/2011 19:46:50:
Fixed 2


Yep.
 
Wouter J

Wouter J

12/06/2011 19:51:52
Quote Anchor link
Nog steeds niet goed toch? Ook regel 52 is fout, kijk maar eens naar de documentatie op php.net
 
Max van den Bosch

Max van den Bosch

12/06/2011 19:53:45
Quote Anchor link
?
Bedoel je
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysql_error($mysqlconnector);
?
 
Arjan -

Arjan -

12/06/2011 21:06:30
Quote Anchor link
The Force op 10/06/2011 14:14:17:
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.

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 -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.