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

<?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();
?>

Je mist nog diverse foutafhandeling.
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.
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.
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.
Nou, ik heb het script bewerkt...
De uitkomst

<?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!!!!!";
	}
}
?> 
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.
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.
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...

[size=xsmall]Toevoeging op 12/06/2011 19:28:31:[/size]

Fixed

Reageren