phpmailer - textfeld überprüfen

08/22/2014 16:31 Punisher.biz#1
Aloha,
(info; bin noch ein anfänger, somit nicht gut in php!)
Ich habe ein kleines Problem, und zwar habe ich mit Bootstrap und phpmailer ein kleines Kontaktformular "geschrieben", die Mail wird auch abgeschickt, aber auch wenn das Feld leer ist, was nicht so toll ist.

Anfangs, als ich nur ein Textfeld hatte, hat die Überprüfung des Feldes geklappt, und es kam eine Error Meldung, nun wo ich 2 extra Felder für E-Mail und Pseudonym angegeben habe, klappt dies nicht mehr, und das Formular kann somit leer abgeschickt werden, was nicht Sinn der Sache ist.

(Findet jemand den Fehler?)
Code:
<?
if(!empty($_POST))
{		
$pseudonym=$_POST['pseudonym'];
$email=$_POST['email'];
$nachricht=$_POST['nachricht'];

  require('phpmailer/class.phpmailer.php');
  
  $mail = new PHPMailer();
 
  $mail->From = "[Only registered and activated users can see links. Click Here To Register...]";
  
  $mail->FromName = "Kontaktanfrage | PuniHasstEuch.Reshock.eu";
  
  $mail->AddAddress("[Only registered and activated users can see links. Click Here To Register...]");
  
  $mail->Subject = "Kontaktanfrage | PuniHasstEuch.Reshock.eu";
 
  $mail->Body = "Pseudonym: $pseudonym\n\nE-Mail-Adresse: $email\n\nDeine Nachricht an mich:\n$nachricht";
  
  if(!$mail->Send())
  {
     echo "Die Kontaktanfrage konnte nicht gesendet werden";
  }
	else
  {
     echo "Die Kontaktanfrage wurde erfolgreich gesendet.<br>
		   Zurück zur Startseite? <a href='index.php'><b>Hier</b></a> entlang!";
	}
}
 else echo"<form action='index.php?page=sites/kontakt.php' method='post'>

	<input type='text' class='form-control' name='pseudonym' placeholder='Pseudonym'>
	<br>
	<input type='email' class='form-control' name='email' placeholder='E-Mail-Adresse'>
	<br>
	<textarea class='form-control' style='resize: none;' rows='5' name='nachricht' placeholder='Deine Nachricht an mich'></textarea>
	<br>
	<button type='submit' class='btn btn-default'>Abschicken</button></form>";

?>
Wie kann ich nun angeben, das Pseudonym, email und nachricht überprüft werden sollen, ob es leer ist oder nicht?

Ich würde es eigentlich gerne haben das wenn eins der Felder leer ist, oder alle, das irgendwo eine Nachricht erscheint, und sagt das man die Felder doch bitte ausfüllen soll.
- Falls dies nicht so einfach ist, reicht es mir auch das man auf die eigentliche Error Meldung kommt die im Script angegeben ist.

Wie kann ich das umsetzten? Habe nun schon länger gesucht, aber komme einfach nicht weiter...

Hoffe jemand versteht mein Problem, und kann mir helfen :)

Gruß
08/22/2014 16:52 Mikesch01#2
Du solltest vor dem Absenden nochmals die übergebenen Felder ($_POST) auf Leerheit überprüfen.

Übliche Prüfung in PHP:
PHP Code:
if(empty($variable)) { echo "variable ist leer"; }
else {
 echo 
"führe Aufgabe aus";

In deinem Fall musst du vor dem $mail->Send die Post-Variablen überprüfen:
PHP Code:
if(empty($_POST['pseudonym']) || empty($_POST['email']) || empty($_POST['nachricht'])) {
 echo 
"Ein Feld wurde nicht korrekt ausgefüllt oder ist leer";
}
else {
  
//dein Code:
  
if(!$mail->Send()) {
     echo 
"Die Kontaktanfrage konnte nicht gesendet werden";
  }
  else {
     echo 
"Die Kontaktanfrage wurde erfolgreich gesendet.<br>
           Zurück zur Startseite? <a href='index.php'><b>Hier</b></a>"
;
  }

Dieses "||" ist ausgesprochen ein "OR" in der Boolschen-Algebra
08/22/2014 17:07 Punisher.biz#3
Danke dir, wo genau muss ich den Code denn hinlegen?

(Sry bin wirklich noobig dadrin, will das aber bald fertig haben >.<)

edit:

WOHO DANKE! ich liebe dich! :D
08/24/2014 21:58 .StarSplash#4
Und nun eine Erklärung, warum das denn so ist:

$_POST stellt ein Array dar, in deinem Fall mit den Feldern Pseudonym, Email und Name. Das ist aber noch nicht alles, auch der Submit-Button geht mit ins Array ein. Wenn du nun mit !empty($_POST) prüfst, ob das (gesamte) Array nicht leer ist, wird dies logischerweise verneint, Submit hast du ja mit dem Klicken auf deinen Button gesetzt.

Du musst folglich die entsprechenden Felder des Arrays einzeln überprüfen, so wie in der Lösung von Mikesch01 geschehen.

Für die Zukunft solltest du dein Skript noch so erweitern, dass nur gültige Emails eingetragen werden dürfen. Das kannst du mit regulären Ausdrücken schaffen.
08/24/2014 22:57 Punisher.biz#5
Dank dir, ja das mit den mails ist so eine Sache, ich denke ich werde dies ganz anders gestalten, und dort einfach eine "Kontaktmöglichkeit" einbauen, wo die dann reinschreiben wo ich sie Kontaktieren kann (Ts, mail, Skype etc.)

Gruß
08/24/2014 23:42 ThinSmoke#6
Ist quatsch die Abfrage überhaupt abzuschicken, wenn die Felder nicht befüllt sind..
Du solltest deinen inputs required="required" mitgeben.