Userdaten der Benutzerdefinierten Profilfelder downloaden?

Du suchst eine bestimmte Extension, weißt aber nicht genau wo bzw. ob sie überhaupt existiert? Du kannst hier die von dir gewünschte/gesuchte Extension beschreiben ...
Falls ein Extension-Autor eine der Anfragen hier aufnimmt, um eine neue Extension zu entwickeln, geht's in Extensions in Entwicklung weiter.
lj_schmitt
Mitglied
Beiträge: 25
Registriert: 25.01.2015 11:56

Userdaten der Benutzerdefinierten Profilfelder downloaden?

Beitrag von lj_schmitt »

Hallo ihr lieben,

habe mit der such Funktion leider nichts brauchbares gefunden

In unsere Webseite http://www.deutschehelden.de geht es um ein Online Kartenspiel.
Ich habe jetzt Benutzerdefinierte Profilfelder angelegt und möchte die gesamte liste der eingegebenen Profilfelden inklusive Usernamen downloaden

dabei bräuchte ich dringend hilfe :(

die Benutzerdefinierte Profilfelder sehen so aus:
[ externes Bild ]

und die ausgabe sollte ne exceltabelle oder CSV sein und in etwa so aufgeteilt sein

{Benutzername1}: commander, Karte_1, Karte_2, Karte_3, Karte_4, Karte_5, Karte_6, Karte_7, Karte_8, Karte_9, Karte_10, Inv1, Inv2, Inv3, Inv4, Inv5
{Benutzername2}: commander, Karte_1, Karte_2, Karte_3, Karte_4, Karte_5, Karte_6, Karte_7, Karte_8, Karte_9, Karte_10, Inv1, Inv2, Inv3, Inv4, Inv5
{Benutzername3}: commander, Karte_1, Karte_2, Karte_3, Karte_4, Karte_5, Karte_6, Karte_7, Karte_8, Karte_9, Karte_10, Inv1, Inv2, Inv3, Inv4, Inv5
{Benutzername4}: commander, Karte_1, Karte_2, Karte_3, Karte_4, Karte_5, Karte_6, Karte_7, Karte_8, Karte_9, Karte_10, Inv1, Inv2, Inv3, Inv4, Inv5



Ich habe hier nen phpcode gefunden weiß aber nicht so wirklich wie ich ihn abändern muss!?

Code: Alles auswählen

<?php 
    // Verbindung zum Datenbankserver 
    mysql_connect("host", "benutzer", "passwort") or die (mysql_error ()); 

    // Datenbank auswählen 
    mysql_select_db("datenbankname") or die(mysql_error()); 

    // Daten aus der Datenbank abrufen, wobei der Wert von id aus in der URL berücksichtigt wird 
    $strSQL = "SELECT * FROM search WHERE id=" . $_GET["id"]; 
    $rs = mysql_query($strSQL); 
     
    // Schleifendurchlauf durch $rs 
    while($row = mysql_fetch_array($rs)) { 

    // Schreibe die Daten der Person 
        echo "<dt>Name:</dt><dd>" . $row["VorUndNachName"] . " " . $row["Todestag"] . "</dd>"; 
        echo "<dt>Karte1, </dt><dd>" . $row["Geburtstag"] . "</dd>"; 
        echo "<dt>Karte2, </dt><dd>" . $row["Geburtsort"] . "</dd>"; 

    } 

    // Schließt die Datenbankverbindung 
    mysql_close(); 
    ?>
das mit dem zugang ist mir klar, nur wie lade ich die einträge aus den verschiedenen Datenbanken??

wäre super wenn mir da jemand helfen kann
paddle
Mitglied
Beiträge: 18
Registriert: 01.02.2015 20:11

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von paddle »

Hi,

Wenn es dir nur um die Abfrage geht, so kannst du so die gewünschten Daten bekommen:

Code: Alles auswählen

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);

include($phpbb_root_path . 'common.' . $phpEx);

//Frage die Daten aus den benötigten Tabellen
$sql_query = 'SELECT u.username, u.user_id, p.* FROM ' . PROFILE_FIELDS_DATA_TABLE . ' AS p, ' . USERS_TABLE .' AS u WHERE p.user_id = u.user_id';

//Führe die Datenbankabfrage durch
$result = $db->sql_query($sql_query);

//laufe über das Ergebnis und gebe die Daten aus
while ($row = $db->sql_fetchrow($result)) {
    echo '{' . $row['username'] . '},'  . $row['pf_karte_1'] . ','  . $row['pf_karte_2'];  \\hier alle benötigten Felder abfragen
}
 
