Kampfberichte auslesen und in tabelle einfügen

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
RessiX
Mitglied
Beiträge: 44
Registriert: 28.05.2014 13:12
Kontaktdaten:

Kampfberichte auslesen und in tabelle einfügen

Beitrag von RessiX »

hallo,
ich wollte mal fragen, ob es möglich ist, kampfberichte automatisch auslesen und in eine tabelle einfügen zu lassen.
ein kampfbericht sieht folgender maßen aus:

Kampfbericht
Datum 30.05.2014 - 22:23:19
Planet 97:46:4


Schiffe des Angreifers (97:85:2 / RessiX [-FAT-])
Auftrag Angreifen
Anzahl Vernichtet
Spionagesonde 5 0
Cougar 5 0
Gesamt in CKK 5,00131 0,00000


Schiffe/Türme des Verteidigers (97:46:4 / Edis06)
Keine Schiffe


Informationen
Dieser Planet wurde geplündert
Eisen 12.099
Silizium 2.749
Wasser 0
Wasserstoff 1.348
Ein Spionagebericht wurde erstellt

wie ihr seht, wirkt das ganze sehr chaotisch. um besser darstellen zu können, wie ich mir das vorstelle, versuch ich's mal im Code

Code: Alles auswählen

Kampfbericht
Datum	30.05.2014 - 22:23:19
Planet	97:46:4


Schiffe des Angreifers (xxx / RessiX [-FAT-])
Auftrag                      |            Angreifen
Schiffe:            |    Anzahl    |         Vernichtet
Spionagesonde       |      5       |            0
Cougar              |      5       |            0
Gesamt in CKK       |	5,00131    |          0,00000


Schiffe/Türme des Verteidigers (xxx / Edis06)
Keine Schiffe


Informationen
Dieser Planet wurde geplündert
Eisen	      |  12.099
Silizium	   |   2.749
Wasser	        0
Wasserstoff	|  1.348
Ein Spionagebericht wurde erstellt
ist es möglich dies mit einem einzigen bbcode zu realisieren, als beispiel [.kb]Hier Kampfbericht einfügen[./kb]
wenn ja, wie?

P.S.:
Mein Forum: http://www.halfbaked.de/forum
Derzeit installierte Versionen:
phpBB 3.0.12
PHP Version 5.3.10
MySQL 5.5.37
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Kampfberichte auslesen und in tabelle einfügen

Beitrag von Miriam »

Du könntest es mit dieser MOD versuchen und dort entsprechende "Formulare" vorgeben -> phpBB3 Support Ticket System MOD.

Oder meinetwegen auch den hier probieren -> Advanced BBCode Box 3

Du redest von "Auslesen", meinst Du das Auslesen der Daten aus einer Datei?
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
RessiX
Mitglied
Beiträge: 44
Registriert: 28.05.2014 13:12
Kontaktdaten:

Re: Kampfberichte auslesen und in tabelle einfügen

Beitrag von RessiX »

ne, ich meinte das auslesen aus dem [.kb]text[./kb]. die beiden mods werd ich mir mal ansehen

//edit:

ich hab mir den Supportticket-Mod mal installiert und angeschaut. ehrlich gesagt weiss ich nicht wie ich da grossartig was dran verändern kann, geschweigedenn inwiefern der mir beim auslesen der kb's hilft.

bitte um detilierte hilfe (am besten schritt für schritt) da ich von sowas keine ahnung habe.
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: Kampfberichte auslesen und in tabelle einfügen

Beitrag von HabNurNeFrage »

Hi,

in welcher Form werden die Kampfberichte bei GigraWars denn angezeigt?
Kann man die öffentlich verlinken, muss man die downloaden oder wie werden die bereitgestellt?

Wenn man bei GigraWars eingeloggt sein muss, um die Berichte zu sehen, wird man irgendwas kopieren müssen, was man dann im Beitrag wieder einfügt.
Um das vernünftig zu formatieren und dann als bbCode umzusetzen, müsste man zumindest mal einen Kampfbericht im Original sehen können.
Kannst Du einen dieser Kampfberichte hier verlinken oder einstellen?

LG
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
RessiX
Mitglied
Beiträge: 44
Registriert: 28.05.2014 13:12
Kontaktdaten:

Re: Kampfberichte auslesen und in tabelle einfügen

Beitrag von RessiX »

Kampfbericht

