Formular mit Radiobuttons , Auswahl Auswerten
Peter
- php
Hallo Leute
bin seit Tagen auf der Suche nach einer Lösung habe schon duzend Sachen ausprobiert und mich komplett duch die Page gearbeitet.
Hier mein Problem:
Ich bastlean einem Benotungssystem
hier ein Teil des Codes:
<form method="GET" action="benotung.php">
<input type="radio" name="note" value="1">1<br>
<input type="radio" name="note" value="2">2<br>
<input type="radio" name="note" value="3">3<br>
<input type="radio" name="note" value="4">4<br>
<input type="radio" name="note" value="5">5<br>
<input type="radio" name="note" value="6">6<br>
<input type="submit" name="benoten" value="benoten">
</form>
Man kann zwischen den Noten 1-6 wählen und dan mit dem Button benoten eine Benotung vornehmen.
Die Probleme:
1.Wenn nur auf den Button geklickt wird ohne eine Note auszuwählen.
Habe um das Abzufangen diese Abfrage eingebaut.
$note = $_GET["note"];
$benoten = $_GET["benoten"];
if(($benoten == "benoten") and (empty($note)))
{
PROBLEM: Wie sage ich das die Seite neugeladen wird.
}
Wie sag ich HTML /PHP das ich die Seite nochmal anzeigen möchte ohne das die Daten ( wurden per SQL beim Dokumentaufruf aus einer DB geladen) verloren gehen.
2.Ich würde mir gerne den Button sparen und mit anklicken der Note den submit ausführen.
Gibt es eine Möglichkeit das action= in <Form> beim submit auch aufzurufen ohne das ich auf Button klicke?
Also irgend wie so:
<input type="radio" name="note" value="1" onclick=" ??? ">1<br>
Aber was muß bei onclick= stehn ? (action=benotung.php,load,reload)
ich finde leider keine Befehlserklärung oder irgend etwas was mir da weiter hilft.
Bin für alle Tips und Ideen , Vorschläge dankbar.
Gruß
Peter
Hello,
Hallo Leute
bin seit Tagen auf der Suche nach einer Lösung habe schon duzend Sachen ausprobiert und mich komplett duch die Page gearbeitet.
Man kann zwischen den Noten 1-6 wählen und dan mit dem Button benoten eine Benotung vornehmen.
<?php ### benotung.php ###
$EVA = 'E'; ## EVA-Merker Nächster Verarbeitungsschritt = "Eingabe erforderlich"
$_errors = array(); ## Fehlermeldungen der Verarbeitung sammeln
if(isset($_POST['benoten']))
{
if (!isset($_POST['note']) or (intval($_POST['note'] < 1) or (intval $_POST['note'] > 6))
{
$_error[] = "Fehler bei der Note. Bitte wählen Sie im bereich zwischen 1 und 6";
}
else
{
$EVA = 'V';
## Verarbeitung durchführen
$note = $_POST["note"];
## und eintragen oder aufaddieren und zählen oder was auch immer
## wenn Verarbeitung geklappt hat
$EVA = 'A';
## sonst $EVA = 'E'; ## weitere eingabe erforderlich
}
}
if (count($_errors) > 0)
{
## ausgabe aller bei der Verarbeitung aufgelaufenen Fehler
}
if ($EVA = 'A') ## Ergebnis des Scriptes ausgeben
{
## Dankeschön
}
else
{
?>
<form method="POST" action="benotung.php">
<input type="radio" name="note" value="1">1<br>
<input type="radio" name="note" value="2">2<br>
<input type="radio" name="note" value="3">3<br>
<input type="radio" name="note" value="4">4<br>
<input type="radio" name="note" value="5">5<br>
<input type="radio" name="note" value="6">6<br>
<input type="submit" name="benoten" value="benoten">
</form>
<?php
}
So könnte es klappen, mal eben schnell hingestrickt.
Aufteilung in die Bereiche
---------------------------
Zu dem anderen Problem
Nimm gleich submit-Buttons. Es können beliebig viele in einem Formular definiert werden.
Glaube niemals Deinen Usern. Die könnten auch 133 als Note übertragen. Wenn Du keinen Range-Check durchführst, kann man Dir alles unterjubeln.
Nimm die Methode GET nur dann, wenn das Script mit diesem Patameter auch als Link oder Bookmark eingetragen werden darf. Wenn Werte zur Verarbeitung erfragt werden, nimm immer POST.
Bau noch eine Formular-ID (Unique-ID) ein, die beim Ausliefern ($EVA= 'E') des Formulars an den Client als Hidden-Feld übertragen wird. Trag diese ID in eine LOG-Datei ein, in der steht, "unbenutzt, ausgeliefert, erledigt". Wenn nun ein POST zur auf das Formular kommt, prüfe, ob diese ID in der Tabelle steht, Wenn ja, prüfe ob sie schon den erledigt-Merker hat, wenn ja setze $_ERRORS[] = "Multipost oder Benutzermanipulation..." $_EVA ist dann 'A'
Alles verstanden?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo
@ Tom
Alles klar habs soweit verstanden.
Das mit EVA-Merker und so kannte ich noch nicht, baer lese mir dazu mal die Referenzen durch.
Ich habe mir die gleichen Gedanken gestern nacht gemacht.
Habe inzwischen einfach 6 submit-Buttons erstellt die alle den gleichen namen tragen nur verschiedene Values haben.
Klappt wunderbar,
ein hiddenfeld und eine überprüfung ob der hidden-wert übertragen wurde, habe ich schon drin gehabt. einfach mit ner if-schleife wert ="xyz"? ja --> weiter machen ; nein --> error ausgeben
GET / POST
Danke für den hinweis, aber ich benutze post immer ist nur zuentwicklungszwecken auf get damit ich die variablen in der adresse sehe.
@ all
Einzig ein problem habe ich jetzt noch.
wenn ich wie oben beschriebn abgesendet habe, gehen mir alle variablen die ich beim load des dokumentes aus einer DB geladen hatte verloren da die ja nicht neu gesendet werden.
ABer diese Datenbrauch ich noch um berechnungen zumachen und die ergebnisse dem entsprechenden Datensatz zuzuordenen und in die DB zuspeichern.
Habe jetzt testweise ein hiddenfeld ins formular eingebaut, in dem ich das Value per echo $var eintrage.
Klappt auch wunderbar.
Jetzt die restliche daten ? also lieber 10x ein Hiddenfeld oder nur 1x in einem Hiddenfeld die ID speichern und dann die restlichen 9 Felderdaten nneu von der DB laden.
WAS ist besser ?
Oder gehts noch einfacher ??
Alle Variablen die ich brauche liegen in einem gemeinsamen Array was durch den DB abruf erzeugt wird.
Kann ich vielleicht auch den kompletten array an das formular neu verschicken ???
Gruß
Peter
Hello,
Hallo Leute
bin seit Tagen auf der Suche nach einer Lösung habe schon duzend Sachen ausprobiert und mich komplett duch die Page gearbeitet.Man kann zwischen den Noten 1-6 wählen und dan mit dem Button benoten eine Benotung vornehmen.
<?php ### benotung.php ###
$EVA = 'E'; ## EVA-Merker Nächster Verarbeitungsschritt = "Eingabe erforderlich"
$_errors = array(); ## Fehlermeldungen der Verarbeitung sammelnif(isset($_POST['benoten']))
{
if (!isset($_POST['note']) or (intval($_POST['note'] < 1) or (intval $_POST['note'] > 6))
{
$_error[] = "Fehler bei der Note. Bitte wählen Sie im bereich zwischen 1 und 6";
}
else
{
$EVA = 'V';
## Verarbeitung durchführen$note = $_POST["note"];
## und eintragen oder aufaddieren und zählen oder was auch immer
## wenn Verarbeitung geklappt hat
$EVA = 'A';## sonst $EVA = 'E'; ## weitere eingabe erforderlich
}
}if (count($_errors) > 0)
{
## ausgabe aller bei der Verarbeitung aufgelaufenen Fehler
}if ($EVA = 'A') ## Ergebnis des Scriptes ausgeben
{
## Dankeschön}
else
{
?>
<form method="POST" action="benotung.php">
<input type="radio" name="note" value="1">1<br>
<input type="radio" name="note" value="2">2<br>
<input type="radio" name="note" value="3">3<br>
<input type="radio" name="note" value="4">4<br>
<input type="radio" name="note" value="5">5<br>
<input type="radio" name="note" value="6">6<br>
<input type="submit" name="benoten" value="benoten">
</form>
<?php
}So könnte es klappen, mal eben schnell hingestrickt.
Aufteilung in die Bereiche
- Definitionehn und Includes
- Deklarationen von Funktionen
- Datenübernahme
- Verarbeitung
- Ausgabe = Vorbereitung der Eingabe oder Erfolgsmeldung
Zu dem anderen Problem
Nimm gleich submit-Buttons. Es können beliebig viele in einem Formular definiert werden.
Glaube niemals Deinen Usern. Die könnten auch 133 als Note übertragen. Wenn Du keinen Range-Check durchführst, kann man Dir alles unterjubeln.
Nimm die Methode GET nur dann, wenn das Script mit diesem Patameter auch als Link oder Bookmark eingetragen werden darf. Wenn Werte zur Verarbeitung erfragt werden, nimm immer POST.
Bau noch eine Formular-ID (Unique-ID) ein, die beim Ausliefern ($EVA= 'E') des Formulars an den Client als Hidden-Feld übertragen wird. Trag diese ID in eine LOG-Datei ein, in der steht, "unbenutzt, ausgeliefert, erledigt". Wenn nun ein POST zur auf das Formular kommt, prüfe, ob diese ID in der Tabelle steht, Wenn ja, prüfe ob sie schon den erledigt-Merker hat, wenn ja setze $_ERRORS[] = "Multipost oder Benutzermanipulation..." $_EVA ist dann 'A'
Alles verstanden?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom