• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Wie erstellt man eine HTML-Form Mehrfachauswahl und speichert die gewonnenen Daten ab?

HenryChinaski

Neues Mitglied
Hallo,

ich bin Anfänger was Webentwicklung betrifft, also verzeiht mir bitte etwaige Anfängerfehler oder Ungenauigkeiten. Ich weiß auch, dass es sich um eine Frage handelt die schon oft diskutiert worden ist, jedoch habe ich morgen eine Abgabe und komme einfach nicht weiter, selbst Google hilft gerade nicht wirklich.

Ich habe auf einer Website folgendes Formular:

HTML:
  <form action="SaveForm.php" method="post" id="QForm">
<label class="container">Ich habe nicht verstanden, wie es funktioniert
  <input type="radio" name="radio">
  <span class="checkmark"></span>
</label>
<label class="container">Ich habe es versucht, aber hatte technische Probleme
  <input type="radio" name="radio">
  <span class="checkmark"></span>
</label>
<label class="container">Sonstiges
  <input type="radio" name="radio">
  <span class="checkmark"></span>
</label>

<input type="submit" name="submit" value="Save Data">

</form>

Mein erstes Problem liegt darin, dass eine Mehrfachauswahl möglich sein soll. Da ich den Code für das Formular selbst zusammengeklaut habe, bin ich mir nicht sicher, wie ich das ganze angehen soll. Alle Beispiele die ich online finde sehen völlig anders aus.

Mein zweites Problem ist, dass ich das Ergebnis des Formulars auf unserem Server abspeichern möchte. Hier ist der zugehörige PHP Code:

PHP:
<?php
$action = $_GET["action"];
$myText = $_POST["mytext"];

if($action = "save") {
  $targetFolder = "uploads/";
  file_put_contents($targetFolder."mytext3.txt", $myText);
}
?>

Allerdings ist die Textdatei immer völlig leer. Bin mir ziemlich sicher, dass mit dem Formular etwas nicht stimmt. Da es sich um so etwas grundsätzliches handelt, hoffe ich, dass jemand vielleicht drüber schauen kann und einen Tipp für mich hat. Danke im Voraus!
 
Werbung:
Vielen Dank für den Tipp!
Die erste Frage lässt sich kurz und bündig beantworten: Benutze Checkboxes statt Radiobuttons, dann ist eine Mehrfachauswahl möglich.
Für die Frage, warum die Textdatei leer bleibt, empfehle ich diese beiden Seiten, wenn Du sie durcharbeitest, müsstest Du das Problem lösen können.

Super, vielen Dank. Das war einfach und hat das erste Problem schon einmal gelöst. Werde mir die anderen Links definitiv anschauen.

Wo soll $_GET["action"] herkommen?
Das
PHP:
if($action = "save")
ist eine Zuweisung und kein Vergleich. Siehe https://www.php.net/manual/de/language.operators.comparison.php

Guter Punkt. Hatte das einfach so aus einem Snippet übernommen, verstehe auch nicht wieso es dennoch funktioniert, die Textdatei wird ja erstellt. Das Problem ist nur, dass sie leer ist.
 
Werbung:
Richtig debuggen

  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 
Richtig debuggen

  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

Stimme dir absolut zu, richtiges Debuggen will gekonnt sein! Bin selber recht flüssig in C# und musste das selbst erst lernen. In diesem Fall kann ich dir allerdings nicht ganz folgen. HTML zu debuggen ist ja nicht so einfach, oder? Es wird ja schließlich nie gestoppt und falsch verwendete Deklarationen und ähnliches werden mir nicht angezeigt.

Habe wie von dir vorgeschlagen die Zeilen:
error_reporting(-1);
ini_set('display_errors', true);
an den Anfang des PHP documents geschrieben, allerdings ändert das nichts. Immer noch keine Fehlermeldung und eine korrekt erstellte Datei. Nur eben leer. Wüsste auch nicht wo ich in den wenigen Zeilen PHP noch irgendetwas testen sollte, wäre da aber über jeden Tipp dankbar.

Dachte, dass eventuell eher am Formular selbst etwas nicht stimmt, also vom Aufbau her. z.B. steht bei value = "Save Data". Sonst kenne ich .value nur als tatsächlichen Inhalt eines Objekts. Hier weise ich also dem Parameter value einen string zu? Ich hoffe du merkst, dass für einen Neuling im Webdevelopment Bereich vieles nicht so klar und selbstverständlich ist, so dass einfaches Debuggen nicht immer hilft, weshalb ich zu Punkt 8 übergegangen bin und hier geschrieben habe!

Lese mir jetzt mal die Tutorials durch, die geopstet worden sind. Vielleicht hilft das ja schon.
 
Zuletzt bearbeitet:
Werbung:
Da bist du ja gerade mal bis Punkt 3 gekommen, da steht aber noch mehr.

Okay, hatte gerade eben vom Testen was vergessen zurück zu setzen.
Bekomme durch deine Tipps (war mir überhaupt nicht bewusst, dass man in PHP die Fehlermeldungen aktivieren muss) tatsächlich die Fehler:

Notice: Undefined index: action in /srv/www/virtual/bildupload/htdocs/SaveForm.php on line 6

