HTML Probleme mit html-Formular

oulif

Cadet 1st Year
Registriert
Mai 2018
Beiträge
10
Hallo zusammen,

ich habe mich gerade hier angemeldet, da ich für eine Kundin für interne Zwecke ein html-Formular erstellen soll.
Dieses Formular soll ausgefüllt per Mail verschickt werden. Funktioniert auch soweit, aber das Dropdownmenü macht noch Probleme.
Wenn ich das ganze dann ausfülle und absende, wird der Wert, der in dem Feld eingestellt ist, nicht übermittelt. Einzig der erste Wert wird übermittelt. In der Mail ist dann der Punkt einfach leer bzw. Wert1 steht drin.

Hier mal der Code von dem Bereich mit dem Dropdownmenü und von dem php-Skript.

<tr>
<td align="left" >Auswahl Puppe<sup>*</sup>:</td>
<td>
<select name="puppe" required="required">
<option>Wert 1</option>
<option>Wert 2</option>
<option>Wert 3</option>
</select>
</td>
</tr>

<?php

$result=1;

if($_POST['name'] == ""){$result=0;}
if($_POST['vorname'] == ""){$result=0;}
if($_POST['strasse'] == ""){$result=0;}
if($_POST['plz'] == ""){$result=0;}
if($_POST['wohnort'] == ""){$result=0;}
if($_POST['land'] == ""){$result=0;}
if($_POST['telefon'] == ""){$result=0;}
if($_POST['email'] == ""){$result=0;}
if($_POST['kommentar'] == ""){$result=0;}
if($_POST['puppe'] == "") {$result=0;}
if($_POST['agb'] == ""){$result=0;}

if($result == 1)
{
$header = "Content-type; text/html; charset=iso-8859-1";
$header .= "From:" .$_POST['vorname'] .$_POST['name'] .$_POST['email'];
$body ="Vorname: " .$_POST['vorname']."\n";
$body .="Name: " .$_POST['name']."\n";
$body .="Strasse: " .$_POST['strasse']."\n";
$body .="PLZ: " .$_POST['plz']."\n";
$body .="Wohnort: " .$_POST['wohnort']."\n";
$body .="Land: " .$_POST['land']."\n";
$body .="Telefon: " .$_POST['telefon']."\n";
$body .="E-Mail: " .$_POST['email']."\n";
$body .="Kommentar: " .$_POST['kommentar']."\n";
$body .="Puppe: " .$_Post['puppe']."\n";
$body .="AGB akzeptieren: " .$_POST['agb']."\n";

$empfaenger = "xx@xx.de";
$betreff = "Bestellung/Anfrage";

@Mail ($empfaenger, $betreff, $body, $header);
echo "Vielen Dank für Ihre Bestellung. Ihre Nachricht wurde erfolgreich gesendet!";
}

elseif($result == 0)
{
echo "Ihre Nachricht wurde nicht gesendet!";
}
?>

Vielleicht kann mir jemand sagen, wo ich den Denkfehler habe??

Danke
Anja
 
Für SELECT nur den Namen; für OPTION dann das Value-Attribut. Übergeben wird im Querystring dann wie gewohnt name=value.

Protip: Numerische Werte für VALUE verwenden und dann auf PHP-Seite Rückbezüge verwenden. Oder gleich die Zuordnung (ID; Wert) in der Datenbank haben. Nichts ist schlimmer als String-Zuordnungen.
 
@RalphS Das sehe ich ganz und gar nicht so.
Strings (also quasi Enums) sind deutlich lesbarer als Zahlen. Ich speichere auch in der Datenbank lieber Strings als Zahlen. Dann weiß man sofort worum es geht und muss nicht erst in irgendeine Mapping Tabelle schauen.

Kommt natürlich auch auf die Art der Daten an. Wenn die Daten sortierbar sind kann man über Zahlen nachdenken, aber sonst gibt's überhaupt keinen Grund dafür.

Performance ist bei so einem Formular auch kein Argument.
 
Danke für eure Antworten. Das werde ich morgen mal ausprobieren.
 
  • Gefällt mir
