Seite 2 von 2

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Verfasst: 05.02.2015 18:52
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);

?>

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Verfasst: 24.02.2015 12:02
von lj_schmitt
Danke, hat so wunderbar funktioniert :grin: :wink:

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Verfasst: 10.05.2015 10:39
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);

?>

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Verfasst: 12.05.2015 17:24
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

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Verfasst: 12.05.2015 17:58
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 ]

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Verfasst: 19.05.2015 14:01
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:

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Verfasst: 20.05.2015 18:48
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.

Re: Userdaten der Benutzerdefinierten Profilfelder downloade

Verfasst: 21.05.2015 11:28
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