Notice
: Undefined index: mytext in /srv/www/virtual/bildupload/htdocs/SaveForm.php on line 7

Damit kann ich was anfangen!
 
Also, ich habe den PHP Code auf das wesentliche reduziert:

PHP:
$myText = $_POST["QForm"];

  $targetFolder = "uploads/";
  file_put_contents($targetFolder."mytext5.txt", $myText);

Allerdings bekomme ich nachwievor die Fehlermeldung, dass "QForm" undefined ist.
Mein FOrmular sieht jetzt oben so aus:

HTML:
<form action="SaveForm.php" method="post" id="QForm" name="QForm">

In den Beispiel die ich gefunden habe wird die Verbindung zwischen POST und dem Formular über den Parameter "name" hergestellt. Kann es sein, dass ich mich nicht auf das komplette Formular beziehen darf, sondern für jeden einzelnen Eintrag einen eigenen POST Befehlt erstellen muss?
 
Werbung:
Ein
PHP:
var_dump($_POST);
würde dir weiterhelfen.

Siehe z.B. auch https://www.php.net/manual/de/tutorial.forms.php

Erhalte:
Array(2) { ["radio"]=> string(2) "on" ["submit"]=> string(9) "Save Data" }

Sorry fürs blöde nachfragen, aber ich verstehe es wirklich nicht. Kann es sein, dass ich irgendwie die Buttons submitte, aber in Wirklichkeit ja die Labels brauche?
Das Tutorial ist super, aber da ist es exakt so wie ich es habe, außer, dass es keine Radio Buttons sind.

Habe auch probiert die einzelnen Labels per name Parameter mit POST anzusprechen, scheint aber auch nicht zu funktionieren. PHP ist echt ne ganz eigene Sache...

Weil es sich um eine Zuweisung handelt. Versuche es mal mit Yoda Conditions.
PHP:
// Vergleich auf strict equal
$foo ==== "bar";
  
// ist identisch mit
"bar" === $foo;

// Das geht als Zuweisung durch
$foo = "bar";

// Dreht man es um, wird der Fehler sichtbar
"bar" = $foo;

https://de.wikipedia.org/wiki/Yoda_Conditions

Danke für den Hinweis, aber habe die Bedingung erst einmal komplett rausgenommen zum testen. Problem ist momentan, dass die Datei zwar erstellt wird, ich es jedoch nicht schaffe in PHP auf die Eingaben im Formular zuzugreifen.
 
Hunderte Tutorials in Sachen PHP und Formulare im Internet und die reichen wirklich nicht?

PHP:
$myText = $_POST["QForm"];
Damit willst du auf den Namen des Forumulars zugreifen, das ist aber Quatsch
Array(2) { ["radio"]=> string(2) "on" ["submit"]=> string(9) "Save Data" }
<input type="radio" name="radio">
<input type="radio" name="radio">
<input type="radio" name="radio">
<input type="submit" name="submit" value="Save Data">

Da fällt dir nichts auf?

Oder hier (aus der Doku)

<input type="text" name="name" /></p>
<input type="text" name="alter" /></p>

Hallo <?php echo htmlspecialchars($_POST['name']); ?>.
Sie sind <?php echo (int)$_POST['alter']; ?> Jahre alt.
 
Werbung:
Hunderte Tutorials in Sachen PHP und Formulare im Internet und die reichen wirklich nicht?

PHP:
$myText = $_POST["QForm"];
Damit willst du auf den Namen des Forumulars zugreifen, das ist aber Quatsch

<input type="radio" name="radio">
<input type="radio" name="radio">
<input type="radio" name="radio">
<input type="submit" name="submit" value="Save Data">

Da fällt dir nichts auf?

Oder hier (aus der Doku)

<input type="text" name="name" /></p>
<input type="text" name="alter" /></p>

Hallo <?php echo htmlspecialchars($_POST['name']); ?>.
Sie sind <?php echo (int)$_POST['alter']; ?> Jahre alt.

Wenn du sehen würdest was ich in C# kann wärst du wahrscheinlich überrascht... Ich kann es mir nur so erklären, dass ich einfach ein völliger Anfänger bin. Da ist vieles nicht so selbstverständlich wie es dir vllt erscheint. Danke trotzdem, dass du versucht mir die Lösung zu zeigen.

Ich glaube ich habe jetzt aber durch deinen Hinweis verstanden was das Problem ist. Ich dachte, dass es einfach eine Art Funktion gibt mit der man ein Formular ausliest, aber dann hatte ich Recht mit dem was ich vorhin geschrieben habe, nämlich dass ich für jeden eigenen Wert einen POST formulieren muss?
Ich nenne also die einzelnen Buttons "Antwort1", "Antwort2" usw.
Dann erhalte ich die Variablen indem ich sie über $_POST('Antwort1') ansteuer. Hoffe das klappt so, nicht dass ich hier noch mehr Ärger bekomme!
 
Ok, habe es jetzt verstanden, es funktioniert und kann damit arbeiten.
Genial wie einfach man so an die Variablen kommt!
Da ich ja eigentlich den Text brauche muss ich also nur checken ob der Radio Button 1 aktiv ist und dann den Inhalt von Antwort 1 nehmen. Danke nochmal für die Geduld!
 
Werbung:
Zurück
Oben