[PHP] If-Anweisungen verschachteln

Zathras

Lieutenant
Registriert
Sep. 2006
Beiträge
582
Hallo zusammen.
Ich habe mir ein Formular gebastelt, in welches man seine Anforderungen an die IT-Abteilung enträgt. Dieses Formular überträgt die Daten an ein php-skript, welches dann mit hilfe von phpmailer eine email generiert und an die it-abteilung schickt. das ganze funktioniert ganz gut, aber am finetuning bin ich nun stecken geblieben.

Ich möchte nun, dass der inhalt von "vorauswahl" überprüft wird. wenn das ergebnis positiv ist, sollen "nuservorn", "nusernachn" und "rechte" auf Inhalt überprüft werden. Sind sie leer, soll eine Fehlermeldung erscheinen (ähnlich der Meldung wenn die ersten angaben nicht gemacht wurden), wenn in den drei feldern was steht, soll die verarbeitung weiter gehn. Im Moment prüfe ich nur ob in "nuservorn" was drin steht und lasse dementsprechend den text und die variablen in der mail erscheinen oder nicht.

Eine einfache if-anweisung habe ich ja schon hinbekommen aber wie ich diese zusätzlichen anweisungen unterbekomme ist mir ein rätsel. wenn ich sie an der enstprechenden stelle im ablauf einbaue, funktioniert sie, es kommt auch eine fehlermeldung, aber der ablauf geht dennoch weiter, die mail wird trotzdem verschickt. Ich bräuchte an der stelle also sozusagen einen befehl, der den restlichen ablauf verhindert. Ich habe die anweisung auch direkt nach die erste if-abfrage gesetzt, allerdings erscheint die fehlermeldung dann immer, und nicht nur wenn ein eintrag fehlt.

ich hoffe ich hab mich einigermaßen verständlich ausgedrückt und vllt. kann mir jemand nen tipp geben, wo und wie ich die neue abfrage einbauen kann...

mfg
 
Zuletzt bearbeitet:
Mit meinen php Kenntnissen ist es zwar nicht weit her, aber in C++ funktioniert es so, dass du in eine Bedingung per && (AND-Operator) bzw. || (OR-Operator) was anhängen kannst.

Das heißt:

if ( Bedingung1 && Bedingung2) würde bedeuten, wenn beide Bedingungen zutreffen, wird das folgede ausgeführt.

logischerweise bedeutet
if ( Bedingung1 || Bedingung2) dann, wenn eine der beiden Bedingungen erfüllt sind, wird die if-Klammer ausgeführt.

Leider kann ich dir nicht sagen, wie das ganze in der php-Syntax aussieht, aber das Prinzip dürfte das gleiche sein.

(Hoffendlich hab ich jetzt nicht total OT gepostet.)
 
Öhm hi, naja also wenn du prüfen willst ob ein Feld gefüllt ist oder nicht, mach ich das relativ simpel.

Und zwar so:

if($_POST['feldname'] != "") {

echo 'steht was drin';

}
else {

echo 'im ersten feld steht nichts drin!';

}


verschachtelt sähe das so aus...ka ob dir das weiterhilft.


if($_POST['feldname'] != "") {

if[$_POST['feldname2'] != "") {

echo 'steht in beiden feldern was drinne';

}
else {

echo 'im zweiten feld steht nichts drin!';

}

}
else {

echo 'im ersten feld steht nichts drin!';

}
 
Ja ist in PHP die selbe Syntax. (@Spartaner)

edit: @braumeister: bitter Code immer in code-Tags packen, es gibt sogar extra welche für PHP ;)
 
hi
also ich weiß, dass fremder code immer etwas merkwürdig ausschaut, aber guckt ihn euch trotzdem bitte mal an. ich habe ganz am anfang eine if-abfrage und die else-anweisung dazu steht ganz am ende.
dazwische habe ich weiter abfragen und die funktionieren auch. nur die jetzige neue abfrage die dazwischen stecken soll, soll ja sozusagen den ablauf verlassen, wenn sie negativ ausfällt. mir ist net so ganz klar wie ich das anstellen soll.

wenn ich dazwischen jetzt meine abfrage einbaue:

wenn vorauswahl etwasbestimmtes enthält,
dann gucknach ob in rechte was drin steht,
steht in rechte was drin, mach weiter
steht nix drin hör auf und ignorier alles was jetzt kommt
und jetztkommen noch mehr abfragen und elseanweisungen

so.
wenn also die abfrage nach "rechte" negativ ausfällt, wie bringe das skript dann dazu alles weitere zu ignorieren bzw. wie muss ich die ifabfragen verschachteln damit das hinhaut?

ich weiß net so recht wie ich das noch anders erklären kann, was ich vorhab...
 
So, ich habe das Skript jetzt abgeändert, so wie ich es für richtig halte. mit einem php-editor habe ich auch geprüft ob die Klammern so richtig zueinander gehören, das passt.

