FeatureD: Problem mit Arrays im Mail-Script :/

Hi! Ich habe folgendes Problem: Ich mache gerade ein Bewerbungsformular, welches unter anderem ein Feld für Links enthält (Standardmäßiges Input-Feld). Dieses wird per POST an mein Script weitergegeben. Die Links werden im Input-Feld mit ";" getrennt um sie mit explode ganz einfach zerlegen zu können. Da Explode den Output aber in Arrays speichert, habe ich nun Probleme dabei, es im Text der E-Mail einzubauen. Dachte dabei an eine foreach-schleife (Link 1: ;Link 2:; etc..). Unten findet ihr den Code. Die betreffende Stelle habe ich hier mit "×" eingegrenzt! Für weitere Fragen bin ich gerne da 😀

<?php 

$clipcount = 1;

$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: Application\r\n"; 
$message = "

<html>
	<head>
	</head>
	<body>
		<h1>Greetings, Recruiter</h1><br>
		<p>A new user just applied to join! Below, you will find the applicants data!</p>
		<br>
		<p>First name: ".$fname."<br>
		Applying as: ".$applyingas."<br>
		Age: ".$appage."<br>
		Nickname: ".$nickname."<br>
		Discord Name: ".$disc."<br>
		Steam-Profile: <a href='".$steam."'>Click me!</a><br>
		Clip: <a href='".$clips."'>Click me!</a><br>".×foreach($clipssep as $link){echo 'Clip '.$clipcount.': <a href="'.$link.'">Click me!</a>';$clipcount++;}×."
		</p>
		<b>Application Script &copy; 2018</b>
	</body>
</html>
";

mail('$email1, $email2, $email3', '[RC]'.$applyingas.' application!'.$fname.' aka. '.$nickname.' applied to join!',$message,$headers);

?>
  1. Tach!

    Dachte dabei an eine foreach-schleife (Link 1: ;Link 2:; etc..). Unten findet ihr den Code. Die betreffende Stelle habe ich hier mit "×" eingegrenzt!

    foreach ist keine Funktion, die ein Ergebnis liefert, sondern ein eigenständiges Statement. Wenn du es funktional machen möchtest, brauchst du array_reduce(). Mit foreach müsstest du die Erstellung von $message an der Stelle erstmal beenden, dann mit foreach die Teile anstückeln und anschließend den Rest hinzufügen.

    dedlfix.

    1. anschließend den Rest hinzufügen.

      wieder mit $message .= ?

      1. Tach!

        anschließend den Rest hinzufügen.

        mit wieder mit $message .= ?

        Ja, so funktioniert das Anhängen an vorhandene Strings.

        dedlfix.

        1. Kannst du mir von dem vorhin erwähnten ein kurzes Beispiel machen? Wäre dir sehr dankbar 😀

          1. Tach!

            Kannst du mir von dem vorhin erwähnten ein kurzes Beispiel machen? Wäre dir sehr dankbar 😀

            $things = ['bar','qux'];
            
            $message = 'foo';
            
            foreach ($things as $thing) {
              $message .= $thing;
            }
            
            $message .= 'baz';
            

            dedlfix.

      2. Hallo

        anschließend den Rest hinzufügen.

        wieder mit $message .= ?

        Ja, beispielsweise so.

        Man könnte die Teile der HTML-Ausgabe auch als Arrayelemente anlegen und zu guter Letzt mit join aneinanderfügen oder noch andere Wege gehen, aber die Stringverkettung mit .=, wie du sie einsetzt, ist gut.

        Tschö, Auge

        --
        Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
        Toller Dampf voraus von Terry Pratchett
  2. Wow, gewusst wie, geht's doch 😛

    Danke vielmals euch beiden!

  3. Moin,

    noch ein paar Kleinigkeiten:

    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    

    Das bedeutet, dass du keine Alternative in reinem Text anbietest. Das ist nicht clever.

    $headers .= "From: Application\r\n";
    

    Was sagen denn die Emailprogramme deiner Empfänger zu dieser Absenderangabe?

    $message = "
    <html>
    	<head>
    	</head>
    	<body>
    		<h1>Greetings, Recruiter</h1><br>
    		<p>A new user just applied to join! Below, you will find the applicants data!</p>
    		<br>
    		<p>First name: ".$fname."<br>
    		Applying as: ".$applyingas."<br>
    		Age: ".$appage."<br>
    		Nickname: ".$nickname."<br>
    		Discord Name: ".$disc."<br>
    		Steam-Profile: <a href='".$steam."'>Click me!</a><br>
    		Clip: <a href='".$clips."'>Click me!</a><br>".×foreach($clipssep as $link){echo 'Clip '.$clipcount.': <a href="'.$link.'">Click me!</a>';$clipcount++;}×."
    		</p>
    		<b>Application Script &copy; 2018</b>
    	</body>
    </html>
    ";
    
    1. Was hat denn das <br> zwischen </h1> und <p> sowie </p> und <p> verloren?
    2. Sind deine Variablen entsprechend des HTML-Kontexts behandelt worden?
    mail('$email1, $email2, $email3', '[RC]'.$applyingas.' application!'.$fname.' aka. '.$nickname.' applied to join!',$message,$headers);
    

    '$email1, $email2, $email3' erscheint mir keine sinnvolle Empfängeradresse zu sein -- es ist sicherlich noch nicht einmal gültig. Und der Betreff wirkt auch, als sei er nicht in den entsprechenden Kontext gebracht worden. Ich empfehle die Konsultation der PHP-Dokumentation der mail-Funktion.

    Viele Grüße
    Robert