Ankündigung

Einklappen
Keine Ankündigung bisher.

variablenübergabe für funktion fehlerhaft

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • variablenübergabe für funktion fehlerhaft

    Hallo,
    Ich habe in einer mysql Tabelle den Namen von Bilddateien gespeichert.
    In einem Authorensystem kann man nun mit folgender Eingabe ein Bild in eineme Artikel erstellen lassen:

    [image left]dateiname.jpg[/image]

    Die passenden Bilder werden über ein anderes Formularfeld (+ Textfeld für die Bildunterschrift) auf den Server hochgeladen und entsprechende Informationen in der DB gespeichert.

    Die Formatierung des Textes für die spätere Ansicht auf der Webseite sieht folgendermasen aus:
    $text = eregi_replace("\[image left]([-_+./äöüÄÖÜa-zA-Z0-9!&%#?,'=:~]+)\[\/image]",bildunterschrift("\\1"),$text);
    Die Funktion bildunterschrift:

    PHP-Code:
    function bildunterschrift($dateiname) {
        
    $query_bu "SELECT Bildunterschrift FROM artikelbilder WHERE Bildurl = '".$dateiname."'";
        
    $result_bu mysql_query($query_bu)or die(mysql_error());
        
    $bildunterschrift mysql_fetch_array($result_bu);
        
    $bildunterschrift $bildunterschrift["Bildunterschrift"];
        
        
    $bildanzeige "<div style=\"float:left;margin-right:5px;background-color:#f2f2f2;border:1px solid #000\"><img src=\"http://www.cheat-lexikon.de/artikelbilder/".$dateiname."\" />
    <em style=\"padding:2px\">"
    .$bildunterschrift."[/i]</div>";
        
        return 
    $bildanzeige;


    Das Resultat ist, dass das Bild angezeigt wird, die SQL Anfrage aber kein passendes Ergebnis liefert?!
    Warum aber nur, denn der Eintrag in der DB ist genau gleich wie der Dateiname auf dem Server.
    Wenn ich z.B. $dateiname im Querystring durch einen konkreten dateiname austausche (z.B. der Dateiname des Bildes das auch angezeigt wird) dann wird eine Bildunterschrift angezeigt.

    Ich bin ratlos.

  • #2
    Lass dir doch mal die evaluierte Abfrage ausgeben.
    Und so nebenbei: deine Formatierung hat Fehler, aber das ist hier ja nicht das Thema und die ereg-Funktionen verschwinden ja in nächster Zeit.

    Kommentar


    • #3
      Hi,

      hast du auch case-sensitiv beachtet? Ansonsten sehe ich vom Quelltext her kein Problem und es kann ja eigentlich auch nur bei der Variablenübergabe scheitern wenn es mit einem festen Dateinamen im SQL-String funktioniert.

      Greetz
      Cy

      Kommentar


      • #4
        hi,
        Wenn ich mir den Querysting ausgeben lasse und 1:1 wieder reinkopiere geht's, aber mit der Variable wird immer noch kein Ergebnis angezeigt.

        Wenn ich

        text = eregi_replace("\[image left]([-_+./äöüÄÖÜa-zA-Z0-9!&%#?,'=:~]+)\[\/image]",bildunterschrift("\\1"),$text);
        durch

        text = eregi_replace("\[image left]([-_+./äöüÄÖÜa-zA-Z0-9!&%#?,'=:~]+)\[\/image]",bildunterschrift("konkreteangabe.jpg"),$text );
        austausche geht es ebenfalls, ist es möglich, dass ich generell die Sachen zwischen [image] und [/image] so nicht in einer Funktion übergeben kann?

        Kommentar


        • #5
          K.A. ob das Teil des Problems ist, aber Deinem regulären Ausdruck fehlen die Begrenzer. So werden [ und ] als diese interpretiert.

          Kommentar


          • #6
            ich hab inzwischen
            $text = preg_replace("~\[image left\](.*?)\[\/image\]~",bildunterschrift("\\1"),$text);
            aber daran liegt es anscheinend nicht.

            Zum Spaß hab ich mal aus der SELECT Query eine INSERT-Query gemacht, eigenartigerweise trägt er mir in ein Tabellenfeld ein 1 ein.
            Kommt das vll. von der an die Funktion übergebene "\\1"

            Wenn ich nur die Variable über die Funktion zurückgeben lasse wird diese vollkommen korrekt ausgegebn, das Bild wird ja auch angezeigt.
            Nur die SQL-Sache will nicht.

            Kommentar


            • #7
              Das funktioniert so auch nicht:
              PHP-Code:
              <?
              $text = preg_replace("~\[image left\](.*?)\[\/image\]~",bildunterschrift("\\1"),$text);
              bildunterschrift () wird hier zuerst ausgeführt und zwar über den String '\1'.
              Du mußt einen regulären Audruck mit PREG_REPLACE_EVAL (e modifier) verwenden. Dabei wird der Funktionsaufruf Teil des Ersetzungsstrings und das ganze Ergebnis anschließend wie ein eval Aufruf ausgeführt.

              Vgl. das entspr. Bsp. im Manual unter preg_replace ().

              Kommentar


              • #8
                Danke nikosch77 und die anderen, das war wonach ich gesucht habe:

                $text = preg_replace("~\[image left\](.*?)\[\/image\]~e","bildunterschrift('\\1')",$text);

                Kommentar

                Lädt...
                X