Nickpageliste: Reduzierung der GB-Einträge der User

Du hast Probleme beim Einbau oder bei der Benutzung eines Mods? In diesem Forum bist du richtig.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
klunzen
Mitglied
Beiträge: 341
Registriert: 01.07.2004 01:29

Nickpageliste: Reduzierung der GB-Einträge der User

Beitrag von klunzen »

hallo.
habe es nun geschafft, wie man die gb-einträge der user auf eine bestimmte anzahl reduzieren kann.
dabei werden die ältesten einträge gelöscht.

ein problem hab ich noch: in der modifizierten nickpage_list.php hab ich in zeile 145 folgendes eingefügt:

Code: Alles auswählen

//ab hier neu ------
	//schleife wird solange ausgeführt bis 100 einträge pro user in np_gb vorhanden sind
	while ($gb_entrys-101 >= 0) 
	{
	//sql-befehl löscht älteste
	
	$sql = " DELETE FROM phpbb_nickpagegb WHERE an = '".$uid."' ORDER BY zeit LIMIT 1 ";
		 
		if( !$result = $db->sql_query($sql) )
			{
			message_die(GENERAL_ERROR, 'Could not delete DB entry', '', __LINE__, __FILE__, $sql);
			}

	$gb_entrys--;
	//end-while
	}
//ende --------------
--> die nickpage_list wird nur solange ausgeführt, bis ein user an die reihe kommt, der in meinem falle über 100 einträge hat. dann ist schluß. nun muss ich immer F5 drücken bis alle user bearbeitet wurden. es tritt weiter kein fehler auf.

wieso stoppt das script? warum muss man F5 drücken? müßte doch eigentlich normal alle user abarbeiten!?

hier die gesamte nickpage_list.php:

Code: Alles auswählen

<?
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
include($phpbb_root_path . 'includes/page_header.'.$phpEx); 

//Anzeige der Nickpages pro Seite
//kann durchaus editiert werden ^^
$seiten_pro_seite = 15;

//Fixe Variablen initialisieren - nicht editieren!!
$ok = '<img src="templates/nickpage/ok.gif" border="0">';
$no = '<img src="templates/nickpage/no.gif" border="0">';
$public = '<img src="templates/nickpage/public.gif" border="0"> besuche';
$private = '<img src="templates/nickpage/privat.gif" border="0"> erst einloggen';
$i = 0;

//
//template laden
//
$template->set_filenames(array( 
'list' => '../nickpage/nickpagelist.tpl',) 
); 

//
//Konfiguration einlesen
//
$sql = "SELECT registered_only FROM ".NICKPAGECONFIG_TABLE;
if(!$result = $db->sql_query($sql))
{
	message_die(CRITICAL_ERROR, "Konnte Querrie auf Allgemeine Nickpagemod Konfiguraionstabelle nicht ausführen!", "", __LINE__, __FILE__, $sql);
}
$row = $db->sql_fetchrow($result);
$registered_only = $row['registered_only'];

//
//Limit
//
if($_GET['site'] != "")
{
	$start= ($_GET['site']-1)*$seiten_pro_seite;
	$anfang = $_GET['site'];
}
else
{
	$start = 0;
	$anfang = 1;
}
$limit = "LIMIT ".$start.",".$seiten_pro_seite;

//
//Seitenanzeige
//
//zaehle alle np´s
$sql = "SELECT COUNT(uid) AS zaehle FROM ".NICKPAGE_TABLE;
if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Konnte Nickpage´s nicht zählen!', '', __LINE__, __FILE__, $sql);
}
$row = $db->sql_fetchrow($result);
$anzahl = $row['zaehle'];
$ende = ceil($anzahl/$seiten_pro_seite);
if($anfang > 1 AND $ende > $anfang)
{
	$move = '<a href="?site='.($anfang -1).'">vorherige Seite</a>&nbsp;&nbsp;<a href="?site='.($anfang + 1).'">nächste Seite</a>';
}
elseif($anfang > 1 AND $ende = $anfang)
{
	$move = '<a href="?site='.($anfang -1).'">vorherige Seite</a>';
}
elseif($ende > $anfang)
{
	$move = '<a href="?site='.($anfang + 1).'">nächste Seite</a>';
}

