PHP HTML Formular mit PHP befüllen

Django6

Cadet 4th Year
Registriert
Nov. 2011
Beiträge
67
Hallo!

Ich arbeite gerade an einem kleinen Ticketsystem. Die Parameter des Tickets werden per Formular eingegeben und dann in einer Datenbank gespeichert.
Um sich das Ticket anzusehen werden die Values der Input & Textfelder aus einer Datenbank eingelesen.

sprich:
HTML:
<input type="text" name="name"  value="<? echo $row['Name']?>">

Nun möchte ich diese vorgegebenen Values ändern und per submit in die Datenbank schreiben

HTML:
<input type="submit" name="edit" value="edit">

soweit so gut. Funktioniert auch alles. Das einzige was doof ist und ich nicht haben möchte ist, dass danach wieder ein leeres Formular angezeigt wird.

Eigentlich sollen aber dann einfach nur die geänderten Werte angezeigt werden.
Wie kann ich das am sinnvollsten umsetzen?

Liebe Grüße
 
Speicher den Inhalt der Felder in eine Variable. Zum Beispiel:

PHP:
$name = isset($_POST["name"]) ? strip_tags(trim($_POST["name"])) : ""; // Name

Anschließend dann wie folgt nutzen:

PHP:
<input type='text' name='name' value='" . $name . "' size='35'>
 
Zuletzt bearbeitet: (Verschrieben)
liest di werte wieder aus und zweigst die an.. wo sit das problem?
 
Ok, habe gerade mal ein bisschen rumprobiert, in gewissen Zügen hat das auch geklappt.

Ich glaube das Hauptproblem ist, dass ich mit einer get action das ticket "aufrufe" und der submit bringt mich wieder zurück vor das get. Also zur Haupteingabe. Glaube da sind eher noch einige strukturelle Fehler drin.
Da muss ich dann nochmal ein bisschen mit Post rumfriemeln, dann sollte das auch funktionieren.

Vielen Dank erstmal :)
 
Villt bringt dich das Stichwort "Ajax" ja weiter, falls ich dein Problem richtig verstanden habe.
 
Django6 schrieb:
Ok, habe gerade mal ein bisschen rumprobiert, in gewissen Zügen hat das auch geklappt.

Ich glaube das Hauptproblem ist, dass ich mit einer get action das ticket "aufrufe" und der submit bringt mich wieder zurück vor das get. Also zur Haupteingabe. Glaube da sind eher noch einige strukturelle Fehler drin.
Da muss ich dann nochmal ein bisschen mit Post rumfriemeln, dann sollte das auch funktionieren.

Vielen Dank erstmal :)

kannst statt $_POST oder $_GET auch einfach $_REQUEST nutzen
 
Nein, Tickets (und ähnliches) sollte man NICHT per GET-Request erledigen, sondern AUSDRÜCKLICH per POST.

GET -> Daten, die man a) gern in seiner URL sehen würde und b) Daten, deren Übermittlung keine direkte Auswirkung haben... z.B. Suchformulare. 10 Leute suchen, alle sehen (mehr oder weniger) dasselbe
POST -> Daten, die man NUR EIN MAL versenden will... z.B. eben Formulare, die etwas an der Datenbank ändern
 
Daaron schrieb:
Nein, Tickets (und ähnliches) sollte man NICHT per GET-Request erledigen, sondern AUSDRÜCKLICH per POST.
Da hast du natürlich Recht. Denkfehler meinerseits. Das war für mich erstmal die einfachste Variante auf die einzelnen Tickets nach dem Absenden wieder zugreifen zu können.
Also nun werden die Daten per Post übergeben und auch in die Datenbank geschrieben.

Jetzt lasse ich mir mit einer Schleife alle Tickets anzeigen. Bzw. deren Betreff und Autor.
Das soll dann als Link geschehen, damit man sich die restlichen Ticketdaten angucken kann.
Mit der GET Mehtode habe ich einfach die URL des Tickets (mit der Abfrage der ID) in das <a> Tag geschrieben. Wie krieg ich das denn mit POST bewerkstelligt?

DJ_We$t schrieb:
Villt bringt dich das Stichwort "Ajax" ja weiter, falls ich dein Problem richtig verstanden habe.
Habe schon einiges im Netz gelesen darüber aber noch nie damit gearbeitet. Ist das die ...einzige Möglichkeit ein Formular auszufüllen sodass die Daten nicht gleich wieder "verschwinden" sondern die Daten stehenbleiben?
 
Zuletzt bearbeitet:
Django6 schrieb:
Da hast du natürlich Recht. Denkfehler meinerseits. Das war für mich erstmal die einfachste Variante auf die einzelnen Tickets nach dem Absenden wieder zugreifen zu können.
Also nun werden die Daten per Post übergeben und auch in die Datenbank geschrieben.

Jetzt lasse ich mir mit einer Schleife alle Tickets anzeigen. Bzw. deren Betreff und Autor.
Das soll dann als Link geschehen, damit man sich die restlichen Ticketdaten angucken kann.
Mit der GET Mehtode habe ich einfach die URL des Tickets (mit der Abfrage der ID) in das <a> Tag geschrieben. Wie krieg ich das denn mit POST bewerkstelligt?


Habe schon einiges im Netz gelesen darüber aber noch nie damit gearbeitet. Ist das die ...einzige Möglichkeit ein Formular auszufüllen sodass die Daten nicht gleich wieder "verschwinden" sondern die Daten stehenbleiben?