Reaktionen: Drexel
Das "PHP-Skript" hier ist aber nur Pseudocode oder?

Produktiv kannst du das so jedenfalls nicht schalten, das strotzt nur so vor Sicherheitslücken.
Weil man wieder nicht ordentlich mit den Benutzereingaben umgeht. Du Kannst doch nicht ungeprüft & ungefiltert direkt die Werte aus dieser superglobalen $_POST-Variable nehmen und anfangen damit einen Mailheader und Mailbody aufzubauen... Was bei Datenbanken schon eine dumme Idee ist, ist bei E-Mails immer noch eine dumme Idee.

Merk dir mal: Wenn man Irgendwo $_GET oder $_POST ließt ist der Code Mist.
 
Natürlich wird das noch angepasst. Das ist ja auch der erste Entwurf, um zu sehen, ob es so funktioniert. Der richtige Code ist schon in Arbeit.
 
benneque schrieb:
@RalphS
Strings (also quasi Enums) sind deutlich lesbarer als Zahlen. Ich speichere auch in der Datenbank lieber Strings als Zahlen. Dann weiß man sofort worum es geht und muss nicht erst in irgendeine Mapping Tabelle schauen.

Klar gehen Enums, was ja einfach symbolische Namen sind, und wer verwendet im Quellcode schon 0 und 23 und 0xf0282, wenn man genausgut eine benannte Konstante haben kann.

Es geht auch nicht um Performance, sondern es geht um Integrität. Datenbanken sind keine Exceltabellen und wenn man sich seine Daten anhand von Plaintext sucht, am besten noch solcher, der von Benutzern eingegeben werden kann.... eh.

SELECT name, vorname, email FROM adressen WHERE address_type = ADT_WORK liest sich einfach genug, aber ... WHERE address_type = 'Arbeitsadresse' geht schief, wenn man sich verschreibt bei der Arbeitsadresse oder wenn man von einem CI auf ein non-CI Datenbanksystem wechselt (oder auch nur das DBMS, welches plötzlich a LIKE b anders interpretiert als das bisherige).

Natürlich kann man das auch anders machen und IDs generieren lassen, auch als Strings, wenn man die kurz hält und wenn es systemisch bleibt, aber ob ich da jetzt Text als Schlüssel eintrage oder numerische Werte, da hat man mit Text außer für den Entwickler selber keinen Vorteil. Und selbst das ist zweischneidig, weil Entwickler sich auch verschreiben können.... außer vielleicht bei ENUMs, aber wenn man DIE verwendet, dann kann man sich den String im Backend auch sparen.

Sonst muß man sich auch AUTO_INCREMENTS sparen und SEQUENCE wird ebenfalls schwierig und man braucht den ON AFTER INSERT Trigger....

.... anyway :offtopic . Es sollte eigentlich nur eine Anmerkung sein.
 
"Enums" direkt in der Datenbank (ohne weitere Entsprechung) können eine fette Performancebremse sein.
Deswegen enumeriert man das Ganze lieber im Modell der Applikation mit entsprechenden Konstanten Ausdrücken.

Die Datenbank kann zur optimalen Nutzung eines Index halt schlecht Vergleichen ob der Ausdruck "ADT_WORK" jetzt größer oder kleiner "ADT_HOME" ist; jedoch durchaus, ob 1 kleiner 3 ist.

Und eine Datenbank muss auch kein "Lesbares System" sein, eher ein Dokumentiertes System.
 
Natürlich gehe ich davon aus, dass du (in z.B. MySQL) auch den ENUM Typ benutzt und/oder auf dem Feld einen Index hast. Dann wird im Endeffekt auch nur eine Zahl gespeichert und die Datenbank übernimmt das Mapping. Macht von der Performance 0 Unterschied zu einer Zahl.
 
Leute, könntet ihr das bitte in einem eigenen Thread diskutieren. Hier ging es mir nur darum, dass die Werte nicht übernommen werden.
Inzwischen funktioniert mein Skript einwandfrei und jetzt werde ich mich an die Programmierung des PHP-Skriptes machen, damit dieses kein Pseudocode mehr ist.

Für mich ist das Thema erledigt.
 
Zurück
Oben