standartmässig wird der kampfbericht einfach komplett markiert und in unserem forum eingefügt, was eben zu diesem chaos führt:
Kampfbericht
Datum 31.05.2014 - 10:58:45
Planet 100:223:3


Schiffe des Angreifers (100:201:2 / Nukle4r [poppR])
Auftrag Angreifen
Anzahl Vernichtet
Spionagesonde 1 1
Gesamt in CKK 0,00026 0,00026


Schiffe/Türme des Verteidigers (100:223:3 / RessiX [-FAT-])
Anzahl Vernichtet
Recycler 1 0
Cougar 9 0
Gesamt in CKK 9,04529 0,00000


Informationen
Es wurde kein Spionagebericht erstellt
Der Verteidiger Recycelt folgende Rohstoffe
Eisen 0
Silizium 4
Wasser 0
Wasserstoff 0
In Simulator übernehmen
Hier mal die möglichen schiffe und türme:

Schiffe:
Schakal
Recycler
Spionagesonden
Renegade
Raider
Tarnbomber
Kolonisationsschiff
Jäger
Cougar
Longeagle V
Kleines Handelsschiff
Großes Handelsschiff
Ikarus

Türme:
Leichter Laserturm
Laserturm
EMP-Werfer
Plasmaturm
Raketenwerfer
Longeagle X
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: Kampfberichte auslesen und in tabelle einfügen

Beitrag von HabNurNeFrage »

Hi,

bbCode-Nutzung: [kb]{URL}[/kb]

HTML-Ersetzung:

Code: Alles auswählen

<div style="text-align:center;">
<object data="{URL}" type="text/html" style="width:550px;height:550px;border:0;"></object>
</div> 
Nutzung: [kb] Link zum Kampfbericht [/kb]

Die Werte 550px hinter width und height kannst Du nach Belieben anpassen.
Dadurch ändert sich dann die Größe der Anzeige :wink:

Bei dieser Methode kann man auch nicht schummeln bei der Veröffentlichung des Berichtes :lol:

LG
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
RessiX
Mitglied
Beiträge: 44
Registriert: 28.05.2014 13:12
Kontaktdaten:

Re: Kampfberichte auslesen und in tabelle einfügen

Beitrag von RessiX »

gute idee. doch was passiert wenn der kb in 2 wochen aus der ingame-db gelöscht wird?

zumindestens als übergangslösung ist das schonmal akzeptabel, danke =)
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: Kampfberichte auslesen und in tabelle einfügen

Beitrag von HabNurNeFrage »

Hi,

die bleiben nur 2 Wochen gespeichert... Hm...
Dann musst Du die Kampfberichte auf Deinen Server übertragen 8)

Du hast Glück, denn ich doktore gerade an einem Script, mit dem man externe Seiten auf den eigenen Server übertragen und speichern kann.
Ich habe das ein wenig abgeändert und für Deine Kampfberichte optimiert.

Lege auf Deinem Server per FTP einen Ordner an (z.B. kampfberichte) und gib diesem Ordner CHMOD 755.
Dann kopiere folgenden Code in einen Editor, speichere ihn als index.php (UTF8 ohne BOM) und lade die Datei in den Ordner:

Code: Alles auswählen

<?php

error_reporting(E_STRICT);

function get_source_with_curl ( $url, $get_array = array(), $timeout = 4, $error_report = true )
{
    $get_string = null;
    foreach ($get_array as $key => $val)
    {
        $get_string
        = $get_string
        . $key
        . '='
        . urlencode($val)
        . '&';
    }
    $get_string = rtrim($get_string, '&');
    if (!empty($get_string)) $url .= '?' . $get_string;

    $curl = curl_init();

    $header[] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
    $header[] = "Cache-Control: max-age=0";
    $header[] = "Connection: keep-alive";
    $header[] = "Keep-Alive: 300";
    $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
    $header[] = "Accept-Language: en-us,en;q=0.5";
    $header[] = "Pragma: "; 

    curl_setopt( $curl, CURLOPT_URL,            $url);
    curl_setopt( $curl, CURLOPT_USERAGENT,      'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6');
    curl_setopt( $curl, CURLOPT_USERAGENT,      'Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1');
    curl_setopt( $curl, CURLOPT_USERAGENT,      'Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0.1');
    curl_setopt( $curl, CURLOPT_HTTPHEADER,     $header);
    curl_setopt( $curl, CURLOPT_REFERER,        'http://www.google.com');
    curl_setopt( $curl, CURLOPT_ENCODING,       'gzip,deflate');
    curl_setopt( $curl, CURLOPT_AUTOREFERER,    true);
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt( $curl, CURLOPT_TIMEOUT,        $timeout);
    curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false);

    $sourcecode = curl_exec($curl);

    if ($sourcecode === false)
    {
        if ($error_report)
        {
            echo "<p>Achtung: Dieser Kampf-Bericht (URL) existiert nicht oder der Server ist z.Zt. nicht erreichbar.<br />Bitte erneut versuchen...</p>";
            exit;
        }
        curl_close($curl);
        return false;
    }
    
    curl_close($curl);
    return $sourcecode;
}