PHP:
<?php
    if (!empty($_POST['vorname']) && !empty($_POST['nachname']) && !empty($_POST['sender']))
	{
require("phpmailer/class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = "smtp"; // SMTP server
$mail->From = $_POST['sender'];
$mail->FromName = $_POST['vorname'] ." ". $_POST['nachname'];
$mail->AddAddress("meineadresse@meinedomain.de");
$mail->AddAddress($_POST['sender']);
$mail->Subject = "Anfrage von " . $_POST['vorname'] . " " . $_POST['nachname'] ." zum Thema: ". $_POST['vorauswahl'] . "..." ;
$mail->Body = "Hallo! \n ". $_POST['vorname'] . " " . $_POST['nachname'] ." hat eine Anfrage zum Thema ". $_POST['vorauswahl'] . " \n";
 
 if ($_POST['pc'] == 1)
      {
        $mail->Body .= "PC \n";
      }
 if ($_POST['monitor'] == 1)
      {
        $mail->Body .= "Monitor \n";
      }
 if ($_POST['drucker'] == 1)
      {
        $mail->Body .= "Drucker \n";
      }
 if ($_POST['intrexx'] == 1)
      {
        $mail->Body .= "Intrexx \n";
      }
 if ($_POST['caq'] == 1)
      {
        $mail->Body .= "CAQ \n";
      }
 if ($_POST['email'] == 1)
      {
        $mail->Body .= "E-Mail \n";
      }
 if ($_POST['domain'] == 1)
      {
        $mail->Body .= "Domäne \n";
      }
 if ($_POST['sap'] == 1)
      {
        $mail->Body .= "SAP \n";
      }
 if ($_POST['word'] == 1)
      {
        $mail->Body .= "Word \n";
      }
 if ($_POST['excel'] == 1)
      {
        $mail->Body .= "Excel \n";
      }
 if ($_POST['outlook'] == 1)
      {
        $mail->Body .= "Outlook \n";
      }
 if ($_POST['access'] == 1)
      {
        $mail->Body .= "Access \n";
      }
   if ($_POST['vorauswahl'] == "b" or "n")
   {
 if (!empty($_POST['nuservorn']))
      {
        $mail->Body .= "\nDer User heißt " . $_POST['nuservorn'] . " " . $_POST['nusernachn'] . " und folgendes soll gemacht werden: " . $_POST['rechte'] . "!";
      }
   else
   {
   echo "stimmt net";
   }
   }
   else
   {
   
 if (!empty($_POST['bemerkung']))
      {	
	$mail->Body .= "\n\nAußerdem:\n". $_POST['bemerkung']  ."\n";
      }
 if(!$mail->Send())
 {
   echo 'Anfrage wurde nicht versand.';
   echo 'Fehlermeldung: ' . $mail->ErrorInfo;
 }
 else
 {
   echo 'Vielen Dank für Ihre Anfrage, die Nachricht wurde versand, eine Kopie erhalten Sie per E-Mail.';
 }
	}
	else
	{
	echo "Die Angaben sind nicht vollständig. Vorname, Nachname oder Absenderadresse fehlt.";
	}
            }
?>

nun habe ich beim ausführen das problem, dass er sich wegen dem letzten "else" beschwert weil er es nicht erwartet.
ich blick net, wo der fehler ist...
 
Du bekommst bei dem Else ein Fehler weil du für eine IF Abfrage auch nur einen else Bereich Definieren kannst. Ist ja auch irgendwie logisch ;).
Aber sonst sieht dein Code ziemlich richtig aus.
 
Du musst übrigens, wenn nur eine Zeile Code folgt nach einer If-Anweisung keine Geschweiften Klammern benutzen. Aber ist nur zu empfehlen wenn sicher nichts mehr dazu kommt, denn falls später noch was dazu kommt isses schön wenn die Klammer schon da sind.
 
