MySQL Datenbank | Benutzerdaten als HTML & CSV ausgeben

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
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
der_inquisitor
Mitglied
Beiträge: 9
Registriert: 05.12.2005 13:34

MySQL Datenbank | Benutzerdaten als HTML & CSV ausgeben

Beitrag von der_inquisitor »

Hallo Welt.

Ich habe gestern das unten folgende kleine Skript geschrieben (bzw. ein bestehendes erweitert), das mir verschiedene Benutzerdaten aus der MySQL Datenbank ausliest und sie sowohl auf der Ergebnisseite anzeigt (damit man die eMail Adressen in den lokalen eMail Client kopieren kann), als auch ein CSV File erzeugt.
Nun besteht aber das Problem, daß meine Datei datenbank.csv ungeschützt im phpbb Verzeichnis liegt.
Daher meine Frage, on jemand eine einfache Lösung dafür parat hat. Ich möchte jedenfalls kein .htaccess geschütztes Verzeichnis, für das man neue Benutzerdaten benötigt (falls ich den phpbb-Login in .htaccess exportieren könnte, hätte ich allerdings nicht einzuwenden).
Es würde mir z.B. reichen, wenn die datenbank.csv nach dem Erzeugen nur 5 Minuten zum Download bereitsteht und dann gelöscht wird oder dergleichen.
Sorry, bin noch blutiger Anfänger.

Code: Alles auswählen

<?PHP 

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

// Restrict to members: 
if( !$userdata['session_logged_in'] ) 
{ 
   header("Location: " . append_sid("login.$phpEx?redirect=export.$phpEx", true)); 
   exit; }


// User überprüfen START 
// Nur Admins und Mods dürfen
if ( $userdata['user_level'] > 0 ) 
{ 
   // MAIL ADRESSEN AUSGEBEN START 
   $abfrage = "SELECT user_nachname, user_vorname, user_strasse, user_plz, user_from, user_telefon, user_email FROM phpbb_users WHERE user_nachname != '' ORDER BY user_nachname ASC"; 
   $ergebnis = mysql_query($abfrage); 
   echo "<span class = 'gensmall'><center><b>Alle Mailadressen in der Datenbank '" . $dbname . "' auf '" . $dbhost . "':</b></center><br><hr>"; 
   $datei = fopen("datenbank.csv", "w+"); 
   rewind($datei); 
   while ( $row = $db->sql_fetchrow($ergebnis) ) 
   {  
   $nachname =  $row['user_nachname'] ; 
   $vorname =   $row['user_vorname'] ; 
   $strasse =   $row['user_strasse'] ; 
   $plz =       $row['user_plz'] ; 
   $location =  $row['user_from'] ; 
   $telefon =   $row['user_telefon'] ; 
   $mail =      $row['user_email'] ; 
   

// entfernt Kommas aus den Variablen, damit das CSV nicht abkackt
   $nachname = preg_replace("/,/", " ", $nachname);
   $vorname =  preg_replace("/,/", " ", $vorname);
   $strasse =  preg_replace("/,/", " ", $strasse);
   $plz =      preg_replace("/,/", " ", $plz);
   $location = preg_replace("/,/", " ", $location);
   $telefon =  preg_replace("/,/", " ", $telefon);
   $mail =     preg_replace("/,/", " ", $mail);   
   
   echo $mail."; "; 
   fwrite($datei, $nachname.", " .$vorname.", " .$strasse.", " .$plz.", " .$location.", " .$telefon.", " .$mail."\n"); 
   } 

// noch ein Download Link zur datenbank.csv
   echo "<hr><a href=\"datenbank.csv\">als CSV-Datei herunterladen</A></span>"; 
   fclose($datei); 
   // MAIL ADRESSEN AUSGEBEN ENDE 
} 

else 
{ 
   message_die(GENERAL_MESSAGE, $lang['Not_Authorised'], $lang['Not_Authorised']); 
   exit; 
} 
// User überprüfen ENDE 

include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 
?>
Beste Grüße

der_Inquisitor
Zuletzt geändert von der_inquisitor am 08.01.2006 22:48, insgesamt 1-mal geändert.
der_inquisitor
Mitglied
Beiträge: 9
Registriert: 05.12.2005 13:34

gelöst

Beitrag von der_inquisitor »

Ich habe die Sache nun eleganter gelöst:

Mein erstes PHP gibt einfach nur die eMail Adressen aus und erzeugt kein CSV File mehr:

Code: Alles auswählen

<?PHP 

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

// Restrict to members: 
if( !$userdata['session_logged_in'] ) 
{ 
   header("Location: " . append_sid("login.$phpEx?redirect=export.$phpEx", true)); 
   exit; }


