Counter unter Menü

Wenn du Fragen zu EasyHP hast, eröffne hier ein Thema.

Moderator: Supporter

matze93
Inaktiv
Beiträge: 314
Registriert: 21. Januar 2009, 14:10

Counter unter Menü

Beitrag 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
matze93
Inaktiv
Beiträge: 314
Registriert: 21. Januar 2009, 14:10

Re: Counter unter Menü

Beitrag von matze93 »

naja ich hab's nicht hinbekommen. Bei der alten Version hat des aber so ähnlich geklappt...
matze93
Inaktiv
Beiträge: 314
Registriert: 21. Januar 2009, 14:10

Re: Counter unter Menü

Beitrag 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.
Benutzeravatar
daniel
Ehemaliger
Beiträge: 413
Registriert: 13. März 2008, 16:49
Wie bist du auf EasyHP gekommen?: Werbung auf phpBB.de
Wohnort: Bremen
Kontaktdaten:

Re: Counter unter Menü

Beitrag 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();
matze93
Inaktiv
Beiträge: 314
Registriert: 21. Januar 2009, 14:10

Re: Counter unter Menü

Beitrag von matze93 »

okay ich versuchs mal danke.
matze93
Inaktiv
Beiträge: 314
Registriert: 21. Januar 2009, 14:10

Re: Counter unter Menü

Beitrag 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.
Benutzeravatar
daniel
Ehemaliger
Beiträge: 413
Registriert: 13. März 2008, 16:49
Wie bist du auf EasyHP gekommen?: Werbung auf phpBB.de
Wohnort: Bremen
Kontaktdaten:

Re: Counter unter Menü

Beitrag 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
matze93
Inaktiv
Beiträge: 314
Registriert: 21. Januar 2009, 14:10

Re: Counter unter Menü

Beitrag von matze93 »

Ja, weiß ich. Aber er hat kein MySQL-Fehler angezeigt. Ich glaube das liegt eher mit dem Template zusammen.
Benutzeravatar
daniel
Ehemaliger
Beiträge: 413
Registriert: 13. März 2008, 16:49
Wie bist du auf EasyHP gekommen?: Werbung auf phpBB.de
Wohnort: Bremen
Kontaktdaten:

Re: Counter unter Menü

Beitrag 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
matze93
Inaktiv
Beiträge: 314
Registriert: 21. Januar 2009, 14:10

Re: Counter unter Menü

Beitrag 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?
Antworten