um zu überprüfen ob ein post/get feld gesetzt ist gibt es isset() liefert true bzw. false zurück...
PHP:
if (isset($_POST['postvariable']) {
   echo "postvariable wurde gesetzt...";
}

greez krizi...
 
Hallo Leute, ich habs hinbekommen.
das ganze schaut nun so aus:
PHP:
<?php 
    if (!empty($_POST['vorname']) && !empty($_POST['nachname']) && !empty($_POST['sender'])) 
    { 
require("phpmailer/class.phpmailer.php"); 
$mail = new PHPMailer(); 
$mail->IsSMTP(); // telling the class to use SMTP 
$mail->Host = "smtp"; // SMTP server 
$mail->From = $_POST['sender']; 
$mail->FromName = $_POST['vorname'] ." ". $_POST['nachname']; 
$mail->AddAddress("meineadresse@meinedomain.de"); 
$mail->AddAddress($_POST['sender']); 
$mail->Subject = "Anfrage von " . $_POST['vorname'] . " " . $_POST['nachname'] ." zum Thema: ". $_POST['vorauswahl'] . "..." ; 
$mail->Body = "Hallo! \n ". $_POST['vorname'] . " " . $_POST['nachname'] ." hat eine Anfrage zum Thema ". $_POST['vorauswahl'] . " \n"; 
  
 if ($_POST['pc'] == 1) 
      { 
        $mail->Body .= "PC \n"; 
      } 
 if ($_POST['monitor'] == 1) 
      { 
        $mail->Body .= "Monitor \n"; 
      } 
 if ($_POST['drucker'] == 1) 
      { 
        $mail->Body .= "Drucker \n"; 
      } 
 if ($_POST['intrexx'] == 1) 
      { 
        $mail->Body .= "Intrexx \n"; 
      } 
 if ($_POST['caq'] == 1) 
      { 
        $mail->Body .= "CAQ \n"; 
      } 
 if ($_POST['email'] == 1) 
      { 
        $mail->Body .= "E-Mail \n"; 
      } 
 if ($_POST['domain'] == 1) 
      { 
        $mail->Body .= "Domäne \n"; 
      } 
 if ($_POST['sap'] == 1) 
      { 
        $mail->Body .= "SAP \n"; 
      } 
 if ($_POST['word'] == 1) 
      { 
        $mail->Body .= "Word \n"; 
      } 
 if ($_POST['excel'] == 1) 
      { 
        $mail->Body .= "Excel \n"; 
      } 
 if ($_POST['outlook'] == 1) 
      { 
        $mail->Body .= "Outlook \n"; 
      } 
 if ($_POST['access'] == 1) 
      { 
        $mail->Body .= "Access \n"; 
      } 
   if ($_POST['vorauswahl'] == "Neuer Benutzer in" or $_POST['vorauswahl'] == "Berechtigungsänderung in") 
   { 
 if (!empty($_POST['nuservorn']) && !empty($_POST['nusernachn']) && !empty($_POST['rechte'])) 
      { 
        $mail->Body .= "\nDer User heißt " . $_POST['nuservorn'] . " " . $_POST['nusernachn'] . " und folgendes soll gemacht werden: " . $_POST['rechte'] . "!"; 
    
 if (!empty($_POST['bemerkung'])) 
      {     
    $mail->Body .= "\n\nAußerdem:\n". $_POST['bemerkung']  ."\n"; 
      } 
 if(!$mail->Send()) 
 { 
   echo 'Anfrage wurde nicht versand.'; 
   echo 'Fehlermeldung: ' . $mail->ErrorInfo; 
 } 
  else 
 { 
   echo 'Vielen Dank für Ihre Anfrage, die Nachricht wurde versand, eine Kopie erhalten Sie per E-Mail.'; 
 } 
    } 
    else
    {
    echo "Sie haben '",$_POST['vorauswahl'],"' ausgewählt. Dazu müssen Sie auch einen entsprechenden Namen und die Berechtigungen angeben." ;
    }
    }
else
{
if (!empty($_POST['bemerkung'])) 
      {     
    $mail->Body .= "\n\nAußerdem:\n". $_POST['bemerkung']  ."\n"; 
      } 
 if(!$mail->Send()) 
 { 
   echo 'Anfrage wurde nicht versand.'; 
   echo 'Fehlermeldung: ' . $mail->ErrorInfo; 
 } 
 else 
 { 
   echo 'Vielen Dank für Ihre Anfrage, die Nachricht wurde versand, eine Kopie erhalten Sie per E-Mail.'; 
 } 
     
 }   }
   else 
   {
   echo "Die Angaben sind nicht vollständig. Vorname, Nachname oder Absenderadresse fehlt."; 
   }    
?>

danke für eure tipps und MfG
timo
 
Mein Tipp:

PHP:
//...
$liste = Array (
"pc" => "PC \n",
"monitor"=> "Monitor \n", 
"drucker" => "Drucker \n",
 //...   
);

foreach ( $liste as $name => $value ) {
    if( isset( $_POST[$name] ) && $_POST[$name] == 1 ) {
        $mail->Body .= $value;
    }

} 

//...

Ist netter, oder? Merksatz: Code, der gleich aussieht, lässt sich meistens zusammenfassen ;)

Noch ein Vorteil: Wenn du mal auf eine Datenbank umsteigst und solche Felder dynamisch hinzufügen willst (über ein Admin-CP) dann kannst du die abfragen gar nicht "hardcodiert" im Quelltext stehen haben, sondern musst alles aus der Datenbank abfragen. Eine foreach-Schleife ist somit zukunftssicherer.
 
Zuletzt bearbeitet:

Ähnliche Themen

M
Antworten
4
Aufrufe
1.331
Mr. Snoot
M
Zurück
Oben