Seite 1 von 1

Nickpageliste: Reduzierung der GB-Einträge der User

Verfasst: 17.11.2004 10:21
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);

?>

Verfasst: 17.11.2004 12:51
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...

Verfasst: 17.11.2004 14:38
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

Verfasst: 17.11.2004 16:15
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)

Verfasst: 17.11.2004 16:30
von klunzen
:o es ist soweit.. ging ruck-zuck :grin:

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