[PHP & MySQL] preg_replace_callback() klappt irgendwie nit =/

Black Katrin
Hallo zusammen,

Ich würde folgendes gerne machen: in einem Text möchte ich nicht den vollständigen HTML Code schreiben um bilder einzufügen, sondern mit preg_replace das problem lösen im sinne von

{bild}bild_id,align,grosse{/bild}

nun ist folgendes, mit der bild_id kann ich das bild aus der datenbank abfragen, aber dafür müsste ich ja dazwischen eine datenbank abfrage schalten können... ist das in irgendeinerweise möglich? leider bin ich mit preg_replace noch nicht solange am basteln und üben und daher wenig erfahrung... und die seiten die hilfe geben sollen, haben das einfache deutsch leider nicht erfunden =/ daher hoffe ich das es mir hier jemand vielleicht einfach erklären könnte...

Schonmal Danke im Vorraus!

siehe unten
Oli
Hi,

schau dir mal preg_match() und preg_match_all() an. Damit kann man Inhalte "rausfischen" und sie weiterverwerten.

LG,
Oli
Black Katrin
uh dank deinen hinweisen hab ich noch was anderes gefunden smile mit preg_replace_callback() dürfte es auch funktionieren, da mach ich ja ne eigene funktion dafür... bist nen schatz, danke
Oli
Stimmt, das gibts auch noch, ist mir gar nicht eingefallen Augenzwinkern .
Gern geschehen Augenzwinkern .
Black Katrin
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
<?php

  function FunktionBild($treffer) {
    $bild_id $treffer[1];
    $align $treffer[2];
    
      $bilder_abfrage "SELECT * FROM galerie_bilder WHERE id='$bild_id'";
        $bilder_ergebnis=mysql_db_query($db,$bilder_abfrage,$verbindung);
       while($row mysql_fetch_object($bilder_ergebnis))
             {$url=$row->url;}

    $link "<a href='index.php?section=bild&bild_id=$bild_id'><img src='bilder_bild.php?pfad=../privi/bilder/$url' class='bilder' alt='Fotografie - &copy; Katrin Affolter' align='$align'></a>";
    return $link;
  }

$blog_id $_GET['blog_id'];


  $blog_abfrage "SELECT * FROM blog WHERE id='$blog_id'";
  $blog_ergebnis=mysql_db_query($db,$blog_abfrage,$verbindung);
  while($row mysql_fetch_object($blog_ergebnis))
  {
   $id $row->id;
   $titel=$row->titel;
   $anlese=$row->anlese;
   
   //{bild}bild_id,align{/bild}
   //{galerie}tag1,tag2,tag3{/gallery}
   $text=$row->text;
   $text preg_replace('#\{bild}(.*),(.*){/bild}#Uis''FunktionBild'$text);

   $daten=explode(".",$row->datum);
   if($daten[1]=="01"){$datum="$daten[0]. Januar $daten[2]";}
   if($daten[1]=="02"){$datum="$daten[0]. Februar $daten[2]";}
   if($daten[1]=="03"){$datum="$daten[0]. März $daten[2]";}
   if($daten[1]=="04"){$datum="$daten[0]. April $daten[2]";}
   if($daten[1]=="05"){$datum="$daten[0]. Mai $daten[2]";}
   if($daten[1]=="06"){$datum="$daten[0]. Juni $daten[2]";}
   if($daten[1]=="07"){$datum="$daten[0]. Juli $daten[2]";}
   if($daten[1]=="08"){$datum="$daten[0]. August $daten[2]";}
   if($daten[1]=="09"){$datum="$daten[0]. September $daten[2]";}
   if($daten[1]=="10"){$datum="$daten[0]. Oktober $daten[2]";}
   if($daten[1]=="11"){$datum="$daten[0]. November $daten[2]";}
   if($daten[1]=="12"){$datum="$daten[0]. Dezember $daten[2]";}
   
   $bild_id=$row->bild_id;
   $bilder_abfrage "SELECT * FROM galerie_bilder WHERE id='$bild_id'";
   $bilder_ergebnis=mysql_db_query($db,$bilder_abfrage,$verbindung);
   while($row mysql_fetch_object($bilder_ergebnis))
   {$url=$row->url;}

   echo"<a href='index.php?section=bild&bild_id=$bild_id'><img src='bilder_bild.php?pfad=../privi/bilder/$url' class='bilder' alt='Fotografie - &copy; Katrin Affolter' align='left'></a>
         <b class='gross'>$titel</b> vom $datum
         <br><b>$anlese</b>
         <br>$text
   ";

   }

echo"<br>";



?>



http://web271.zeta.ibone.ch/test/index.p...log=1&blog_id=1


klappt nicht unglücklich zweite bild erscheint nicht... welches mit der funktion ausgegeben werden müsste... ideen?
Oli
Auf die schnelle ist mir nicht viel aufgefallen.. abeeeeeer.. Wo wir hier von preg_replace_callback gesprochen haben,

php:
1:
$text preg_replace('#\{bild}(.*),(.*){/bild}#Uis''FunktionBild'$text);

sollte das nicht preg_replace_callback heißen?
Black Katrin
xD macht die sache nit besser...

php:
1:
$text preg_replace_callback('#\{bild}(.*),(.*){/bild}#Uis''FunktionBild(\1,\2)'$text);


jegliche art die mir einfällt... es geht nit unglücklich ich bin zu doofe
Oli
Hm. Probiers mal so:
php:
1:
$text preg_replace_callback('#\{bild}(.*),(.*){/bild}#Uis''FunktionBild'$text);


Und die Funktion dazu:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function FunktionBild($treffer) {
    global $db$verbindung//notwendig!
    $bild_id $treffer[1];
    $align $treffer[2];
    
      $bilder_abfrage "SELECT * FROM galerie_bilder WHERE id='$bild_id'";
        $bilder_ergebnis=mysql_db_query($db,$bilder_abfrage,$verbindung);
       while($row mysql_fetch_object($bilder_ergebnis))
             {$url=$row->url;}

    $link "<a href='index.php?section=bild&bild_id=$bild_id'><img src='bilder_bild.php?pfad=../privi/bilder/$url' class='bilder' alt='Fotografie - &copy; Katrin Affolter' align='$align'></a>";
    return $link;
  }

Beachte das global $db, $verbindung, sonst hast du die Variablen nicht innerhalb der Funktion zur Verfügung.

EDIT: Falls auch das nicht geht, poste bitte die Fehlermeldungen, die bei diesem Code entstehen.
Black Katrin
es geht smile keine ahnung wieso aber es klappt smile bist mein held des tages!!!
Oli
Zitat:
Original von Black Katrin
es geht smile keine ahnung wieso aber es klappt smile bist mein held des tages!!!

Wie ich geschrieben hatte. Dein Code war an sich richtig, du hattest nur nicht bedacht (oder vllt auch nicht gewusst), dass Variablen, die außerhalb einer Funktion existieren, nicht automatisch innerhalb einer Funktion vorhanden sind. Um diese Variablen zu erreichen, in deinem Fall $db und $verbindung (beide erforderlich, damit die Abfrage der Datenbank klappt), muss man sie vorher bei der Funktion "anmelden" (sie globalisieren).
Black Katrin
jein... ich sollte es wissen Augenzwinkern aber irgendwie... zuverwirrt aktuell wohl
Oli
Macht nichts, wir haben den Fehler ja schließlich gefunden Augenzwinkern