Anstatt die Daten auszugeben, kannst du sie natürlich auch in eine Datei schreiben.
lj_schmitt
Mitglied
Beiträge: 25
Registriert: 25.01.2015 11:56

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von lj_schmitt »

das sieht ja schonmal gut aus, nur wie setze ich das um das alles in eine tabelle geladen wird!? z.b. in eine csv datei?

habe jetzt versucht den code so zu verändern, nur die ausgabe passt irgendwie nicht, iwas mache ich falsch!?

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);

include($phpbb_root_path . 'common.' . $phpEx);

//Frage die Daten aus den benötigten Tabellen
$sql_query = 'SELECT u.username, u.user_id, p.* FROM ' . PROFILE_FIELDS_DATA_TABLE . ' AS p, ' . USERS_TABLE .' AS u WHERE p.user_id = u.user_id';

//Führe die Datenbankabfrage durch
$result = $db->sql_query($sql_query);

//laufe über das Ergebnis und gebe die Daten aus
while ($row = $db->sql_fetchrow($result)) {
    echo '{' . $row['username'] . '}:'  . $row['pf_tu_commander'] . ', '  . $row['pf_tu_karteeins', '  . $row['pf_tu_kartezwei', '  . $row['pf_tu_kartedrei', '  . $row['pf_tu_kartevier', '  . $row['pf_tu_kartefuenf', '  . $row['pf_tu_kartesechs', '  . $row['pf_tu_kartesieben', '  . $row['pf_tu_karteacht', '  . $row['pf_tu_karteneun', '  . $row['pf_tu_kartezehn', '  . $row['pf_tu_inv_a', '  . $row['pf_tu_inv_b', '  . $row['pf_tu_inv_c', '  . $row['pf_tu_inv_d', '  . $row['pf_tu_inv_e'];  \\hier alle benötigten Felder abfragen
}
?>
bekomme aber nur das als ausgabe

Code: Alles auswählen

sql_query($sql_query); //laufe über das Ergebnis und gebe die Daten aus while ($row = $db->sql_fetchrow($result)) { echo '{' . $row['username'] . '}:' . $row['pf_tu_commander'] . ', ' . $row['pf_tu_karteeins', ' . $row['pf_tu_kartezwei', ' . $row['pf_tu_kartedrei', ' . $row['pf_tu_kartevier', ' . $row['pf_tu_kartefuenf', ' . $row['pf_tu_kartesechs', ' . $row['pf_tu_kartesieben', ' . $row['pf_tu_karteacht', ' . $row['pf_tu_karteneun', ' . $row['pf_tu_kartezehn', ' . $row['pf_tu_inv_a', ' . $row['pf_tu_inv_b', ' . $row['pf_tu_inv_c', ' . $row['pf_tu_inv_d', ' . $row['pf_tu_inv_e']; \\hier alle benötigten Felder abfragen } ?>


kannst du mit noch einmal dabei helfen?

in der phpbb_profile_fields_data steht auch nur die user_id und die pf_tu_commander etc als id
lj_schmitt
Mitglied
Beiträge: 25
Registriert: 25.01.2015 11:56

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von lj_schmitt »

so ich hab es selber hinbekommen, waren ein paar syntax fehler drin ;-)

aber leider gibt er mir nur die ids der profilfelder aus, kann mir das jemand so schrieben das er stattdessen die eingetragenen namen ausgibt?!

hier schonmal der funktionstüchtige code für alle anderen ;-)

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);

include($phpbb_root_path . 'common.' . $phpEx);

//Frage die Daten aus den benötigten Tabellen
$sql_query = 'SELECT u.username, u.user_id, p.* FROM ' . PROFILE_FIELDS_DATA_TABLE . ' AS p, ' . USERS_TABLE .' AS u WHERE p.user_id = u.user_id';

//Führe die Datenbankabfrage durch
$result = $db->sql_query($sql_query);

//laufe über das Ergebnis und gebe die Daten aus
while ($row = $db->sql_fetchrow($result)) 

{
    echo '{' . $row['username'] . '}:' . $row['pf_tu_commander'] . ', ' . $row['pf_tu_karteeins'] . ', ' . $row['pf_tu_kartezwei'] . ', ' . $row['pf_tu_kartedrei'] . ', ' . $row['pf_tu_kartevier'] . ', ' . $row['pf_tu_kartefuenf'] . ', ' . $row['pf_tu_kartesechs'] . ', '  . $row['pf_tu_kartesieben'] . ', '  . $row['pf_tu_karteacht'] . ', '  . $row['pf_tu_karteneun'] . ', ' . $row['pf_tu_kartezehn'] . ', '  . $row['pf_tu_inv_a'] . ', '  . $row['pf_tu_inv_b'] . ', ' . $row['pf_tu_inv_c'] . ', '  . $row['pf_tu_inv_d'] . ', '  . $row['pf_tu_inv_e'] . "\n"; 
}
?>

so sieht dann meine ausgabe aus

Code: Alles auswählen

{JensS19}:4, 484, 83, 135, 8, 874, 874, 539, 705, 1107, 1, 1626, 1225, 733, 572, 474 {TimoE6}:23, 484, 330, 1824, 449, 83, 1373, 136, 572, 872, 1, 1676, 1728, 1603, 337, 1012 {Garthyrail}:4, 1443, 136, 872, 161, 484, 449, 1, 1, 1, 1, 1373, 1824, 83, 330, 572 {ThomasBu75}:8, 1529, 495, 485, 572, 1824, 449, 161, 135, 1603, 778, 730, 1408, 456, 1575, 1818 {darkstorne}:14, 1443, 733, 1373, 484, 572, 1662, 1824, 1, 1, 1, 1, 1, 1, 1, 1 {TheLaughingMax}:4, 161, 1628, 449, 1599, 83, 589, 1332, 509, 872, 866, 401, 705, 1676, 572, 1303 {Lalamith}:23, 484, 1543, 495, 449, 540, 1607, 83, 1427, 1603, 1529, 161, 33, 164, 874, 730 {Mathia190989}:11, 495, 495, 572, 484, 1408, 449, 1529, 1738, 1, 1, 1, 1, 1, 1, 1
Benutzeravatar
Wolfsblvt
Mitglied
Beiträge: 29
Registriert: 26.10.2014 22:15

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von Wolfsblvt »

Willst du die Namen als Spaltenüberschrift, oder bei jedem Wert davor?
Ich meine die Namen hast du ja quasi schon angegeben unten bei der Ausgabeformatierung.

$row['pf_tu_commander'] gibt dir den Wert für das Profilfeld mit dem Namen "pf_tu_commander".
Lesser, greater, middling, it's all the same. Proportions are negotiated, boundaries blurred.
I'm not a pious hermit, I haven't done only good in my life. But if I'm to choose between one evil and another,
then I prefer not to choose at all.
― Andrzej Sapkowski, The Last Wish
lj_schmitt
Mitglied
Beiträge: 25
Registriert: 25.01.2015 11:56

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von lj_schmitt »

es sind halt karten und es sind benutzerdefinierte Profilfelder.

die namen liegen ja in der phpbb_profile_fields_lang
und ich hätte gerne statt die id nummer den ganzen Kartennamen drinstehen

in etwa so:
{JensS19}:Barracus, Abbhorend Recluse, Dreamhaunter, Halerift, Arch Nova Alpha, Tartarus Graft, Jilted Baughe, etc, etc, etc, etc
paddle
Mitglied
Beiträge: 18
Registriert: 01.02.2015 20:11

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von paddle »

Hi,

Ich hatte gedacht die Namen würden direkt in der Datenbank stehen. - Mein Fehler.

Versuch es dann am besten mal so:

Code: Alles auswählen

<?php

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);

include($phpbb_root_path . 'common.' . $phpEx);

//Hole die phpbb Container zum verwalten der Daten
$cp = $phpbb_container->get('profilefields.manager');
$cd = $phpbb_container->get('profilefields.type.dropdown');

// lege die Profilfelder fest, die abgefragt werden sollen
$cardnames = array("tu_commander","tu_karteeins","tu_kartezwei"); //in dieser Form alle gewünschten Karten in das Array eintragen

// Erstelle ein neues Array für alle User und Karten
$decks = array();

//Hole alle User aus der Datenbank
$sql_query = 'SELECT username, user_id FROM '. USERS_TABLE ;
$result = $db->sql_query($sql_query);

//laufe über alle User
while ($row = $db->sql_fetchrow($result)) {
    $user_id = $row['user_id'];
    
    //erstelle ein temporaeres Kartenarray
    $cards = array();    
    
    //setze die 0. Position auf den Username 
    $cards[0] = $row['username'];
    
    //hole alle Profilfelder
    $profile_fields = $cp->grab_profile_fields_data($user_id);
    
    //schreibe die Benutzerdefinierten Profilfelder in das Kartenarray
    $i=1;
    foreach($cardnames as $card) {
        if(isset($profile_fields[$user_id])) {
            $cards[$i] = $cd->get_profile_value($profile_fields[$user_id][$card]['value'],$profile_fields[$user_id][$card]['data']);
        }
        $i++;
    }
    
    //Haenge das Kartenarray an das $decks array
    array_push($decks, $cards); 
}

?>
Die Daten: (Nutzername, Karte1, Karte2, ...) liegen dann am Ende des Codes im Array $decks.
Wie man ein Array in eine csv Datei schreibst, wirst du denk ich leicht über google herausfinden. Ist ja nicht phpBB spezifisch :)
lj_schmitt
Mitglied
Beiträge: 25
Registriert: 25.01.2015 11:56

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von lj_schmitt »

bin leider kein Profi was das alles hier angeht, ich verstehe das nicht so ganz mit der array ausgabe, ich habe zwar den code bearbeitet bekomme aber keine ausgabe :cry:

könnte mir da noch jemand helfen? :oops:

Code: Alles auswählen

<?php

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);

include($phpbb_root_path . 'common.' . $phpEx);

//Hole die phpbb Container zum verwalten der Daten
$cp = $phpbb_container->get('profilefields.manager');
$cd = $phpbb_container->get('profilefields.type.dropdown');

// lege die Profilfelder fest, die abgefragt werden sollen
$cardnames = array("pf_tu_commander","pf_tu_karteeins","pf_tu_kartezwei","pf_tu_kartedrei","pf_tu_kartevier","pf_tu_kartefuenf","pf_tu_kartesechs","pf_tu_kartesieben","pf_tu_karteacht","pf_tu_karteneun","pf_tu_kartezehn","pf_tu_inv_a","pf_tu_inv_b","pf_tu_inv_c","pf_tu_inv_d","pf_tu_inv_e"); //in dieser Form alle gewünschten Karten in das Array eintragen

// Erstelle ein neues Array für alle User und Karten
$decks = array();

//Hole alle User aus der Datenbank
$sql_query = 'SELECT username, user_id FROM '. USERS_TABLE ;
$result = $db->sql_query($sql_query);

//laufe über alle User
while ($row = $db->sql_fetchrow($result)) {
    $user_id = $row['user_id'];
    
    //erstelle ein temporaeres Kartenarray
    $cards = array();    
    
    //setze die 0. Position auf den Username 
    $cards[0] = $row['username'];
    
    //hole alle Profilfelder
    $profile_fields = $cp->grab_profile_fields_data($user_id);
    
    //schreibe die Benutzerdefinierten Profilfelder in das Kartenarray
    $i=1;
    foreach($cardnames as $card) {
        if(isset($profile_fields[$user_id])) {
            $cards[$i] = $cd->get_profile_value($profile_fields[$user_id][$card]['value'],$profile_fields[$user_id][$card]['data']);
        }
        $i++;
    }
    
    //Haenge das Kartenarray an das $decks array
    array_push($decks, $cards); 
}

//test array csv ausgabe

$fp = fopen('daten.csv', 'a');
    fputcsv($fp, $decks);
    fclose($fp);
?>
er speichert mir die datei zwar aufm server, das soll er aber nicht, er soll sie mir direkt ausgeben als textanzeige und zum speichern auf der festplatte.

z.Z. steht in der server datei nur array array...... etc nix anderes als array :-(


Bitte bitte um Hilfe!?
paddle
Mitglied
Beiträge: 18
Registriert: 01.02.2015 20:11

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von paddle »

Was genau möchtest du denn jetzt damit machen?

Möchtest du ein csv / xls Datei so auf dem Server speichern, dass der Nutzer sie herunterladen kann, oder möchtest du bei Aufruf der php Datei im Browser eine Ausgabe wie in deinem Startbeitrag angegeben?
lj_schmitt hat geschrieben:z.Z. steht in der server datei nur array array...... etc nix anderes als array
Das liegt daran, dass $decks ein 2 dimensionales Array ist. Du bekommst für jeden Index des Arrays also wieder ein Array zurück.
fputcsv erwartet aber ein Array, mit nur Werten.

Das könntest du z.B. so lösen:

Code: Alles auswählen

$fp = fopen('daten.csv', 'a');
foreach($decks as $deck) {
    fputcsv($fp, $deck);
}
fclose($fp);
Hab ich jetzt nicht getestet, sollte aber funktionieren.
lj_schmitt
Mitglied
Beiträge: 25
Registriert: 25.01.2015 11:56

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von lj_schmitt »

Schonmal danke für die nette Hilfe ;-)

Ich hätte gerne eine textausgabe der Datei auf der hp und die Möglichkeit diese als csv oder XML, ist eigentlich egal, zu downloaden. Die Bearbeitung erfolgt durch eine batchdatei.

also in etwas so als Text:

Code: Alles auswählen

Username1: commander, Karte 1, Karte 2,... Karte 10
Username1: inventar karte 1, Inventar karte 2..., Inventar karte 5(geht demnächst bis inventar karte 10)

Username2: commander.... 
Etc..

Etc...
Etc...
Antworten

Zurück zu „Extension Suche/Anfrage“