Seite 1 von 2

Counter unter Menü

Verfasst: 7. August 2009, 11:04
von matze93
Hey, wie kann ich einen zusätzlichen Counter unters Menü basteln, der auch die Anzahl der User und der Name des neuesten Users anzeigt?

Mein Code:
includes/counter.php

Code: Alles auswählen

<?php

define("IN_easyhp", true);

session_start();

include "includes/mysql.php";

$query[user] = mysql_query("SELECT id FROM " . USERS_TABLE . " ORDER BY id");
$query[newest_user] = mysql_query("SELECT name FROM " . USERS_TABLE . " ORDER BY id DESC LIMIT 1");

while ($config = mysql_fetch_object($query[config])) {

include "common.php";

$newest_user = mysql_fetch_row($query[newest_user]);

$unset = explode(',', $_SESSION['unset']);

if ($_SESSION['timestamp'] <= (time() - 3)) {
	for ($i = 0; $i <= count($unset); $i++) {
		unset($_SESSION[$unset[$i]]);
	}

	unset($_SESSION['timestamp']);
}

$session_time = strtotime("+5 minutes");
$time = date("H:i");
$query[sessions] = "UPDATE " . SESSIONS_TABLE . " SET session_time = '$session_time', session_ip = '" . $_SERVER['REMOTE_ADDR'] . "', time = '$time' WHERE name = '" . $_SESSION['user_data_username'] . "'";

if (!mysql_query($query[sessions])) {
	echo "Could not insert session data." . "<br />" . mysql_error();
}

if (ADMIN) {
	$footer = file_get_contents("style/template/counter.html");
} elseif (!ADMIN) {
	$footer = file_get_contents("styles/$cf->default_style/template/counter.html");
}

//
// Start counter
//
if ($cf->counter_on == 1) {
	$day = date("j"); 
	$month = date("m"); 
	$year = date("Y"); 
	$timenow = mktime(0, 0, 0, $month, $day, $year); 
	$time = time();
	$addr = $_SERVER['REMOTE_ADDR'];

	$check = mysql_query('SELECT * FROM ' . COUNTER_TABLE . " WHERE timed < '$timenow'");

	while ($row = mysql_fetch_array($check)) { 
		mysql_query('DELETE FROM ' . COUNTER_TABLE . " WHERE id = '" . $row['id'] . "'"); 
	} 

	$check2 = mysql_query('SELECT * FROM ' . COUNTER_TABLE . " WHERE ip = '$addr'"); 
	$row = mysql_num_rows($check2); 

	if ($row == '0') { 
		mysql_query('INSERT INTO ' . COUNTER_TABLE . " (id, ip, timed) VALUES ('', '$addr', '$time')"); 
	} else { 
		mysql_query('UPDATE ' . COUNTER_TABLE . " SET timed = '$time' WHERE ip = '$addr'");
	} 

	$sql_today = mysql_query('SELECT * FROM ' . COUNTER_TABLE); 
	$today = mysql_num_rows($sql_today); 


	$sql_total = mysql_query('SELECT * FROM ' . COUNTER_TABLE . " ORDER BY id DESC");  
	$row = mysql_fetch_array($sql_total); 
	$total = $row['id'];  

	$this_time = $time - 900;
	$sql_online = mysql_query('SELECT * FROM ' . COUNTER_TABLE . " WHERE timed > '$this_time'"); 
	$online = mysql_num_rows($sql_online); 
}
//
// End counter
//

if ($cf->counter_on == 1) {
	$class = 'copy_counter';
} else {
	$class = 'copy';
}

$replace = array (
	'l_amount_users' => $lang['amount_of_users'],
	'd_amount_users' => mysql_num_rows($query[user]),
	'd_newest_user' => $newest_user[0],
	'l_newest_user' => $lang['newest_user'],
	'd_online' => $online,
	'd_today' => $today,
	'd_total' => $total,
	'l_online' => $lang['l_online'],
	'l_today' => $lang['l_today'],
	'l_total' => $lang['l_total']	
);

foreach ($replace as $section => $value){
	$counter = str_replace('{'.$section.'}', $value, $counter);
}

if ($cf->counter_on == 0) {
	$counter = kill_tpl('counter', $counter);
}

$counter = include( 'styles/$cf->default_style/template/counter.html' );

echo $counter;

mysql_close($connection);

?>
.../template/counter.html

Code: Alles auswählen

<div>
<!-- START COUNTER -->
<div class="counter">
{l_online}: {d_online} <br> {l_today}: {d_today} <br> {l_total}: {d_total} <br> {l_amount_users}: {d_amount_users} <br> {l_newest_user}: {d_newest_user}
</div>
<!-- END COUNTER -->
</div>
Und noch etwas:
muss ich die Language-Datei überarbeiten?

mfg
Matze

P.S. Danke schon mal im Vorraus!

@Tim: Hast du eigentlich noch Daten vor dem Serverumzug, also vor nem halben Jahr? Da hab ich des ja schon hinbekommen, aber irgendwie hab ich die Daten verlegt

Re: Counter unter Menü

Verfasst: 2. September 2009, 08:38
von matze93
naja ich hab's nicht hinbekommen. Bei der alten Version hat des aber so ähnlich geklappt...

Re: Counter unter Menü

Verfasst: 2. September 2009, 21:42
von matze93
Inzwischen sieht meine counter.php so aus:

Code: Alles auswählen

<?php

define("IN_EasyHP", true);

session_start();

include "../includes/mysql.php";

$query[user] = mysql_query("SELECT id FROM " . USERS_TABLE . " ORDER BY id");
$query[newest_user] = mysql_query("SELECT name FROM " . USERS_TABLE . " ORDER BY id DESC LIMIT 1");

$newest_user = mysql_fetch_row($query[newest_user]);

if (ADMIN) {
	$counter = file_get_contents("style/template/menu/counter.html");
} elseif (!ADMIN) {
	$counter = file_get_contents("styles/$cf->default_style/template/menu/counter.html");
	
//
// Start counter
//
if ($cf->counter_on == 1) {
	$day = date("j"); 
	$month = date("m"); 
	$year = date("Y"); 
	$timenow = mktime(0, 0, 0, $month, $day, $year); 
	$time = time();
	$addr = $_SERVER['REMOTE_ADDR'];

	$check = mysql_query('SELECT * FROM ' . COUNTER_TABLE . " WHERE timed < '$timenow'");

	while ($row = mysql_fetch_array($check)) { 
		mysql_query('DELETE FROM ' . COUNTER_TABLE . " WHERE id = '" . $row['id'] . "'"); 
	} 

	$check2 = mysql_query('SELECT * FROM ' . COUNTER_TABLE . " WHERE ip = '$addr'"); 
	$row = mysql_num_rows($check2); 

	if ($row == '0') { 
		mysql_query('INSERT INTO ' . COUNTER_TABLE . " (id, ip, timed) VALUES ('', '$addr', '$time')"); 
	} else { 
		mysql_query('UPDATE ' . COUNTER_TABLE . " SET timed = '$time' WHERE ip = '$addr'");
	} 

	$sql_today = mysql_query('SELECT * FROM ' . COUNTER_TABLE); 
	$today = mysql_num_rows($sql_today); 


	$sql_total = mysql_query('SELECT * FROM ' . COUNTER_TABLE . " ORDER BY id DESC");  
	$row = mysql_fetch_array($sql_total); 
	$total = $row['id'];  

	$this_time = $time - 900;
	$sql_online = mysql_query('SELECT * FROM ' . COUNTER_TABLE . " WHERE timed > '$this_time'"); 
	$online = mysql_num_rows($sql_online); 
}
//
// End counter
//

if ($cf->counter_on == 1) {
	$class = 'copy_counter';
} else {
	$class = 'copy';
}

$replace = array (
	'counter_copy_class' => $class,
	'd_online' => $online,
	'd_today' => $today,
	'd_total' => $total,
	'l_online' => $lang['l_online'],
	'l_today' => $lang['l_today'],
	'l_total' => $lang['l_total']
);

foreach ($replace as $section => $value){
	$counter = str_replace('{'.$section.'}', $value, $counter);
}

if ($cf->counter_on == 0) {
	$counter = kill_tpl('counter', $counter);
}

echo $counter;

mysql_close($connection);

?>
Aber es wird nichts angezegt.

Re: Counter unter Menü

Verfasst: 3. September 2009, 12:35
von daniel
erstmal fällt mir auf, dass der Header, bzw common und co fehlt.
aber ich denke, dass wird unnötog sein, da du ja warscheinlich diese Datei includiert haben willst und nicht direkt aufrufst. oder?
aber dann sind diese Zeilen unnötig:

Code: Alles auswählen

define("IN_EasyHP", true);

session_start();

include "../includes/mysql.php";
stattdessen würd ich lieber nehmen:

Code: Alles auswählen

if (!IN_EASYHP)
die();

Re: Counter unter Menü

Verfasst: 3. September 2009, 18:42
von matze93
okay ich versuchs mal danke.

Re: Counter unter Menü

Verfasst: 3. September 2009, 18:54
von matze93
Nee klappt nicht.
So sieht meine counter.php aus:

Code: Alles auswählen

<?php

if (!IN_EasyHP)
die();

$query[user] = mysql_query("SELECT id FROM " . USERS_TABLE . " ORDER BY id");
$query[newest_user] = mysql_query("SELECT name FROM " . USERS_TABLE . " ORDER BY id DESC LIMIT 1");

$newest_user = mysql_fetch_row($query[newest_user]);

$counter = file_get_contents("styles/likeblog/template/menu/counter.html");
	
//
// Start counter
//
if ($cf->counter_on == 1) {
	$day = date("j"); 
	$month = date("m"); 
	$year = date("Y"); 
	$timenow = mktime(0, 0, 0, $month, $day, $year); 
	$time = time();
	$addr = $_SERVER['REMOTE_ADDR'];

	$check = mysql_query('SELECT * FROM ' . COUNTER_TABLE . " WHERE timed < '$timenow'");

	while ($row = mysql_fetch_array($check)) { 
		mysql_query('DELETE FROM ' . COUNTER_TABLE . " WHERE id = '" . $row['id'] . "'"); 
	} 

	$check2 = mysql_query('SELECT * FROM ' . COUNTER_TABLE . " WHERE ip = '$addr'"); 
	$row = mysql_num_rows($check2); 

	if ($row == '0') { 
		mysql_query('INSERT INTO ' . COUNTER_TABLE . " (id, ip, timed) VALUES ('', '$addr', '$time')"); 
	} else { 
		mysql_query('UPDATE ' . COUNTER_TABLE . " SET timed = '$time' WHERE ip = '$addr'");
	} 

	$sql_today = mysql_query('SELECT * FROM ' . COUNTER_TABLE); 
	$today = mysql_num_rows($sql_today); 


	$sql_total = mysql_query('SELECT * FROM ' . COUNTER_TABLE . " ORDER BY id DESC");  
	$row = mysql_fetch_array($sql_total); 
	$total = $row['id'];  

	$this_time = $time - 900;
	$sql_online = mysql_query('SELECT * FROM ' . COUNTER_TABLE . " WHERE timed > '$this_time'"); 
	$online = mysql_num_rows($sql_online); 
}
//
// End counter
//


$replace = array (
	'counter_copy_class' => $class,
	'd_online' => $online,
	'd_today' => $today,
	'd_total' => $total,
	'l_online' => $lang['l_online'],
	'l_today' => $lang['l_today'],
	'l_total' => $lang['l_total']
);

foreach ($replace as $section => $value){
	$counter = str_replace('{'.$section.'}', $value, $counter);
}

echo $counter;

?>
Die habe ich dann mit einem normalen Include Link in der includes/menu.php includet. Weder in der counter.php noch auf der Startseite ist ein Code geschweige denn ein Error zu sehen.

Re: Counter unter Menü

Verfasst: 3. September 2009, 19:10
von daniel
versuch mal an verschiedenen stellen einfache ausgaben zu testen.
einerseits so welche

Code: Alles auswählen

print "test auf Zeile". __LINE__;
oder auch die entsprechenden Variabeln wie

Code: Alles auswählen

print $today;
print $total;
print $online;
oder auch nach den MYSQL-Queries das hier:

Code: Alles auswählen

print mysql_error();
Danach solltest du zumindest feststellen, wo der Fehler liegt. Das sind übrigends Standardmethoden um Fehler zu finden.

MfG.: Daniel

Re: Counter unter Menü

Verfasst: 4. September 2009, 10:27
von matze93
Ja, weiß ich. Aber er hat kein MySQL-Fehler angezeigt. Ich glaube das liegt eher mit dem Template zusammen.

Re: Counter unter Menü

Verfasst: 5. September 2009, 13:40
von daniel
nun lass dir bitte nicht alles aus der Nase ziehen.

Code: Alles auswählen

print "test auf Zeile". __LINE__;
da wurde also alles ordentlich ausgegeben? bis zur letzten Zeile?

Code: Alles auswählen

print $today;
print $total;
print $online;
[...]

Code: Alles auswählen

print mysql_error();
und hier wurde nichts ausgegeben?
Es ist auch möglich, je nach servereinstellung, dass ohne diesen Befehl keine Fehlermeldung von MySQL angezeigt wird.

MfG.: Daniel

Re: Counter unter Menü

Verfasst: 6. September 2009, 20:34
von matze93
Na dann denke ich dass das am Server liegt. Ich hab's grad eben ein zweites mal probiert. Kommt bei dir eine Fehlermeldung?