ajax wäre hier unnötig.. einfach die id des eintrags als get parameter übergeben und anhand der id die daten aus der datenbank laden und die felder befüllen
 
kling1 schrieb:
ajax wäre hier unnötig.. einfach die id des eintrags als get parameter übergeben und anhand der id die daten aus der datenbank laden und die felder befüllen

so habe ichs bisher gemacht. würde das auch ungern auf POST umstellen, weil die Linkerstellung damit anscheinend sehr kompliziert wird. Der abruf über GET mag zwar unsicherer sein aber in das ganze System kommt man sowieso nur per Login, von daher...

Ok, kling1 dann kommen wir wieder zum Ursprungsproblem zurück. Ich liste meine Tickets, klicke eins an, die Maske öffnet sich. Anhand der ID sind alle felder per GET gefüllt worden. Wenn ich nun aber was ändere, ist zwar der Datensatz gespeichert, die Felder aber leer. Man muss das Ticket erst wieder neu auswählen um die Änderungen auch zu sehen
 
Du hast mich auch schlichtweg falsch verstanden.
- Ein bestehendes Ticket öffnen? GET ist in Ordnung, denn dieselbe URL soll ja immer und immer wieder dasselbe Ticket anzeigen.
- Ein Ticket absenden/ändern? Hier muss POST verwendet werden. Du willst ja dieselbe Änderung nicht noch einmal durchführen, vor allem nicht versehentlich, indem du dich im Browser beim Autocomplete verklickst.

Außerdem: Auf jeden POST sollte ein 303-Redirect folgen, um bestehende Browserdaten ordnungsgemäß zu säubern.
 
Zumindest ist es mit Ajax möglich, das nur ein Teil der Seite neu geladen wird und nicht die komplette Seite neu geladen werden muss.
Wie das ohne Ajax gehen soll, wüsste ich nicht aber wenn kling1 das sagt wird er wohl mehr wissen als ich.
 
Nein, ohne AJAX kannst du keine Seitenteile neu laden, sondern nur komplett die Seite wechseln.
 
Habs jetzt so hinbekommen wie kling1 meinte.
Hatte einfach n Fehler in meiner GET Methode.

Neue Frage:

Das Ticketformular soll natürlich auch ein Statusfeld bekommen, das über ein Dropdown gelöst werden soll.
Habe jetzt schon ein bisschen darüber gelesen wie man Daten aus einem Dropdown in eine Datenbank kriegt und zurück...
Jetzt nur ne kurze Verständnisfrage:

Macht es Sinn für den Zustand der Stati eine Tabelle status anzulegen mit den Feldern statusid und description zB. wo dann
1|Offen
2|In Bearbeitung
3|Geschlossen
drin steht und das dann irgendwie mit der Tickettabelle zu joinen?
oder kann ich den status direkt mit in die tickettabelle schreiben? normalisiert wäre das dann nicht einwandfrei oder?
 
Einen echten Unterschied macht es nur, wenn du mit Mehrsprachigkeit arbeiten willst... und selbst dann gibts bessere Ansätze, als hier noch mit zusätzlichen Foreign Keys zu arbeiten.
 
würde sinn ergeben wenn du die status um vll einen weiteren status in einer anderen maske erweitern möchtest zum beispiel.. für einefache sachen würde ich es aber lassen..
wenn die anwendung über zwei scripte hinausgeht.. würde ich nicht unbedingt auf plain php setzen.. vll ein simples framework was einem viel arbeit abnimmt.. sowas vll.. sieht aufjedenfall simpel aus http://fatfreeframework.com/home
 
kling1 schrieb:
wenn die anwendung über zwei scripte hinausgeht.. würde ich nicht unbedingt auf plain php setzen.. vll ein simples framework was einem viel arbeit abnimmt.. sowas vll.. sieht aufjedenfall simpel aus http://fatfreeframework.com/home

wurde hier auch ausführlich diskutiert aber das system wird in eine umgebung ohne framework implementiert und von daher soll hier auch keins angewendet werden.

eine weitere Frage:
Habe das System jetzt mit einem PHP basierten Login System "verschlossen"

customer
ID|Name|Ansprechpartner|Straße|Plz|Ort|Tel|Fax|Mail|Login|Passwort

kann die Kundentabelle so aufgebau werden? ist ja "nur" ein recht simples ticketsystem von daher muss ich zB Ort und PLZ nicht in eigenen Tabellen packen oder? Aber wie ist das mit den Zugangsdaten, kann man die einfach so mit reinschreiben? In Hinblick auf Sicherheit usw.
 
Django6 schrieb:
wurde hier auch ausführlich diskutiert aber das system wird in eine umgebung ohne framework implementiert und von daher soll hier auch keins angewendet werden.
Für Microframeworks ist IMMER Platz. Schreibst du etwa jeden Datenbank-Mist selbst? Lass mich raten: Du verwendest die Syntax á la "mysql_connect", hm?
Sieh zu, dass du wenigstens eine Datenbank-Abstraktion verwendest, z.B. Doctrine DBAL (oder gleich Doctrine ORM).

Habe das System jetzt mit einem PHP basierten Login System "verschlossen"
Ohne den Code gesehen zu haben kann ich dir jetzt schon prophezeien: an Sicherheitslücken herrscht da kein Mangel.

Aber wie ist das mit den Zugangsdaten, kann man die einfach so mit reinschreiben? In Hinblick auf Sicherheit usw.
Solange du weder Klartext-Passwörter noch so trivial-lächerliche Hashing-Algorithmen wie md5 oder sha1 verwendest...
 
Zurück
Oben