Text & Variable aus Datenbank auslesen und ausgeben

Don Stefano

Erfahrenes Mitglied
Hallo zusammen,

ich habe ein Problem, von dem ich nicht mal weiß, ob es zu lösen ist:

Ich habe in einer MySQL Datenbank eine Tabelle mit verschiedenen Texten, die unter bestimmten Bedingungen ausgelesen und am Bildschirm angezeigt werden.

Nun soll dieser Text mittendrin auch den Wert einer Variable ausgeben:

Bsp: Der Text könnte lauten:

"Herzlichen Glückwunsch. Sie haben 8 Aufgaben richtig gelöst."

Nur kennt der Datenbanktext den Wert "8" nicht, da dieser erst in einem Skript berechnet wird. Mal angenommen die Variable, die diesen Wert enthält lautet $wert.

Nun hätte ich gerne den Text in der Datenbank etwa wie folgt:

""Herzlichen Glückwunsch. Sie haben $wert Aufgaben richtig gelöst."

so dass dann beim auslesen und anzeigen auf dem Bildschirm

"Herzlichen Glückwunsch. Sie haben 8 Aufgaben richtig gelöst."

erscheint.

Das Feld in der Datenbank ist als "text" definiert. Ausgelesen und ausgegeben wird der Text mit :

PHP:
...
    $row = mysql_fetch_object($result);
        $text = $row->$text;
     
      echo '
       <div class="box3"> //CSS
       <p>'.$text.'</p>  
       </div>';

Alle erdenklichen Arten die Variable $wert dabei zu berücksichtigen scheitern leider. Egal ob ich "Sie haben $wert Aufgaben", "Sie haben .$wert. Aufgaben" oder "Sie haben ':$wert.' Aufgaben" in die Tabelle schreibe, die Ausgabe lautet dann entsprechend:

"Herzlichen Glückwunsch. Sie haben .$wert. Aufgaben richtig gelöst."

Was mache ich falsch? Wie muss die Variable in der Datenbank stehen? Oder ist das Ganze etwa gar nicht möglich?

Vielen Dank für jede Hilfe
 
Hi,

Mhh, soweit Ich weiß geht das auch nicht.
Aber du könntest z.b. bei der ausgabe mit str_replace() nach $wert im Text suchen, und den dann austauschen lassen.

PHP:
...
    $row = mysql_fetch_object($result);
        $text = $row->$text;
     
$text = str_replace("\$wert", $wert, $text);

      echo '
       <div class="box3"> //CSS
       <p>'.$text.'</p>  
       </div>';

Natürlich könntest du auch den auszutauschenden Teil z.b. "{Wert}" nennen, und den dann eben austauschen.

Sonst fällt mir dazu leider nix mehr ein :(!

gruß kevin
 
Hey!

Dein Problem ist, das du falsch denkst. Du liest aus der Datenbank einen String (Datentyp) aus. Diesem kannst du nicht ohne weiteres sagen, das da noch ne Variable steht, die geändert werden soll.

Deine Lösung ist ein Platzhalter und die Funktion str_replace() (-> siehe PHP Manual). Auch kannst du das Problem mit regulären ausdrücklen lösen!
Hier ein Beispiel zur Erläuterung:

PHP:
  $deineVariable = 8; // Anzahl der richten Antworten (kann errechnet oder sonst was werden)
  $loesung = "Sie haben %Platzhalter% Aufgaben richtig gelöst";
  $loesung = str_replace("%Platzhalter%", $deineVariable, $loesung); 
  echo $loesung;
  // gibt "Sie haben 8 Aufgaben richtig gelöst" aus

So, bei Fragen, einfach posten, aber ich denke es sind keine mehr offen!
Falls doch, werden dir hier sicherlich noch mehr Leute helfen können :D


Gruß!

// Edit: Huch, da war ich wohl zu langsam *g*
 
Super!

Vielen dank ihr beiden!

Damit werde ich es nachher einmal ausprobieren. Sollte ich es nicht hinbekommen (wovon ich einmal nicht ausgehe) melde ich mich noch einmal zu Wort. Ansonsten markiere ich den Thread später als "beantwortet".

Deine Lösung ist ein Platzhalter und die Funktion str_replace() (-> siehe PHP Manual). Auch kannst du das Problem mit regulären ausdrücklen lösen!

Was genau da nun der Unterschied ist (Platzhalter vs. regulärer Ausdruck) habe ich allerdings noch nicht verstanden. Bzw. was genau ein regulärer Ausdruck ist.
 
Nochmals vielen Dank für die einfache Erklärung. Es hat genauso

$deineVariable = 8; // Anzahl der richten Antworten (kann errechnet oder sonst was werden)
$loesung = "Sie haben %Platzhalter% Aufgaben richtig gelöst";
$loesung = str_replace("%Platzhalter%", $deineVariable, $loesung);
echo
$loesung;
// gibt "Sie haben 8 Aufgaben richtig gelöst" aus
auf Anhieb funktioniert.

Ich hatte zwar schon mal von str_replace gehört und es vielleicht in anderem Kontext schon verwendet, aber in diesem Zusammenhang wäre ich nicht so schnell darauf gekommen.
 
Funktionieren würde das ganze auch gut mit der sprintf-Funktion...

Das wäre dann in diesem Fall wie folgt:

PHP:
$richtig = 8; // Anzahl der richten Antworten (kann errechnet oder sonst was werden)
$gesamt = 10; // Anzahl der gesamt möglichen Antworten
$loesung = "Sie haben %d von %d Aufgaben richtig gelöst"

echo sprintf($loesung, $richtig, $gesamt);

Sowas ist z.B. praktisch, wenn man mit definierten Strings arbeitet. Auf jeden Fall mal ein Augenwurf wert, für ähnliche Vorhaben!
 
Zurück