Formularausgabe: leere "Wahlfelder" unterdrücken

GudrunS

Grünschnabel
Hallo,

ich habe eine Frage zur Formularausgabe. Es ist nur ein "Schönheitsfehler", das Formular funktioniert eigentlich....

Ich habe ein Bestellformular, dass neben Pflichtfeldern auch "Wahlfelder" enthält, also Felder, die nicht ausgefüllt sein müssen.
Das Formular schickt die Bestelldaten mittels eines php-Skripts als E-Mail an mich und den Besteller und es gibt die Bestelldaten gleichzeitig auch mittels eines php-Skripts noch in einer Bestätigungsseite auf dem Bildschirm aus.

Bisher war es so, dass bei nicht ausgefüllten "Wahlfeldern" der Feldname sowohl in der E-Mail wie auch auf der Bestätigungsseite ohne Inhalt mitgesendet bzw. -angezeigt wurden.
Da ich meine Seiten designmäßig gerade etwas überarbeite, habe ich gedacht, dass ich mich auch mal an diesen "Schönheitsfehler" des Formulars ranmache.

Mit Forumssuche etc. habe ich den Schönheitsfehler für die Bestell-/Bestätigungsmail abgestellt. Ich habe dort eine if-else Konstruktion eingebaut, die tatsächlich nur dann die Wahlfelder mitschickt, wenn sie ausgefüllt wurden.

Wenn ich jetzt aber dieselbe if-else Konstruktion in das php-Skript für die Bildschirmbestätigungsseite eingebe, dann kommt dort nur Schrott raus...
Hier mein Skript für die Bildschirmbestätigungsseite:
PHP:
<?php
echo <<<FORMULARAUSGABE
<h4><b>Buchbestellung:</b></h4>
Autor: $a<br>
Titel: $t<br>
Buch-Nr.: $b<br>
Preis: $p plus Versandkosten<p>
$versandart<br>
$zahlungsart<p>
<b>Bestellung durch:</b><br>
Email: $email<br>
Name: $name<br>
Straße / Hausnummer: $strasse<br>
PLZ / Ort: $plz $ort<br>
Land: $land<br>
if (empty($telefon)) {} else {"Telefon: $telefon\n";}
if (empty($fax)) {} else {"Fax: $fax\n\n";}
if (empty($comment)) {} else {"Ihre Nachricht:\n $comment\n\n";}
FORMULARAUSGABE;
// ENDE: if ($error=="")
}
// ENDE: if gesendet
}
?>

Das Ergebnis sieht dann z.B. bei einer Eingabe im Nachrichtenfeld so aus:
Buchbestellung:
Autor: Werkkreis Literatur der Arbeitswelt
Titel: Augen rechts
Buch-Nr.: G-010
Preis: 3,10 EUR plus Versandkosten
Versandart: Büchersendung auf dem Landweg
Zahlungsart: Überweisung (Deutschland und EUR-Zone)

Bestellung durch:
Email: xxx@xxx.de
Name: test
Straße / Hausnummer: test
PLZ / Ort: 12345 test
Land: test
if (empty()) {} else {"Telefon: ";} if (empty()) {} else {"Fax: ";} if (empty(test)) {} else {"Ihre Nachricht: test ";}

==> die if-else Konstruktion wird hier nicht ausgeführt, sondern am Bildschirm angezeigt.

Ich habe versucht, die if-else-Konstruktion als seperates php-Skript innerhalb der Formularausgabe auszuführen, da kommen aber immer nur Fehlermeldungen...

Für Ideen wäre ich dankbar, ansonsten muss ich halt mit einem "halben" Schönheitsfehler weiterleben.

Gruß
GudrunS
 
Zuletzt bearbeitet:
Hi Grudrun,

in deinem Skript fehlen die PHP Start- und Endtags an diversen stellen. Z.Zt. sagst Du durch das Skript, das dein IF-Konstrukt auf dem Bildschrim ausgegeben werden soll.

Probier es mal hiermit:

PHP:
<?php 
//echo <<<FORMULARAUSGABE 
echo '<h4><b>Buchbestellung:</b></h4> 
Autor: '.$a.'<br> 
Titel: '.$t.'<br> 
Buch-Nr.: '.$b.'<br> 
Preis: '.$p.' plus Versandkosten<p> 
'.$versandart.'<br> 
'.$zahlungsart.'<p> 
<b>Bestellung durch:</b><br> 
Email: '.$email.'<br> 
Name: '.$name.'<br> 
Straße / Hausnummer: '.$strasse.'<br> 
PLZ / Ort: '.$plz.' '.$ort.'<br> 
Land: '.$land.'<br>';
if (!empty($telefon)) {echo "Telefon: $telefon\n";} 
if (!empty($fax)) {echo "Fax: $fax\n\n";} 
if (!empty($comment)) {echo "Ihre Nachricht:\n $comment\n\n";} 
//FORMULARAUSGABE;
// ENDE: if ($error=="") {
} 
// ENDE: if gesendet 
} 
?>