//
//Auslesen der Daten
//
$sql = "SELECT a.user_id, a.username, a.user_from, a.user_website, a.user_interests, b.name, b.info, b.born, b.specialnick, b.pic, b.kreatives, b.safe FROM ".USERS_TABLE." a, ".NICKPAGE_TABLE." b WHERE b.uid=a.user_id ORDER BY a.username ASC ".$limit."";
if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Konnte Nickpagedaten nicht auslesen!', '', __LINE__, __FILE__, $sql);
}
while($row = $db->sql_fetchrow($result))
{
	$username = $row['username'];
	$uid = $row['user_id'];
	if($row['user_from'] != "")
		$user_from = $ok;
	else
		$user_from = $no;
		
	if($row['user_website'] != "")
		$user_website = $ok;
	else
		$user_website = $no;
	
	if($row['user_interests'] != "")
		$user_interests = $ok;
	else
		$user_interests = $no;
		
	if($row['name'] != "")
		$name = $ok;
	else
		$name = $no;
	
	if($row['born'] != "")
		$born = $ok;
	else
		$born = $no;
	
	if($row['pic'] != "")
		$pic = $ok;
	else
		$pic = $no;
	
	if($row['safe'] != "1" AND $registered_only != "1")
		$safe = '<a href="nickpage.php?user='.$username.'">'.$public.'</a>';
	elseif($userdata['username'] != "Anonymous")
		$safe = '<a href="nickpage.php?user='.$username.'">'.$public.'</a>';
	else
		$safe = $private;
	
	//Gästebucheinträge
	$sql = "SELECT COUNT(an) AS zaehle FROM ".GAESTEBUCH_TABLE." WHERE an = '".$uid."'";
	if( !($result2 = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Konnte Gästebucheinträge nicht zählen!', '', __LINE__, __FILE__, $sql);
	}
	$row2 = $db->sql_fetchrow($result2);
	$gb_entrys = $row2['zaehle'];
	

// ab hier neu +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	//schleife wird solange ausgeführt bis 100 einträge pro user in np_gb vorhanden sind
	while ($gb_entrys-101 >= 0) 
	{
	//sql-befehl löscht älteste
	
	$sql = " DELETE FROM phpbb_nickpagegb WHERE an = '".$uid."' ORDER BY zeit LIMIT 1 ";
		 
		if( !$result = $db->sql_query($sql) )
			{
			message_die(GENERAL_ERROR, 'Could not delete DB entry', '', __LINE__, __FILE__, $sql);
			}

	$gb_entrys--;
	//end-while
	}
// ende ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


	//Galleriepics?
	$sql = "SELECT COUNT(uid) AS zaehle FROM ".GALERIE_TABLE." WHERE uid = '".$uid."'";
	if( !($result2 = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Konnte Galleriepics nicht zählen!', '', __LINE__, __FILE__, $sql);
	}
	$row2 = $db->sql_fetchrow($result2);
	$gal_pics = $row2['zaehle'];
	
	//gerade - ungerade variable
	$i++;
	if ($i % 2 != 0)
	{
		$class = 'row1';
	}
	else
	{
		$class = 'row2';
	}

	
	$template->assign_block_vars('Nickpagelist',array(
	'Username' => $username,
	'Name' => $name,
	'Wohnort' => $user_from,
	'Webseite' => $user_website,
	'Hobbies' => $user_interests,
	'Alter' => $born,
	'Userpic' => $pic,
	'Gb_entrys' => $gb_entrys,
	'Gal_pics' => $gal_pics,
	'Safe' => $safe,
	'Class' => $class,
	));
}
$template->assign_vars(array(
'L_Username' => $lang['Username'], //ist schon da 
'L_Wohnort' => $lang['Location'], //ist schon da -> profilblock
'L_Webseite' => $lang['Website'], //ist schon da -> profilblock
'L_Hobbies' => $lang['Interests'],//ist schon da -> profilblock

'L_Name' => $lang['Name'],
'L_Alter' => $lang['Alter'],
'L_Userpic' => $lang['Userpic'],
'L_Eintraege' => $lang['Eintraege'],
'L_Bilder' => $lang['Bilder'],
'L_Zugang' => $lang['Zugang'],
'Nickpages' => $anzahl,
'Move' => $move,
));
//
//parsen
//
$template->pparse('list');

//
//footer
//
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>
klunzen
Mitglied
Beiträge: 341
Registriert: 01.07.2004 01:29

Beitrag von klunzen »

nun das ganze mit einer if-anweisung und nicht mit einer while-schleife:
...zeile 145

Code: Alles auswählen

	if ($gb_entrys>100) {
	$anzahl = $gb_entrys-100;
	
	$sql = " DELETE FROM ".GAESTEBUCH_TABLE." WHERE an = '".$uid."' ORDER BY zeit LIMIT " .$anzahl;		 
		if( !$result = $db->sql_query($sql) )
			{
			message_die(GENERAL_ERROR, 'Could not delete DB entry', '', __LINE__, __FILE__, $sql);
			}
	$gb_entrys=100;
	
	}
nun werden alle überflüssigen mit einem sql-befehl gelöscht!
ABER: es besteht nach wie vor das selbe problem:

normaler weise klappert das script alle user ab die eine nickpage haben.

das macht es weiterhin auch, nur sobald ein user mehr als 100 gb-einträge hat, werden die überflüssigen dieses users gelöscht und das script stoppt ohne die nachfolgenden user zu checken...
klunzen
Mitglied
Beiträge: 341
Registriert: 01.07.2004 01:29

Beitrag von klunzen »

LÖSUNG des problems auf eine andere art: :o

einfach in zeile 77 folgenden code in die originale nickpage_list.php einfügen:

Code: Alles auswählen

//
//Reduzierung der GB-Einträge jedes einzelnen Users
//Anzahl an Einträgen in Zeile 22 einstellen
$users = array();

$sql = "SELECT a.user_id FROM ".USERS_TABLE." a, ".NICKPAGE_TABLE." b WHERE b.uid=a.user_id ORDER BY a.username ASC ".$limit."";
if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Konnte Nickpagedaten nicht auslesen!', '', __LINE__, __FILE__, $sql);
}
while($row = $db->sql_fetchrow($result))
{
 $uid = $row['user_id'];
 array_push($users, $uid);
}    

for($i=0; $i<=count($users)-1; $i++)
{
 //echo "-" . $users[$i] . "<br>";
     $uid = $users[$i];
//Gästebucheinträge
	$sql = "SELECT COUNT(an) AS zaehle FROM ".GAESTEBUCH_TABLE." WHERE an = '".$uid."'";
	if( !($result2 = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Konnte Gästebucheinträge nicht zählen!', '', __LINE__, __FILE__, $sql);
	}
	$row2 = $db->sql_fetchrow($result2);
	$gb_entrys = $row2['zaehle']; 
 
    if ($gb_entrys>$anzahl_gb_eintraege) //if ($gb_entrys>100) 
	{
    $anz = $gb_entrys-$anzahl_gb_eintraege;  //$anz = $gb_entrys-100;
    
    $sql = " DELETE FROM ".GAESTEBUCH_TABLE." WHERE an = '".$uid."' ORDER BY zeit LIMIT " .$anz;		 
		if( !$result = $db->sql_query($sql) )
			{
			message_die(GENERAL_ERROR, 'Could not delete DB entry', '', __LINE__, __FILE__, $sql);
			}
	  
    //echo  "- user " . $users[$i] . "einträge " .$gb_entrys. "  $anz<br>";
      
	}//end-if
    
}//end-for
:o es ist nun auch möglich die anzahl an gb-einträgen einfach selbst zu bestimmen. hierfür muss in zeile 20 folgendes eingefügt werden:

Code: Alles auswählen

//wieviele GB-Einträge pro User sind erlaubt
$anzahl_gb_eintraege = 100;
wie gesagt.. auf diese art und weise funzt's.. da nun der "algorithmus" ausserhalb der anderen schleife liegt...

falls einer den fehler beim alten problem entdeckt, solle er sich mal bitte melden oder einfach hier rein posten..
thx
klunzen
Mitglied
Beiträge: 341
Registriert: 01.07.2004 01:29

Beitrag von klunzen »

soo.. das ist das letzte posting zu diesem thema für mind. heute...

hab nun was geschrieben, das nach einem eintrag prüft ob der user schon die maximal zulässige anzahl an einträgen hat.
wenn ja, wird der älteste gelöscht. :P

mit der variable $anzahl_gb_eintraege kann die anzahl festgelegt werden.

habe einem mod den code geschickt.. wird somit (denk ich) die tage bei den snippets mit auftauchen...
http://www.phpbb.de/viewforum.php?f=34

wenn der code veröffentlicht wird, geb ich hier bescheid... 8)
klunzen
Mitglied
Beiträge: 341
Registriert: 01.07.2004 01:29

Beitrag von klunzen »

:o es ist soweit.. ging ruck-zuck :grin:

http://www.phpbb.de/viewtopic.php?t=70712
Antworten

Zurück zu „phpBB 2.0: Mod Support“