// User überprüfen START 
if ( $userdata['user_level'] > 0 ) 
{ 
   // MAIL ADRESSEN AUSGEBEN START 
   $abfrage = "SELECT user_nachname, user_vorname, user_strasse, user_plz, user_from, user_telefon, user_email FROM phpbb_users WHERE user_nachname != '' ORDER BY user_nachname ASC"; 
   $ergebnis = mysql_query($abfrage); 
   echo "<span class = 'gensmall'><center><b>Alle Mailadressen in der Datenbank '" . $dbname . "' auf '" . $dbhost . "':</b></center><br><hr>"; 
   while ( $row = $db->sql_fetchrow($ergebnis) ) 
   {  
   $nachname =  $row['user_nachname'] ; 
   $vorname =   $row['user_vorname'] ; 
   $strasse =   $row['user_strasse'] ; 
   $plz =       $row['user_plz'] ; 
   $location =  $row['user_from'] ; 
   $telefon =   $row['user_telefon'] ; 
   $mail =      $row['user_email'] ; 
   
   $nachname = preg_replace("/,/", " ", $nachname);
   $vorname =  preg_replace("/,/", " ", $vorname);
   $strasse =  preg_replace("/,/", " ", $strasse);
   $plz =      preg_replace("/,/", " ", $plz);
   $location = preg_replace("/,/", " ", $location);
   $telefon =  preg_replace("/,/", " ", $telefon);
   $mail =     preg_replace("/,/", " ", $mail);   
   
   echo $mail."; "; 
   } 
   echo "<hr><a href=\"" . append_sid("csv.$phpEx", true) . "\">als CSV-Datei herunterladen</A></span>"; 
   // MAIL ADRESSEN AUSGEBEN ENDE 
} 

else 
{ 
   message_die(GENERAL_MESSAGE, $lang['Not_Authorised'], $lang['Not_Authorised']); 
   exit; 
} 
// User überprüfen ENDE 

include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 
?>
Über den Link am Ende des obigen PHPs wird das folgende "csv.php" aufgerufen, das eine CSV Datei direkt ausgibt ohne sie auf den Webspace zu schreiben, die direkt heruntergeladen werden kann:

Code: Alles auswählen

<?PHP 

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 

// Restrict to members: 
if( !$userdata['session_logged_in'] ) 
{ 
   header("Location: " . append_sid("login.$phpEx?redirect=csv.$phpEx", true)); 
   exit; }


// User überprüfen START 
if ( $userdata['user_level'] > 0 ) 
{ 
   // MAIL ADRESSEN AUSGEBEN START 
   header ('Content-Disposition: attachment; filename="benutzerdatenbank.csv"');
   header ('Content-Type: text/comma-separated-values');

   $abfrage = "SELECT user_nachname, user_vorname, user_strasse, user_plz, user_from, user_telefon, user_email FROM phpbb_users WHERE user_nachname != '' ORDER BY user_nachname ASC"; 
   $ergebnis = mysql_query($abfrage); 
   while ( $row = $db->sql_fetchrow($ergebnis) ) 
   {  
   $nachname =  $row['user_nachname'] ; 
   $vorname =   $row['user_vorname'] ; 
   $strasse =   $row['user_strasse'] ; 
   $plz =       $row['user_plz'] ; 
   $location =  $row['user_from'] ; 
   $telefon =   $row['user_telefon'] ; 
   $mail =      $row['user_email'] ; 
   
   $nachname = preg_replace("/,/", " ", $nachname);
   $vorname =  preg_replace("/,/", " ", $vorname);
   $strasse =  preg_replace("/,/", " ", $strasse);
   $plz =      preg_replace("/,/", " ", $plz);
   $location = preg_replace("/,/", " ", $location);
   $telefon =  preg_replace("/,/", " ", $telefon);
   $mail =     preg_replace("/,/", " ", $mail);   
   
   echo $datei, $nachname.", " .$vorname.", " .$strasse.", " .$plz.", " .$location.", " .$telefon.", " .$mail."\n"; 
   } 
   // MAIL ADRESSEN AUSGEBEN ENDE 
} 

else 
{ 
include($phpbb_root_path . 'includes/page_header.'.$phpEx); 
   message_die(GENERAL_MESSAGE, $lang['Not_Authorised'], $lang['Not_Authorised']); 
   exit; 
include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 
} 
// User überprüfen ENDE 

?>
Es wird also erst gar keine statische Datei geschrieben, sodaß das zuvor geschilderte Sicherheitsproblem gar nicht erst entsteht.

Beachtet bitte, daß

Code: Alles auswählen

if ( $userdata['user_level'] > 0 ) 
dafür sorgt, daß Admins und Moderatoren Zugriff haben. Wäre dann entsprechend auf

Code: Alles auswählen

if ( $userdata['user_level'] = 1 ) 
zu ändern, wenn nur der Admin Zugriff haben sollte.
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“