$result = "<p>Kampf-Bericht-Link (URL) ins Feld kopieren und dann absenden.</p>";

if (!empty($_GET["url"]))
{
    $url = strtolower($_GET["url"]);
    
    if(!filter_var(($url), FILTER_VALIDATE_URL))
    {
        header('Location:' . $_SERVER['SCRIPT_NAME']); 
    }
    
    $parsed_uri = parse_url($url);
    
    if ($parsed_uri['query'])
    {
        $filename = $parsed_uri['query'];
    }
    else
    {
        $filename = time();
    }
    
    $sourcecode = get_source_with_curl($url);

    $fp = fopen("$filename.html","wb");
    if( $fp == false )
    {
        $result = "<p>Achtung: Dieser Kampf-Bericht existiert nicht oder der Server ist nicht erreichbar.<br />Es ist ein Fehler aufgetreten. Bitte erneut versuchen.</p>";
    }
    else
    {
    fwrite($fp, $sourcecode);
    $new_html = 'http://' . $_SERVER['SERVER_NAME'] . dirname($_SERVER['REQUEST_URI']) . '/' . $filename . '.html';
    $result = '
        <p><hr /><b>Übertragung erfolgreich: </b>
        <a href="' . $new_html . '" onclick="window.open(\'' . $new_html . '\');return false;"> >> Kampf-Bericht anzeigen << </a>
        <br /><br />
        Inhalt aus dem Feld kopieren und im Beitrag wieder einfügen:
        <br />
        <input type="text" size="76" value="[kb]' . $new_html . '[/kb]" maxlength="144" onclick="this.select();" /> 
        <hr /></p>
    ';
    fclose($fp);
    }
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de" xml:lang="de">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>...</title>
</head>
<body>

<div>
    <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="get">
        <fieldset style="border:0;">
            <strong>Link zum Kampfbericht einfügen:</strong><br />
            <input type="text" size="70" name="url" value="" maxlength="144" />
            <input type="submit" name="submit" value=">" title="Kampfbericht übertragen" />
            <?php echo $result; ?>
        </fieldset>
    </form>
</div>

</body>
</html>
Nun kannst Du diese Datei aufrufen, indem Du "http://deine_domain.tld/der_neue_ordner/" aufrufst.

Lege jetzt einen weiteren bbCode an:
Nutzung: [kb-upload][/kb-upload]
HTML-Ersetung:

Code: Alles auswählen

<div style="text-align:center;">
<object data="http://deine_domain.tld/der_neue_ordner/index.php" type="text/html" style="width:550px;height:220px;border:0;"></object>
</div> 
Darin muss http://deine_domain.tld/der_neue_ordner/index.php auf die neue Datei verweisen.
Du kannst diesen Link auch relativ angeben.

Jetzt können Deine User zuerst den neuen bbCode aufrufen, auf Vorschau klicken und dort ihren Kampfbericht übertragen.
Dazu wird die URL des Kmpfberichtes in das Textfeld kopiert und abgesendet.
Sofern Dein Server cURL und fopen() unterstützt, erscheint daraufhin ein weiteres Textfeld, indem man den kompletten Code des ersten bbCodes kopieren kann.
Wird dieser nun in den Beitrag eingefügt, wird der Kampfbericht wie zuvor angezeigt, nur dauerhaft und von Deinem Server...

LG

PS: Viel Spaß damit :)
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Kampfberichte auslesen und in tabelle einfügen

Beitrag von Miriam »

Jetzt solltest Du nur noch dafür sorgen, daß die zugehörige CSS Datei immer verfügbar ist.

