Daten aus Mysql in Formular auslesen
sergeGaston
- php
Liebe Leute des Forums,
da ich nicht mehr weiter weiß, bitte ich Euch um Rat:
Ich habe ein html-Formular geschrieben, das mit css formatiert ist. Es gibt mehrere div-Bereiche, in denen sich Tabellen befinden. Darin sind dann die Formularfelder mittels <input ... /> definiert.
Was bisher geht:
1.Ich kann mittels eines php-Skript die eingegebenen (text-Felder) oder ausgewählten (radio und checkboxen) Werte in eine mysql-Datenbank hineinschreiben.
2. Ich kann einen Datensatz, der sich im Formular befindet mittels eines update-Befehls verändern.
Was nicht geht:
Ich möchte aus der mysql-Datenbank die Felder eines bestimmten Datensatzes auslesen (z.B. den mit der kleinsten laufenden Nummer), und zwar so, daß die Werte in meinem css formatierten Formular angezeigt werden. Dann soll innerhalb des Formulars geblättert werden können und der erste und letzte Datensatz angesprungen werden können.
Weiß jemand, wie ich das machen kann? Ich habe jetzt so viele Handbücher und auch Foren durchstöbert und keine Lösung gefunden.
Ich weiß natürlich, daß man mittels des php-Befehls "echo" sich die Daten in eine html-Tabelle einlesen kann. Aber dann ist mein mit css so schön designtes und optisch ansprechendes Formular nicht mehr zu gebrauchen. Ich kann nicht glauben, daß man
Ich bin über jeden Hinweis äußerst dankbar
Gruß Serge
Nabend,
also input-Tags kannst du ja auch Inhalt verpassen mit dem Attribut value. Du packst im value-Attribut einfach einen Wert rein, beispielsweise %meinWert% den du dann mittels PHP ersetzt.
* Wird ein Datensatz ausgelesen, so wird es mit dem Wert des Datensatzes ersetzt
* Wird kein Datensatz ausgelesen, so lässt du diesen Wert einfach mit "nichts" ersetzten.
Eventuell verdeutlicht dieses kleine Beispiel was ich meine:
~~~php
<?php
/*
* In der Variable $template befindet sich die Template-
* Datei, sprich: Deine HTML Datei / Formular.
*
* In meinem Beispiel ist der Inhalt:
* <input type="text" value="%meinWert%">
*/
$template = file_get_contents("meinFormular.html");
if(suche)
{
$template = str_replace("%meinWert%", $datensatz, $template); //Die Variable $datensatz enthält den Inhalt des gesuchten Datensatzes.
}
else
{
$template = str_replace("%meinWert%", "", $template);
}
?>
Gruß
Christian Wansart
Hallo Christian,
Dein Ansatz sieht ganz vielversprechend aus. Zwei Dinge sind mir noch unklar:
Gruß und schon mal vielen Dank für die Antwort
Serge
Hallo Christian,
Moin
- müssen dann alle value-Felder einen default-Wert haben, damit sie ersetzt werden können? Das wäre schlecht, weil manche Felder frei gelassen werden können, und andere Felder den gleichen Wert haben könnten (z.B. eine Zahl). Dann sind sie aber über den value-Wert auch nicht mehr identifizierbar
Nun ja, wenn man mein Beispiel so übernimmt für viele Werte, so kann es sein, dass die Felder nicht ersetzt werden. Wenn man nun mein Beispiel übernimmt und die If-Kontrollstruktur für jedes Feld kopiert, so ist sichergestellt, dass alle Werte die von dir angegeben wurden ersetzt werden.
- Oder muß die Identifikation des value-Feldes, das ersetzt werden soll, über das name Attribut im input-tag geschehen. Wie würde man so etwas machen?
Du meinst also, dass das Script die Felder mithilfe vom name-Attribut erkennt? Hmm... Interessant Sache, aber ich denke unnötige Arbeit, da mein Code es für gewöhnlich abdeckt ->
~~~php
<?php
/*
* Diesmal ist der Inhalt des Templates:
* <input type="text" value="%meinWert1%" name="Form1"><br>
* <input type="text" value="%meinWert2%" name="Form2"><br>
* <input type="text" value="%meinWert3%" name="Form3">
*/
$template = file_get_contents("meinFormular.html");
//Wenn für das erste Feld ein Treffer ist:
if(suche) $template = str_replace("%meinWert1%", $wert1, $template);
else $template = str_replace("%meinWert1%", "", $template);
//Wenn für das zweite Feld ein Treffer ist:
if(suche) $template = str_replace("%meinWert2%", $wert2, $template);
else $template = str_replace("%meinWert2%", "", $template);
//Wenn für das dritte Feld ein Treffer ist:
if(suche) $template = str_replace("%meinWert3%", $wert3, $template);
else $template = str_replace("%meinWert3%", "", $template);
?>
Aber mal angenommen, MySQL liefert keine Ergebnisse mehr zurück, was ist dann der Rückgabewert? Nichts! D.h. wir ersetzen einfach stupide alle Felder mit "nichts":
~~~php
<?php
/*
* Diesmal ist der Inhalt des Templates:
* <input type="text" value="%meinWert1%" name="Form1"><br>
* <input type="text" value="%meinWert2%" name="Form2"><br>
* <input type="text" value="%meinWert3%" name="Form3">
*/
$template = file_get_contents("meinFormular.html");
$template = str_replace("%meinWert1%", $wert1, $template);
$template = str_replace("%meinWert2%", $wert2, $template);
$template = str_replace("%meinWert3%", $wert3, $template);
?>
Sollte MySQL also nicht irgendwelche kuriosen Rückgabewerte zurückliefern, ist das alles kein Problem. :-)
Ich stelle mir dieses Verfahren bei großen Datenmengen aber etwas problematisch vor, daher würde ich empfehlen einen Algorithmus zu schreiben. Nützlich dabei wäre wahrscheinlich die Funktion eval() http://php.net/eval.
Ich hoffe, ich konnte alles soweit erklären.
Gruß
Christian Wansart
echo $begrüßung;
* <input type="text" value="%meinWert1%" name="Form1"><br>
$template = file_get_contents("meinFormular.html");
$template = str_replace("%meinWert1%", $wert1, $template);
Ich hoffe, ich konnte alles soweit erklären.
Du hast den Kontextwechsel übersehen. Wert, die in einen bestimmten Kontext eingefügt werden, müssen gemäß den Regeln des jeweiligen Kontextes behandelt werden. Für HTML sind das beispielsweise die Zeichen <, > und &, sowie mindestens in Attributwerten " und das ', falls es als Attributbegrenzer verwendet wurde.
echo "$verabschiedung $name";