Mail mit mehreren Anhängen, Pfad aus Datenbank

nchristoph

Erfahrenes Mitglied
Hallo,

Ich versuche gerade, eine Mail mit mehreren Anhängen zu erstellen. Der Pfad zur Datei wird aus der Datenbank geholt.

Die Auswahl der Dateien habe ich mittels Eingabefeld vor, wo die Namen der Dateien mittels Beistrich getrennt, eingegeben werden also z.b.: 65215,65231,65124,...

Ich bin jetzt so an das Problem herangegangen:

PHP:
if(isset($_POST['mailgenerieren']) AND "" != $_POST['liste']){

	$liste = explode(",",$_POST['liste']);
	
	foreach($liste as $suche){
		echo $suche."<br />";		
	}
}
else{
       echo("fehler");
}

Wenn ich jetzt $suche ausgeben lasse, kriegen dieses Ergebnis:

62315
62316
62317
.
.
.

Meine Frage: Wie kann ich das jetzt mit einer Datenbankabfrage verbinden?

Wenn ich jetzt

PHP:
SELECT 
							Holzart,
							Starke,
							Partie,
							Pfad,
							Trockenheit,
							Klasse
						FROM
							suchmaschine
						WHERE
							 Partie LIKE '%" . $suche ."%'");

versuche, kommt die Fehlermeldung: Kein Suchergebniss.

Wie packe ich das richtig an?
 
Wenn du nach Nummern suchst, dann solltest du auch mit = Suchen und nicht mit LIKE. Speziell hier auch mit IN:
SQL:
SELECT ... 
FROM tabelle
WHERE
Feld IN (62415, 62416, 62417)
 
Genau, natürlich solltest du die Eingabe aber vorher validieren, sonst landet ruck-zuck Schadcode in deinem Query (Stichwort: mysql_real_escape_string) oder eine andere Eingabe zerhaut dir das Ergebnis.

Damit sollte es gehen, vorrausgesetzt du lässt nur natürliche Zahlen (inkl 0 ) zu.
PHP:
if( preg_match('/\d+ ?(, ?\d+)*/', $_POST['query']) === 1 ){
  // Eingabe ist gültig, auch kein mysql_real_escape_string mehr nötig
}
 
Nachdem es nur etwas Firmeninternes ist OHNE Zugriff von Aussen, nehme ich in der Entwicklungszeit das mit dem absichern nicht ganz so genau.

Ich werde es mir nochmal genau anschaun und nochmals versuchen.

Danke erstmal.
 
Und sei es nur weil sich jemand vertippt oder dergleichen, was dann direkt eine Fehlermeldung produzieren würde und das Script zum abstürzen bringt ;)
 
Ok die Absicherung füge ich noch ein, hast mich überzeugt. Hab das Script mit ' zum Abstürzen gebracht.

Zum Versenden per Mail.

Ich versuche gerade, die Dateien an mail() zu übergeben. Dazu habe ich mir eine function kopiert aus den Beispielen auf php.net.

Leider kriege ich nicht ALLE Dateinnamen bzw. Pfade an die Mail sonder nur 1.

Mein erster Ansatz war, die Dateinamen mittels hidden Feld mitzuschicken.

HTML:
<input type="hidden" id="files[]" name="files[]" value="<?=row2['Pfad'];?>" />

Hat leider nicht funktioniert.
Dann habe ich versucht, den Pfad in einen Array zu speichern und dann das hidden Feld mittels Foreach mitzusenden:

PHP:
foreach ($pfad as $newpfad){
echo('<input type="hidden" id="files[]" name="files[]" value="'.$newpfad.'" />');
}

Das hat auch nicht funktioniert.

Es wird einfach nur 1 Pfad, wenn überhaupt, mitgeschickt.

Ginge das mit einem externen Mail, sagen wir swiftmailer, einfacher?
 
Zuletzt bearbeitet:
Ja, mehrere Anhänge sind eine nicht triviale Angelegenheit. Ich würde _in_jedem_Fall den swiftmailer dafür benutzen.
 
Um mehrere Dateien abzuschicken kannst du hier schauen:
Send Email with multiple attachmetns

Zu deiner ersten Frage verstehe ich dein Problem nicht ganz. Du liest doch alle die Links aus, die sind also schon bekannt. Warum willst du die nochmal per Formular abschicken? Warum sendest du die Email nicht direkt?
 
Ich hab es jetzt ganz einfach mit PHPMailer gelöst.

Swiftmailer is zu komplex für meine bedürfnisse.

Eine Sache noch:

Wenn ich die Abfrage mit Where feld IN mache, werden nur die Dateien ausgelesen, welche in der DB drinnen sind.

Ich will aber jetzt noch als Zusatzausgabe folgendes machen:

Für folgende Pakete ist keine Liste vorhanden: ......

Wie kann ich das mit IN realisieren?
 
Zurück