Manuela: MySQL und preg_replace

Guten Morgen,

ich basteln mir gerade ein simples CMS-Script mit MySQL. bis jetzt sieht es so aus:

<?
//Datenbankverbindung
include "include/db.inc.php";

//Daten holen
$config = mysql_fetch_array (mysql_query("SELECT * from cms_config",$conn));
$src    = mysql_fetch_array (mysql_query("SELECT * from cms_pages WHERE pid ='".$_GET["pid"]."'",$conn));
if(!$src){$src = mysql_fetch_array (mysql_query("SELECT * from cms_pages WHERE pid ='index.php'",$conn));}

//Element ausgeben
function showElement($eid)
{
 global $conn;
 $element = mysql_fetch_array (mysql_query("SELECT * from cms_files WHERE fid = '".$eid."'",$conn));
 return "<img src="".$element["fsrc"]."" border=0 alt="".$eid.""/>";
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title><?echo $config["webname"];?></title>
</head>
<body>
<h3><?echo $src["ptitle"];?></h3>
<p>
<?
$suchmuster = "/[ELEMENT:(.*)]/";
$eresetzung = showElement("\1");
echo preg_replace($suchmuster, $eresetzung, $src["ptext"]);
?>
</p>
</body>
</html>

Es klaptt auch alles prima und genügt meinen Ansprüchen.
Bilder (Elemente) möchte ich über einen "Tag" [ELEMENT:123] im Text einfügen und dann ensprechende durch preg_replace erseten lassen.
Die Ersetzung funktioniert auch, allerdings wird der in der Funktion showElement("\1") übergebene Parameter \1 (ist eine ID eines Bildes in der DB) nicht in der DB gefunden - obwohl er da ist ... wenn ich in der Funktion manuell WHERE fid = '123' eingebe klappt alles prima ???
Hat der Parameter \1 ein falsches Format? Habe mit gettype() herausbekommen, dass es ein string ist und keine Zahl. Eine Umwandlung unter WAMPP (Win2000) mit settype() funktioniert nicht ...

Wer kann mir da helfen?

LG, Manu

  1. hi,

    Die Ersetzung funktioniert auch, allerdings wird der in der Funktion showElement("\1") übergebene Parameter \1 (ist eine ID eines Bildes in der DB) nicht in der DB gefunden - obwohl er da ist ... wenn ich in der Funktion manuell WHERE fid = '123' eingebe klappt alles prima ???

    dann wende bitte mal die in solchen fällen elementarste debugging-maßnahme an:
    lasse dir deinen zusammengesetzten query-string zur kontrolle mit echo ausgeben, und benutze ggf. auch mysql_error().

    Habe mit gettype() herausbekommen, dass es ein string ist und keine Zahl.

    sollte aber, sofern der inhalt als reine zahl interpretierbar ist, an der stelle kein problem machen.

    allerdings solltest du in deiner query auch auf eine zahl abfragen, wenn das datenfeld einen zahlentyp hat:

    $element = mysql_fetch_array (mysql_query("SELECT * from cms_files WHERE fid = '".$eid."'",$conn));

    lass die einfachen hochkommata um den wert von fid weg, zahlenwerte fragt man mit WHERE zahlenfeld = 4711 ab.

    Eine Umwandlung unter WAMPP (Win2000) mit settype() funktioniert nicht ...

    ein einfacher type-cast per
    (int) $zahlstring
    sollte idR. auch ausreichen.

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. Hallo,

      lasse dir deinen zusammengesetzten query-string zur kontrolle mit echo ausgeben, und benutze ggf. auch mysql_error().

      das habe ich schon gemacht - daran liegt es nicht ...
      wenn ich in

      $element = mysql_fetch_array (mysql_query("SELECT * from cms_files WHERE fid = '".$eid."' ",$conn));

      zwischen die Hochkommata 123 schreibe läuft alles!!!

      Wenn ich mir in der Funktion showElement() einfach ein return mit return abs($eid); ausgeben lasse, wird keine Zahl ausgegeben, sondern 0 ... das kann dann doch nur am Format liegen, denn return $eid; liefert 123.

      Was nun?

      LG Manuela

      1. hi,

        Wenn ich mir in der Funktion showElement() einfach ein return mit return abs($eid); ausgeben lasse, wird keine Zahl ausgegeben, sondern 0 ... das kann dann doch nur am Format liegen, denn return $eid; liefert 123.

        hast du schon mal probiert, die ersetzungs-funktion statt mit

        $eresetzung = showElement("\1");

        mit
        $eresetzung = showElement(\1);
        zu definieren? wenn du an der stelle lediglich integers erwartest, sollte ja die übergabe als zahl ausreichen.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. Hallo

          hast du schon mal probiert, die ersetzungs-funktion statt mit

          $eresetzung = showElement("\1");
          mit
          $eresetzung = showElement(\1);
          zu definieren? wenn du an der stelle lediglich integers erwartest, sollte ja die übergabe als zahl ausreichen.

          ja ... leider klappt das auch nicht :-((((
          Manu