Wenn es für die User zu aufwendig sein sollte, könntest Du es auch so machen:
  • Erstelle eine Datei namens kb_upload.php im neuen Verzeichnis kb, das sich im Foren-Root-Verzeichnis befindet. Also da, wo die config.php ist.
  • Diese neue Datei hat folgenden Inhalt:

    Code: Alles auswählen

    <?php
    $id = (isset($_GET['id'])) ? $_GET['id'] : false;
    $prefix = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de" xml:lang="de">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <title></title>
    </head>
    <body>';
    $trailer = '</center></body></html>';
    $count = false;
    
    if ($id)
    {
        $file = "./$id.html";
        if (file_exists($file))
        {
            print 'Es wurde Bereits ein Kampfbericht mit der ID: ' . $id . ' erstellt.';
            return;
        }
        $host = 'http://uni1.gigrawars.de/kb.php?id=' . (string)$id;
        $string = file_get_contents($host);
        $string = stristr($string, "<center>");
        $string = stristr($string, "</center>", true);
        $string = str_replace('In Simulator übernehmen', '', $string, $count);
        if (!$count)
        {
            print $id . ' ist keine g&uuml;ltige Kampfberichts-ID';
            return;
        }
    }
    
    
    $html_string = $prefix . $string . $trailer;
    if (!file_put_contents($file, $html_string)) 
    {
        print "Fehler beim Schreiben der Datei.";
    }
    else 
    {
        print 'Der Bericht wurde erstellt.';
    } 
  • speichere die Datei als UTF-8 ohne BOM kodiert ab.
  • gibt dem Verzeichnis CHMOD Rechte 755 (KB:chmod)
  • erstelle im ACP einen benutzerdefinierten BBCode:
    • BBCode-Benutzung:

      Code: Alles auswählen

      [kb]{IDENTIFIER},{NUMBER}[/kb]
    • HTML-Ersetzung:

      Code: Alles auswählen

      <div style="text-align:center;">
      <a href="./kb/kb_upload.php?id={IDENTIFIER}">Erstelle Kampf-Bericht mit ID: {IDENTIFIER}</a>
      </div>
      <div style="text-align:center;">
      <object data="./kb/{IDENTIFIER}.html" type="text/html" style="width:550px;height:{NUMBER}px;border:0;"></object>
      </div>  
    • Text für Tipp-Anzeige:

      Code: Alles auswählen

      Benutzung [kb]ID des Berichts,Höhe der Anzeige[/kb]  
    • Beim Verfassen eines Beitrags anzeigen: Ja
Der BBCode kann zum Erstellen eines Berichts mittels der Berichts ID benutzt werden, außerdem muß die Höhe für die Anzeige mit übergeben werden.
Beispiel: [kb]hg3n9ajvllsa,700[/kb]
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
RessiX
Mitglied
Beiträge: 44
Registriert: 28.05.2014 13:12
Kontaktdaten:

Re: Kampfberichte auslesen und in tabelle einfügen

Beitrag von RessiX »

Hallo Miriam,

deine lösung gefällt mir schon sehr gut, jedoch noch eine frage: kann man irgendwie die farben einstellen? im moment bekomme ich den kb als schwarzen text auf schwarzem grund, was natürlich eher unpraktisch ist

eine hellere textfarbe ware ideal, da der standartstyle des forums einen schwarzen hintergrund hat.
sorry, für die fragen, für euch ist es sicher ne 10-sec. sache die farbe zu ändern... aber ich bin halt neu :D

ach ja, kann man "Erstelle Kampf-Bericht mit ID: {IDENTIFIER}" automatisieren? sprich, dass es automatisch erstellt und der kb angezeigt wird, ohne das nutzer vor dem absenden auf vorschau und den link klicken müssen

//edit:
ich hab den style leicht angepasst. user die selbst die höhe festlegen sollen? erfahrungsgemäss sind damit viele überfordert, daher hab ich einen wert festgelegt, und das problem mit schwarzer schrift auf schwarzem grund hab ich auch gelöst

Code: Alles auswählen

<object data="./kb/{IDENTIFIER}.html" type="text/html" style="background-color:#59685b;width:550px;height:550px;border:1;">
Verschoben von [3.0.x] Mod Suche/Anfragen nach [3.0.x] Mod Bastelstube am 02.06.2014 11:57 durch HabNurNeFrage

Antworten

Zurück zu „[3.0.x] Mod Bastelstube“