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.
paddle
Mitglied
Beiträge: 18
Registriert: 01.02.2015 20:11

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von paddle »

Du hast ja jetzt die daten.csv.

In der sollten die Daten ja jetzt folgendermaßen vorliegen:

Code: Alles auswählen

Username1,commander,karte1,karte2,....,karte10
Username2,commander,karte1,karte2,....,karte10
Username3,commander,karte1,karte2,....,karte10
Username4,commander,karte1,karte2,....,karte10
Username5,commander,karte1,karte2,....,karte10
...
Auf die erstellte Datei kannst du jetzt einfach ein Link hinsetzen.
Um das ganze anzuzeigen, kannst du entweder gleich das Array nutzen, was erstellt worden ist, oder du liest die Datei wieder folgendermaßen ein und gibst sie direkt aus:

Code: Alles auswählen

<?php

$fp = fopen("csv.csv", "r");
while($data = fgetcsv($fp))
{
    foreach ($data as $value)
    {
        print $value . ",";
    }
    print '<br />';
}
fclose($fp);

?>
lj_schmitt
Mitglied
Beiträge: 25
Registriert: 25.01.2015 11:56

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von lj_schmitt »

Danke, hat so wunderbar funktioniert :grin: :wink:
lj_schmitt
Mitglied
Beiträge: 25
Registriert: 25.01.2015 11:56

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von lj_schmitt »

hallo,

habe jetzt zusätzliche profilfelden die als string (textfeld) laufen, würd die gerne auch noch auslesen. was muss ich da noch hinzufügen?

die datenbanknamen lauten cardone, cardtwo etc und in der datenbank stehen diese als text in der profilefield.data so wie der rest.

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","tu_kartedrei","tu_kartevier","tu_kartefuenf","tu_kartesechs","tu_kartesieben","tu_karteacht","tu_karteneun","tu_kartezehn","tu_inv_a","tu_inv_b","tu_inv_c","tu_inv_d","tu_inv_e","tu_inv_f","tu_inv_g","tu_inv_h","tu_inv_i","tu_inv_j","tu_zug","tu_br"); //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
echo unlink('daten.csv');
$fp = fopen('daten.csv', 'a');
foreach($decks as $deck) {
    fputcsv($fp, $deck);
}
fclose($fp);

?>
paddle
Mitglied
Beiträge: 18
Registriert: 01.02.2015 20:11

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von paddle »

lj_schmitt hat geschrieben:die datenbanknamen lauten cardone, cardtwo etc und in der datenbank stehen diese als text in der profilefield.data so wie der rest.
Dann solltest du die einfach auch in das Array $cardnames einfügen können und es werden die Tabellen mit abgefragt.

Also so:

Code: Alles auswählen

$cardnames = array("tu_commander", "tu_karteeins","tu_kartezwei","tu_kartedrei","tu_kartevier","tu_kartefuenf","tu_kartesechs","tu_kartesieben","tu_karteacht","tu_karteneun","tu_kartezehn","tu_inv_a","tu_inv_b","tu_inv_c","tu_inv_d","tu_inv_e","tu_inv_f","tu_inv_g","tu_inv_h","tu_inv_i","tu_inv_j","tu_zug","tu_br","cardone","cardtwo",....,"cardten"); //in dieser Form alle gewünschten Karten in das Array eintragen
lj_schmitt
Mitglied
Beiträge: 25
Registriert: 25.01.2015 11:56

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von lj_schmitt »

nein geht leider nicht, hab ich schon probiert.Da es nicht über ids läuft und kein dropdown feld ist, sonder rein nur ein normales textfeld (string) und auch als Text in der Datenbank steht

[ externes Bild ]
lj_schmitt
Mitglied
Beiträge: 25
Registriert: 25.01.2015 11:56

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von lj_schmitt »

Hi Paddle, :wink:

Also als hinweiß, ich kann es mit dem ersten sehr gut auslesen, nur müsste das noch irgendwie ins array mit rein

die Reihenfolge sollte dann so aussehen: Username, Dropdownfelder ("tu_commander", "tu_karteeins"...), textfelder (cardone, cardtwo,...)

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_commander'] . ',' . $row['pf_cardone'] . ',' . $row['pf_cardtwo'] . ',' . $row['pf_cardthree'] . ',' . $row['pf_cardfour'] . ',' . $row['pf_cardfive'] . ',' . $row['pf_cardsix'] . ',' . $row['pf_cardseven'] . ',' . $row['pf_cardeight'] . ',' . $row['pf_cardnine'] . ',' . $row['pf_tu_cardten'] . ',' .  "<br>" ."\r\n" ; 
}
?>
mein array:

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","tu_kartedrei","tu_kartevier","tu_kartefuenf","tu_kartesechs","tu_kartesieben","tu_karteacht","tu_karteneun","tu_kartezehn","tu_inv_a","tu_inv_b","tu_inv_c","tu_inv_d","tu_inv_e","tu_inv_f","tu_inv_g","tu_inv_h","tu_inv_i","tu_inv_j","tu_zug","tu_br"); //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
echo unlink('daten.csv');
$fp = fopen('daten.csv', 'a');
foreach($decks as $deck) {
    fputcsv($fp, $deck);
}
fclose($fp);

