kostenloser Webspace werbefrei: lima-city


Bestimmten Datenbankinhalt in ein Dokument exportieren?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s*****0

    Hallo,

    ich bin recht neu hier, und ich weiß auch nicht genau, ob es ok ist, die Frage hier zu stellen, aber ich hab keinen Plan von PHP-Scripting - zumindest nur sehr, sehr wenig. Daher wäre es sehr schön, wenn mir trotzdem jemand helfen könnte...

    Sobald ich FTP-Volumen und eine Datenbank gekauft habe, werde ich ja meine komplette Website hier rüber ziehen. Dennoch habe ich bald etwas bestimmtes vor, und zwar möchte ich aus einer bestehenden Datenbank bestimmte Tabellen/Felder extrahieren und in ein Dokument packen - das kann TXT oder ein Word-.doc sein.

    Es handelt sich um CD-Rezensionen, die ich geschrieben habe.

    Die CD-Rezensionen haben eine fortlaufende Nummer, die beim Verfassen eines neuen Artikels +1 gezählt wird, egal wer ihn schreibt. Nun haben sich bei dieser Website fast 6000 Artikel gesammelt. Nun ist jedem Artikel eine Schreiber-ID zugeordnet. Nun soll das Script jeden der Artikel durchforsten und schauen, ob die ID die meine ist - sagen wir, es ist die 25. Nun soll er aus diesem Artikel den dazugehörigen Titel ziehen und zwei Textbausteine hinausziehen, die er dahinter hängt. Optimalerweise soll das Dokument nach dem Titelfeld sortiert werden.

    Da es ein bisshen viel ist, fast 1200 Folgendes soll also passieren:

    Nehmen wir an, ich habe eine SQL-Tabelle: inhalt_news.
    Dort hat es die Felder: artikelnr, usernr, titel, text1, text2

    Die Tabelle sieht also, wenn man die Reihenfolge der Felder so übernimmt, so aus:

    1, 33, "MADONNA - Blablubb", "Dies ist die neue Madonna-Scheibe.", "Die ist voll toll!"
    2, 25, "HUI BUH - Das Schlossgespenst", "Dies ist das neueste Hörspiel.", "Das Hörspiel ist total gruselig!"
    3, 25, "SLAYER - Hell Awaits", "Das Kultalbum der Metalband wurde neu aufgelegt.", "Das klingt aber gefährlich!"
    4, 10, "EIFFEL 65 - Blue", "Das schlimmste Lied der Welt.", "Auch wenn es mir gefällt!"
    5, 25, "BERND DAS BROT - Tanzt das Brot", "Zu kurze Arme.", "Aber ein dufter Typ!"

    Und das Script soll die Tabelle folgendermaßen auslesen:

    - Schaue in der Tabelle inhalt_news vom artikelnr nummer 1 bis zum Schluss nach, ob usernr = 25"
    - Sortiere alle diese artikel, die von usernr 25 geschrieben wurden, nach der spalte titel
    - Schreibe dann jeweils hintereinander in EIN gesamtes Dokument: ersten titel, Leerzeile, dazugehöriger text1, Leerzeile, dazugehöriger text2, noch ne Leerzeile, dann ein Trennzeichen wie z.B. drei Bindestriche, und dann das Gleiche mit dem nächsten Artikel. (Sollte das nicht realisierbar sein, hätte ich auch kein Problem damit, dass mir zu jedem einzelnen Artikel ein Dokument erstellt wird.)

    Ausgegeben werden soll demnach:


    BERND DAS BROT - Tanzt das Brot

    Zu kurze Arme.

    Aber ein dufter Typ.

    ---

    HUI BUH - Das Schlossgespenst

    Dies ist das neueste Hörspiel.

    Das Hörspiel ist total gruselig!

    ---

    SLAYER - Hell Awaits

    Das Kultalbum der Metalband wurde neu aufgelegt.

    Das klingt aber gefährlich!

    ---


    Wenn mir jemand hier helfen könnte, fände ich das natürlich genial. Wenn nicht, nicht böse sein.


    Beitrag zuletzt geändert: 16.12.2009 1:10:24 von sfl2000
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. k**********k

    Ich habe heute meinen sozialen Tag :biggrin:

    <?php
    $MYSQL_SERVER="mysql.lima-city.de";
    $MYSQL_USER="Benutzername";
    $MYSQL_PASSWORD="Passwort";
    $MYSQL_DB="Datenbankname";
    $MYSQL_TABLE="inhalt_news";
    $USERID="25";
    $LINE_SEPARATOR="
    
    ";
    $SECTION_SEPARATOR="---";
    $FILENAME="news.txt";
    
    $fobj=fopen($FILENAME,"w+");
    $mysqli = new mysqli($MYSQL_SERVER,$MYSQL_USER,$MYSQL_PASSWORD,$MYSQL_DB);
    if(mysqli_connect_errno()){
     echo mysqli_connect_error();
    }
    if($result = $mysqli->query("SELECT * FROM ".$MYSQL_TABLE." WHERE usernr = ".$USERID." ORDER BY titel")){
     while($row = $result->fetch_object()){
        $output=$row->titel.$LINE_SEPARATOR.$row->text1.$LINE_SEPARATOR.$row->text2.$LINE_SEPARATOR.$SECTION_SEPARATOR.$LINE_SEPARATOR;
        fwrite($fobj,$output);
     }
     $result->close();
    }
    $mysqli->close();
    fclose($fobj);
    
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($FILENAME));
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($FILENAME));
    ob_clean();
    flush();
    readfile($FILENAME);
    ?>


    Pass' die ersten 9 Variablen nach deinen Wünschen an, und das Script sollte laufen. Ich bin davon ausgegangen, dass du die Variablen in dem Script definierst, und nicht übergeben bekommst, deswegen hab ich es auch nicht gegen SQL-Injektion abgesichert.

    Edit: Hoppla, Ich dachte, du willst die Datei auch gleich runterladen. Wenn du das nicht willst, dann lass einfach den Teil zwischen einschliesslich header('Content-Description: File Transfer'); und readfile($FILENAME); weg.

    Lg Ketchup

    Beitrag zuletzt geändert: 16.12.2009 5:45:15 von ketchupfleck
  4. Autor dieses Themas

    s*****0

    Boah! DANKE! Ich werde das nachher ausprobieren und dann hier Bericht erstatten.

    *freu*



    EDIT:

    Nun spuckt es folgende Fehlermeldung aus (Anmerkung: die Datenbank und der Webspace sind noch nicht auf lima-city migriert, sondern liegen noch auf dem alten Webspace, wo ich diese Dokumente auch erstellen möchte):


    Fatal error: Cannot instantiate non-existent class: mysqli in /homepages/8/d13469597/htdocs/meinpfad/rettemich/dateiname.php on line 15


    What? :)

    Habe eben auch mal recherchiert und herausgefunden, dass das Problem darin wurzelt, dass die PHP-Version des Servers, auf welchem die Inhalte liegen, die Version 4.4.9 haben. Uff.

    Beitrag zuletzt geändert: 16.12.2009 9:11:44 von sfl2000
  5. k**********k

    Habe eben auch mal recherchiert und herausgefunden, dass das Problem darin wurzelt, dass die PHP-Version des Servers, auf welchem die Inhalte liegen, die Version 4.4.9 haben. Uff.


    Das ist richtig. Version 4.4 hat meines Wissens nach noch nicht die msqli-Klasse. Als Lösung kann ich dir nur folgendes anbieten:

    Du packst das Script schon mal auf den Lima Webspace, und greifst einfach auf den Mysql-Server deines alten Webspaces zu indem du $MYSQL_SERVER entsprechend einstellst. Dann musst du erstmal nichts migrieren, kannst aber trotzdem von dem Script gebrauch machen. Der einzige Nachteil besteht darin, dass das erstellte Dokument dann auch auf dem Lima-Space liegt, aber ich weiß ja nicht wofür du die Datei brauchst, vieleicht lässt sich dafür auch eine Lösung finden.

    lg
  6. Alternativ könntest du das ganze Prozedural statt Objektorientiert schreiben. Dann kannst du die mysqli - Syntax durch mysql ersetzen und das sollte auch mit der alten PHP-Version funktionieren.

    Sieht dann etwa so aus (ungetestet):

    <?php
    $MYSQL_SERVER="mysql.lima-city.de";
    $MYSQL_USER="Benutzername";
    $MYSQL_PASSWORD="Passwort";
    $MYSQL_DB="Datenbankname";
    $MYSQL_TABLE="inhalt_news";
    $USERID="25";
    $LINE_SEPARATOR="
    
    ";
    $SECTION_SEPARATOR="---";
    $FILENAME="news.txt";
    
    $fobj=fopen($FILENAME,"w+");
    @ $sql = mysql_connect($MYSQL_SERVER,$MYSQL_USER,$MYSQL_PASSWORD);
    @ $sel = mysql_select_db($MYSQL_DB);
    if(!($sql && $sel)){
     echo "Verbindungsfehler";
    }
    if($result = mysql_query("SELECT * FROM ".$MYSQL_TABLE." WHERE usernr = ".$USERID." ORDER BY titel")){
     while($row = mysql_fetch_assoc($result)){
        $output=$row['titel'].$LINE_SEPARATOR.$row['text1'].$LINE_SEPARATOR.$row['text2'].$LINE_SEPARATOR.$SECTION_SEPARATOR.$LINE_SEPARATOR;
        fwrite($fobj,$output);
     }
    }
    @ mysql_close($sql);
    fclose($fobj);
    ?>


    Ich hoffe, dass das so richtig ist...

    €dit: Kleinen Fehler verbessert, jetzt sollte es passen.
    €€dit: :-o Jetzt hat der Ketchup doch tatsächlich noch einen gefunden... auch gleich verbessert :angel:

    Beitrag zuletzt geändert: 16.12.2009 22:54:16 von alphara
  7. Autor dieses Themas

    s*****0

    Wow, ihr seid großartig!

    So, also es kommt im Moment nur ein weißer Bildschirm und die Anzeige "fertig", allerdings sind es auch rund 8MB Datenbankinhalt, was die relevanten Felder angeht, mit der dann die Textdatei gefüllt wird.

    Ich lass euch wissen, was passiert. Also auf dem Webspace ist gerade eine Textdatei, die wächst... und wächst... und wächst... Mensch, wenn DAS jetzt hinhaut, bin ich euch echt zu ewigem Dank verpflichtet!

    EDIT 1: Ooookay... So, eine gigantische Textdatei wurde generiert, die dank Notepad++ allerdings keinen Absturz verursacht wie viele andere Editoren. Nun fällt mir auf, dass das Skript einige Felder "verschluckt", die aber definitiv in der Datenbank vorhanden sind.

    Hier zwei Beispiele "verschluckter" Felder:

    [lib align=right]a1165.jpg[/lib]Das Hirn komplett auf links gedreht, sitze ich nach zehn akustischen Abrissbirnen apathisch da, greife nach dem Portemonnaie und schaue auf meinem Personalausweis erst noch mal nach, wie ich heiße. Die unkontrollierten Zuckungen und willkürlichen Schreianfälle lassen auch wieder nach. Was ist mit dem Rezensenten passiert? Er hat "Order And Punishment" von den Tschechen !T.O.O.H! gehört, das zweite Album nach "Pod Vladou Bice".


    oder bspw.
    Dem Anhänger des Deutschpunk dürfte der Mann hinter ZWAKKELMANN ein Begriff sein, denn Kopf dieses Projektes ist kein Geringerer als Schlaffke Wolff, Mastermind der verblichenen SCHLIESSMUSKEL. Nun rückt uns der gute Mann also mit "Vollhorst", seinem als "Singspiel in 20 Liedern" untertitelten dritten Album, auf die Pelle.


    Sorry *hüstel*... für den einen Bandnamen kann ich nix, die Band hieß nun mal so. ;)

    EDIT 2:

    So, ich hab nun die Datenbank hier auf dem lima-city.de Webspace, ebenso zieh ich momentan gerade die Portal- und Forensoftware rüber.

    Das von Ketchupfleck gepostete erste Script habe ich angepasst, es funktioniert alles bestens. Doch der Fehler mit dem "Verschlucken" passiert auch hier.

    Humpf. Wie das?

    Ach ja: was ja sehr fein wäre, wäre ein Eingabefenster, in dem ich vor Ausführung des Scripts eine Eingabe der usernr erzwingen kann, so dass man von verschiedenen Usern die Beiträge extrahieren kann - eben dem, den man eingegeben hat. Optimalerweise sollte die Textdatei dann auch die Nummer im Dateinamen haben, meinetwegen bak_25.txt, bak_34.txt...

    Beitrag zuletzt geändert: 17.12.2009 12:53:05 von sfl2000
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!