Irgendwie hast Du in den Text auch zu viele schließende Klammern am Schluß

PHP:
// ENDE: if ($error=="") {
} 
// ENDE: if gesendet 
}
 
Hi Shockshell,

vielen Dank für Deine schnelle Hilfe. Ich hab nur leider zur Zeit so viel Stress im Büro, dass ich nur wenig ins Forum schauen kann...

Also Dein Skript hat die meisten Probleme beseitigt. Die Daten kommen jetzt auf der Bildschirmbestätigungsseite an.

Trotzdem habe ich noch ein paar Fragen... <g>

1. macht es im Skript einen Unterschied, ob man einfache Hochkommas benutzt oder Anführungszeichen (ich probiere es morgen mal aus, aber bei verschiedenen Forumssuchen wurde der Unterschied immer wieder aufgegriffen, ohne dass ich ihn verstanden hätte...)?

2. Was bewirken die Punkte um die Variablen? Ist das wie im E-Mail-Skript eine Funktion, die die verschiedenen Variablen hintereinanderhängt?

3. In der Bildschirmbestätigungsseite kommen jetzt die Daten so an:
Buchbestellung:
Autor: Werkkreis Literatur der Arbeitswelt
Titel: Augen rechts
Buch-Nr.: G-010
Preis: 3,10 EUR plus Versandkosten
Versandart: Büchersendung auf dem Landweg
Zahlungsart: Überweisung (Deutschland und EUR-Zone)

Bestellung durch:
Email: xxx@xxx.de
Name: test
Straße / Hausnummer: test
PLZ / Ort: 12345 test
Land: test
Telefon: 1234567 Ihre Nachricht: test

==> die Ergebnisse werden beim Ausfüllen von mehr wie einem Wahlfeld nicht durch einen Zeilenumbruch oder Paragraphen getrennt, obwohl im Skript ja das \n bzw. \n\n eingetragen ist.

Aber das jetzt bitte nicht als Kritik auffassen, ich bin total happy über die schnelle Lösung und trotzdem neugierig.

Gruß
GudrunS
 
Hi Grudrun,

1. macht es im Skript einen Unterschied, ob man einfache Hochkommas benutzt oder Anführungszeichen (ich probiere es morgen mal aus, aber bei verschiedenen Forumssuchen wurde der Unterschied immer wieder aufgegriffen, ohne dass ich ihn verstanden hätte...)?

Wenn Du einen Text in Hochkommata (') schreibst, so wird der Text so ausgegeben, wie Du Ihn dort hineingeschrieben hast.

Schreibst Du einen Text in Anführungszeichen ("). So parst PHP diesen Text und ersetzt evtl. vorkommende Variablen durch deren Inhalt.

Als Bsp.:
PHP:
$name='Klaus';
echo 'Hallo $name'; //=> Hallo $name
echo "Hallo $name"; //=> Hallo Klaus

Generell wird ein Skript also schneller, um so weniger Text in doppelten Anführungzeichen steht, weil PHP dann diesen Text nicht zusätzlich verarbeitet.

2. Was bewirken die Punkte um die Variablen? Ist das wie im E-Mail-Skript eine Funktion, die die verschiedenen Variablen hintereinanderhängt?

Das ist richtigt. Mit dem Punkt werden Texte miteinander verknüpft.

Bsp.:
$s='Hallo ';
$s.='Klaus';

Die zweite Zeile hängt an den Text 'Klaus' an die Variable $s, in der bereits 'Hallo ' steht.
Ergebnis 'Hallo Klaus'.

Diese Zeile führt zum gleichen Ergebnis:

$s='Hallo '.'Klaus';

3. In der Bildschirmbestätigungsseite kommen jetzt die Daten so an:

Probier es mal hiermit. Dadurch werden die Zeilenumbrüch am Anfang der Ausgabe gesetzt. Zudem machst Du ja eine Ausgabe in PHP und da sind Zeilenumbrüche '<br>'.
Also

PHP:
......Land: '.$land; 
if (!empty($telefon)) {echo '<br>Telefon: '.$telefon;} 
if (!empty($fax)) {echo '<br><br>Fax: '.$fax;} 
if (!empty($comment)) {echo '<br><br>Ihre Nachricht:<br>'.$comment;}
 
Zuletzt bearbeitet:
Hi Shockshell!

Super! Vielen, vielen Dank!

Jetzt klappt alles, so wie ich es mir vorgestellt habe.

Und außerdem habe ich wieder einiges zu php gelernt. Hoffentlich vergesse ich es nicht gleich wieder...

Gruß und schönes Wochenende
GudrunS
 
Zurück