?>
und damit lasse ich es anzeigen:

Code: Alles auswählen

<style> 

.csvTable{ 
    font-size: 10pt; 
    border-top: 1px solid #ccc; 
    border-left: 1px solid #ccc; 
    border-right: 1px solid #ccc; 
    color: #fff; 
}     

.csvTable th{ 
    text-align:left; 
    border-bottom: 1px solid #ccc; 
} 

.csvTable td{ 
    border-bottom: 1px solid #ccc; 
}     

</style> 
<center>
<?php 
$zeilen = readfile('http://****/ausgabe.php');  
$hasTitle = true; 

echo '<table border="0" cellspacing="0" cellpadding="5" width="600" class="csvTable">';


$handle = fopen("daten.csv", "r"); 
$start = 0; 

while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)  
{ 

    echo '<tr>' . "\n"; 
   
  for ( $x = 0; $x < count($data); $x++) 
    { 
    if ($start == 0 && $hasTitle == true) 
        echo '<th>'.$data[$x].'</th>' . "\n"; 
    else 
        echo '<td>'.$data[$x].'</td>' . "\n"; 
    } 
     
    $start++; 
     
    echo '</tr>' . "\n"; 
     
} 

fclose($handle); 

echo '</table>'; 

?>
</center>
Hoffe das hilft dir irgendwie weiter :grin:
paddle
Mitglied
Beiträge: 18
Registriert: 01.02.2015 20:11

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von paddle »

OK, hab das dann mal geschafft mir etwas Zeit zu nehmen und das durchzutesten.

Folgendes funktioniert, zumindest, wenn es einfache Textfelder sind:

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","tu_kartedrei","tu_kartevier","tu_kartefuenf","tu_kartesechs","tu_kartesieben","tu_karteacht","tu_karteneun","tu_kartezehn","tu_inv_a","tu_inv_b","tu_inv_c","tu_inv_d","tu_inv_e","tu_inv_f","tu_inv_g","tu_inv_h","tu_inv_i","tu_inv_j","tu_zug","tu_br"); //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']);
            if(!isset($cards[$i])) {
                $cards[$i] = $profile_fields[$user_id][$card]['value'];
            }
        }
        $i++;
    }
    
    //Haenge das Kartenarray an das $decks array
    array_push($decks, $cards); 
}

//test array csv ausgabe
echo unlink('daten.csv');
$fp = fopen('daten.csv', 'a');
foreach($decks as $deck) {
    fputcsv($fp, $deck);
}
fclose($fp);

?>
Ich habe in der foreach-Schleife noch eine Abrage hinzugefügt, ob das Feld gefunden wurde, wenn nciht, soll er doch bitte den Wert direkt auslesen:

Code: Alles auswählen

    if(!isset($cards[$i])) {
        $cards[$i] = $profile_fields[$user_id][$card]['value'];
    }
Die Felder die du zusätzlich abfragen willst, fügst du dann einfach in das Array $cardnameshinzu.
lj_schmitt
Mitglied
Beiträge: 25
Registriert: 25.01.2015 11:56

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Beitrag von lj_schmitt »

Funktioniert leider nicht, weil er anscheinend immer noch auf

Code: Alles auswählen

$cd = $phpbb_container->get('profilefields.type.dropdown')
zugreift.
Es ist als Textfeld Auswahl eingetragen (string). wenn ich den wert ändere

Code: Alles auswählen

if(!isset($cards[$i])) {
                    $cards[$i] = $cp->get_profile_value($profile_fields[$user_id][$card]['value']);
auf

Code: Alles auswählen

if(!isset($cards[$i])) {
                    $cards[$i] = $cp->get_profile_value($profile_fields[$user_id][$card]['data']);
ändere,
schreibt er mir nur in die nicht ausgewählten dropdownfelder statt ein Leeres feld ein "array"
ergo, greift er garnicht auf die stringfelder zu. bzw läd er sich zu tote und bricht dann irgendwann ab

ps. hab sie aber eingetragen:

Code: Alles auswählen

    $cardnames = array("tu_commander", "tu_karteeins","tu_kartezwei","tu_kartedrei","tu_kartevier","tu_kartefuenf","tu_kartesechs","tu_kartesieben","tu_karteacht","tu_karteneun","tu_kartezehn","tu_inv_a","tu_inv_b","tu_inv_c","tu_inv_d","tu_inv_e","tu_inv_f","tu_inv_g","tu_inv_h","tu_inv_i","tu_inv_j","tu_zug","tu_br", "cardone", "cardtwo"); //in dieser Form alle gewünschten Karten in das Array eintragen
Antworten

Zurück zu „Extension Suche/Anfrage“