kurzer Tag durch langen PHP Code ersetzen? preg_replace?

  • Hi,
    wusste nicht richtig wie ich den Titel formulieren sollte^^

    Ich mache für meinen Clan die Homepage und bin gerade die sie auf PHP umzuschreiben (war erst pur HTML)

    News System läuft schon und nun möchte ich auch etwas für die Clanwars einfügen mit umfangreichen Statisken.

    In den News sollen die Clanwars aber auch oft stehen, also müsste man es 2mal schreiben.

    Jetz hab ich mir das so vorgestellt:
    man gibt am ende der News [cw]ID des Clanwar[/cw] ein (bbcode hab ich schon einiges drin und über preg_replace gemacht).
    Jetz soll das ganze aber durch einen großen PHP Code ersetzt werden.
    verbindung zum mysql server herstellen, tabelle öffnen, ganze zeile mit der clanwar-ID auslesen und dann in einer tabelle alles wiedergeben (sind ca. 30-40felder in der tabelle^^)

    Nun meine frage:
    wie löse ich das am besten in PHP?
    oder kann preg_replace mit solchen großen "daten" umgehen?

  • Das per preg_replace ist Blödsinn. Speichere den Krempel in einer Datenbank und lese je nach Bedarf die Daten vernünftig aus.

  • so will ichs ja auch machen^^
    nur wie stelle ich fest das bedarf besteht?

    Nicht in jeder News wird man einen Clanwar einfügen, das ist ja das Problem.
    Darum möchte ich es über einen BBCode machen. (was u.a. damit zusammen hängt das die Leute die News schreiben können keine oder fast keine html/php/whatever kentnisse haben)

  • Benutze z.B. den FCK-Editor und baue noch eine Auswahlliste ein, zu welchem Clan der Eintrag gehört. Damit kann dann selbst der dümmste User News schreiben.

  • sowas ähnliches habe ich mir bereits selber geschrieben (nich ganz so umfangreich)

    ich versuchs mal anders zu erklären.
    es gibt 2 unterschiedliche "News"
    in der ersten steht alles drum und dran und in der zweiten genaue einzelheiten. diese zweite gibt es aber nicht immer.
    nun möchte ich, am besten über bbcode, das man die zweite news in die erste einfügen KANN, aber nicht muss.
    möchte die beiden Sachen miteinander verknüpfen.

    oder anders:
    *quältext ausdenk*

    Code
    wenn [cw]12[/cw] in "nachricht" (also die news) dann -> mysql verbinden
    lese aus tabelle XYZ wo "ID" = 12 (also was zwischen [cw] [/cw] steht)
    Dann tabelle wo alle ausgelesen daten aus der reihe mit der ID "12" vorkommen

    kannst ja mal auf der Homepage kurz vorbeischauen. gleich in der ersten News ist z.b. sowas drin (Jirimoarichi [Blockierte Grafik: http://telmata.te.funpic.de/AoP-HP/webpix/icon/p.gif] 2-0 [Blockierte Grafik: http://telmata.te.funpic.de/AoP-HP/webpix/icon/t.gif] [HR]Akuma etc.

    anonsten: nichts machen)

    Dazu gibt es später umfangreiche statisken (in der DB gespeichert). und die sollen aber nur angezeigt werden wenn man es auch will und nicht immer.


    ich hoffe man versteht was ich meine^^

    *edit*
    mir kam gerade eine idee... das ganze über php include lösen (in der includierten datei steht dann der ganze mysql kram, etc.)
    teste ich gleich mal :D

  • du hast einen String (die eingebene news).
    Beim Verarbeiten jagst du den ganze String durch eine Funktion, diese gibt die id oder false zurück, wenn kein BB vorkommt. Das kannst du wunderbar mit !== FALSE in einer if-bedingung testen.
    Nun hast du die id (oder auch nicht) und schwupps, kannst du die Daten aus der DB holen.

    Gruß,
    Jojo


  • könntest du mir eine beispiel funktion schreiben?
    komm da grad nich ganz mit...

    und wie krieg ich dann die zahl zwischen den BBCode Tags? (es gibt ja verschiedene BBCodes)

    *edit*
    google hat mich auf strpos gebracht, aber damit kann ich schlecht herausfinden was zwischen [bbcode] und [/bbcode] steht

    *nochmal edit*
    habs jetz erstmal so gelöst:

    Code
    $beschopen[$zahl] = preg_replace('#\[test\](.*)\[/test\]#isUe', "include('test.php?ID=$1')", $beschopen[$zahl]);

    so funktioniert das auch halbwegs.
    zumindest wenn ich ?ID=$1 weglasse.... :(
    wenn ich das drin habe bekomme ich:

    Code
    [B]Warning[/B]:  include(test.php?ID=1) [function.include]: failed to open stream: No such file or directory in [B]****.php : regexp code[/B] on line [B]1[/B]
    
    
    [B]Warning[/B]:  include() [function.include]: Failed opening 'test.php?ID=1' for inclusion (include_path='.:') in [B]****.php[/B][B] : regexp code[/B] on line [B]1[/B]

    könnte es daran liegen das die Datei von der aus includiert wird, selber includiert ist?
    die test.php:

    PHP
    <?php
    $ID = $_GET['ID'];
    echo $ID;
    ?>

    auch schon so probiert:

    Code
    $ID = $_GET['ID'];
    echo $ID;

    (seite 1 includiert seite 2, seite 2 includiert seite 3)
    mfg

  • An deiner stelle würd ich ja einfach ein Textfeld drunter machen in dem man die War ID eintragen kann^^ Ich hab dir mal was gebastelt, da ich mich derzeit ein wenig mit regulären Ausdrücken beschäftigen möcht. Was du vorhast ist trotzdem Blödsinn wie Bandit schon sagte...

    Vielleicht bringt dich das weiter ;)

    Der frühe Vogel fängt den Wurm,
    aber die zweite Maus bekommt den Käse.

    Einmal editiert, zuletzt von pApAnoAh (20. Januar 2009 um 13:02)

  • Zitat von Telmata


    und wieso geht es über indlude nicht?

    Weil man bei einem include keine Parameter übergeben kann.
    Hier ein Beispiel, wie ich das in etwa meinte:

    Ungetestet!!

    Sauber is das alles nich, aber sollte gehen.

    Gruß,
    Jojo


  • danke schonmal, bei deiner funktion ist mir allerdings ein problem gekommen^^
    und zwar der teil mit function getWarID

    ich krieg nämlich folgende Meldung:

    Code
    [B]Parse error[/B]:  syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in [B]****.php[/B] on line [B]15[/B]

    ähm... wie krieg ich die ID in die warID rein?

    ich weis es sind dumme fragen, aber meine php kentnisse sind nich optimal für mein vorhaben^^

    *edit*
    es kann doch eigentlich nicht so verdammt schwierig sein einen wert zwischen zwei festen zeichenketten zu bekommen und in einer variable zu speichern...

  • um welche Zeile gehts?
    Gut wärs, wenn du auch deinen Code zeigst.
    Oder hast du meinem so übernommen?
    Dann musst du aber auch bei meinen Bezeichnungen bleiben ;)
    Sonst kann keiner wissen, worums genau geht.

    Gruß,
    Jojo


  • schon klar, hab deine variablen umbenannt.
    ich werd heut abend mal den entsprechenden code zeigen^^

    (quelltext, dann fehler)

    Code
    [B]Fatal error[/B]: Cannot redeclare parsebb() (previously declared in /***/template.inc.php:12) in /[B]***template.inc.php[/B] on line [B]19[/B]
    Code
    require("passwort/config.inc.php");// hier ist das Design für die Einträge  # Formatierungen  //News-String aus einem Forumlar$string = $beschopen[$zahl];//Funktion zum parsen des bb-codesfunction parseBB($string) {  $returnString = $string;  $pattern = "/\[cw\]([0-9]{0,10})\[\/cw\]/";  $replace = getWarData($1);  $returnString = preg_replace($pattern, $replace, $returnString);  //jetzt kommen deine ganzen anderen bb_codes  return $returnString;}//Funktion, um war-Daten zu holen und auszugebenfunction getWarData($id) {  $warID = (int) $id;  //jetzt einfach die Daten aus der Tabelle holen und als return einen wie gewünscht formatierten String zurückgeben $returnString = '<span>Arschkrampen vs. Nüschtkönner: 2:1</span>'; return $returnString;}//Dann einfach den String parsen lassen und fertigecho parseBB($string);
    Code
    [B]Parse error[/B]:  syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in [B]****/template.inc.php[/B] on line [B]15[/B]