E-mail mellékletet ne legyen kötelező feltölteni

E-mail mellékletet ne legyen kötelező feltölteni
2015-05-16T14:25:01+02:00
2015-05-17T17:03:34+02:00
2022-12-02T12:41:58+01:00
nucleus
Sziasztok

Csinálgatok egy mail küldő rendszert amibe 3 db csatolmányt tud küldeni a felhasználó.
Azt szeretném elérni hogy ha ne keljen kötelezően használni a csatolmány részét. 
Én valami if, else függvényre gyanakszok megoldásnak, de azért tettem fel itt ezt a hülye kérdést hogy okos megoldást tudjak alkalmazni.

Most jelen pillanatba ebbe köt bele a program ha kihagyom az egyik csatolmányt:


$path_parts = pathinfo($file_name);
$ext = $path_parts['extension'];  // <---Notice: Undefined index: extension
                                                    //     in/var/www/dnacelszerkezet.hu/levelkuld.php on line 46
if(!in_array($ext,$allowedExtensions)) {
die("<script> alert('A Kiterjesztés Nem Engedélyezet!') </script>");
}

Válaszotokat előre is köszönöm!
Mutasd a teljes hozzászólást!
Csatolt állomány
Mivel nem figyeltem és a "kötelező csatolás" a kódomban is benne van, ezért
A következőt módosítsd ->
error_reporting(0); // a te mail címed, ahova a levelek menni fognak $to = "mail_cimed.hu"; //címzett e-mail $hiba = ""; $siker = ""; if(array_key_exists("_send", $_POST)) { // ellenőrző rutinok, hibaüzenetek $subject = ereg_replace("'", "'", $_POST['subject']); if($_POST['email'] == "") $hiba .= "Nem adtál meg email címet!<br />\r\n"; elseif(!preg_match("/^[[:alnum:]\-_\.]{1,}\@[[:alnum:]\-_\.]{1,}\.[[:alnum:]\-_\.]{1,}(\.[[:alnum:]\-_\.]{1,})*$/i",$_POST['email'])) $hiba .= "Érvénytelen email címet adott meg!<br/>\r\n"; elseif($_POST['name'] == "") $hiba .= "Nem adott meg nevet!<br/>\r\n"; elseif($subject == "") $hiba .= "Nem írta be az üzenetet tárgyát!<br />\r\n"; elseif($_POST['message'] == "") $hiba .= "Nem írt be üzenetet!<br />\r\n"; if($hiba == "") { $msg = ereg_replace("'", "'", $_POST['message']); $msg = ereg_replace('"', """, $msg); // egy fejszöveg, amely később felhasználható az üzenet kezdetekor $from_fej = 'Üzeneted érkezett '.stripslashes($_POST['name']).' részéről a(z) '.stripslashes($_POST['email'])." e-mail címről.\r\n"; // küldő cím és válasz cím $from = "From: ".$_POST['email']."\r\n"; $Reply_to = " Reply-to: ".$_POST['email']."\r\n"; // generálisan egy véletlenszerű stringet kell használni, mint határoló markert $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; // a fájl tárolására információk változókban a könnyebb hozzáférés érdekében $tmp_name = $_FILES['filename']['tmp_name']; $type = $_FILES['filename']['type']; $name = $_FILES['filename']['name']; $size = $_FILES['filename']['size']; // Itt az üzenet összeállítása következik $message = $from_fej."\r\n".$msg."\r\n"; // ha a vizsgálat igaz, akkor a fájl létezik if(file_exists($tmp_name)) { // megjegyzés a csatolt fájlról az üzenet végén $message .= 'Az üzenethez csatolt fájl: '.$name."\r\n"; // győződjön meg róla, hogy ez egy feltöltött fájlt, és nem egy rendszer fájl if(is_uploaded_file($tmp_name)) { // a fájlt megnyitása bináris olvasásra $file = fopen($tmp_name,'rb'); // a fájl tartalmának beolvasása egy változóba $data = fread($file,filesize($tmp_name)); // a fájl bezárása fclose($file); // adat kódolása, megfelelő hosszúságú sorokban $data = chunk_split(base64_encode($data)); } } //EZT A ZÁRÓJELET IDE // az üzenet fejlécének összeállítása $headers = $from.$Reply_to; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: multipart/mixed;\r\n"; $headers .= " boundary="{$mime_boundary}""; // Ezután fogjuk tovább építeni az üzenet szövegét vegye figyelembe, hogy be két vonal előtt a MIME határ, amikor használjuk $message .= "--{$mime_boundary}\n"."Content-Type: text/plain; charset="utf-8"\n"; $message .= "Content-Transfer-Encoding: 7bit\n\n"; $message .= $message."\n\n"; // Most majd be a határt jelzi kezdünk a mellékletet meg kell határozni a tartalom típusát, a fájl nevét, és a diszpozíció // egy mellékletet, majd hozzáadjuk a fájl tartalmát, és beállíthat egy másik határ azt jelzik, hogy a végén a fájl elérték $message .= "--{$mime_boundary}\n"; $message .= "Content-Type: {$type};\r\n"; $message .= " name="{$name}"\r\n"; $message .= "Content-Transfer-Encoding: base64\n\n"; $message .= $data . "\n\n"; $message .= "--{$mime_boundary}--\r\n"; // itt pedig az üzenet elküldése van if(@mail($to, $subject, $message, $headers)) { // sikeres küldés üzenetének összeállítása $siker .= "Köszönjük! A levelet sikeresen továbbítottuk!<br /><br />\r\n"; $siker .= "Hamarosan válaszolunk a megadott e-mail címre.<br /><br />\r\n"; $siker .= '<a href="javascript:void(0);" onclick="document.location.href='sendmail.php'">Új üzenet küldése</a><br />'."\r\n"; } // } //EZT A KOMMENTET PEDIG IDE } }
Még egyszer
Mutasd a teljes hozzászólást!

  • de azért tettem fel itt ezt a hülye kérdést hogy okos megoldást tudjak alkalmazni....

    Egy "okos megoldás", ha nem adod meg feltételként a melléklet megadását...
    Persze a kódod nem néztem, de logikailag a fenti javaslat a megoldás...
    Az az, nem kellene fő feltételként ezt megadni ->
    if(isset($_FILES) && (bool) $_FILES) { //itt van a küldés }
    Mutasd a teljes hozzászólást!
  • gondolom a dupla && jelet kell valamire kicserélni....
    Segitesz a tudatlannak megtalálni a fényt ha szépen megkérlek? :)
    Mutasd a teljes hozzászólást!
  • A küldės előtt ne is ellenőrizze az $_FILES tömböt a kódod.
    Mutasd a teljes hozzászólást!
  • Következőket probáltam
     if(isset($_FILES) {
    if((bool) $_FILES) {
    if(isset($_FILES) && (bool) $_FILES)  || empty($_FILES) {

    Egyik se sikerült lehet hogy valamit én csinálok nagyon szarul...
    Mutasd a teljes hozzászólást!
  • Mivel nem szeretnék a csatolt fájlod javításával foglalkozni, ezért csatolok egy mintát...
    Ezen egy kicsit kellene elmélkedni, majd átírni saját igény szerint (pl: nem egy iframe-be hívod be a köldő fájlt, megváltoztatod a design-t...stb)...
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Mivel nem figyeltem és a "kötelező csatolás" a kódomban is benne van, ezért
    A következőt módosítsd ->
    error_reporting(0); // a te mail címed, ahova a levelek menni fognak $to = "mail_cimed.hu"; //címzett e-mail $hiba = ""; $siker = ""; if(array_key_exists("_send", $_POST)) { // ellenőrző rutinok, hibaüzenetek $subject = ereg_replace("'", "'", $_POST['subject']); if($_POST['email'] == "") $hiba .= "Nem adtál meg email címet!<br />\r\n"; elseif(!preg_match("/^[[:alnum:]\-_\.]{1,}\@[[:alnum:]\-_\.]{1,}\.[[:alnum:]\-_\.]{1,}(\.[[:alnum:]\-_\.]{1,})*$/i",$_POST['email'])) $hiba .= "Érvénytelen email címet adott meg!<br/>\r\n"; elseif($_POST['name'] == "") $hiba .= "Nem adott meg nevet!<br/>\r\n"; elseif($subject == "") $hiba .= "Nem írta be az üzenetet tárgyát!<br />\r\n"; elseif($_POST['message'] == "") $hiba .= "Nem írt be üzenetet!<br />\r\n"; if($hiba == "") { $msg = ereg_replace("'", "'", $_POST['message']); $msg = ereg_replace('"', """, $msg); // egy fejszöveg, amely később felhasználható az üzenet kezdetekor $from_fej = 'Üzeneted érkezett '.stripslashes($_POST['name']).' részéről a(z) '.stripslashes($_POST['email'])." e-mail címről.\r\n"; // küldő cím és válasz cím $from = "From: ".$_POST['email']."\r\n"; $Reply_to = " Reply-to: ".$_POST['email']."\r\n"; // generálisan egy véletlenszerű stringet kell használni, mint határoló markert $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; // a fájl tárolására információk változókban a könnyebb hozzáférés érdekében $tmp_name = $_FILES['filename']['tmp_name']; $type = $_FILES['filename']['type']; $name = $_FILES['filename']['name']; $size = $_FILES['filename']['size']; // Itt az üzenet összeállítása következik $message = $from_fej."\r\n".$msg."\r\n"; // ha a vizsgálat igaz, akkor a fájl létezik if(file_exists($tmp_name)) { // megjegyzés a csatolt fájlról az üzenet végén $message .= 'Az üzenethez csatolt fájl: '.$name."\r\n"; // győződjön meg róla, hogy ez egy feltöltött fájlt, és nem egy rendszer fájl if(is_uploaded_file($tmp_name)) { // a fájlt megnyitása bináris olvasásra $file = fopen($tmp_name,'rb'); // a fájl tartalmának beolvasása egy változóba $data = fread($file,filesize($tmp_name)); // a fájl bezárása fclose($file); // adat kódolása, megfelelő hosszúságú sorokban $data = chunk_split(base64_encode($data)); } } //EZT A ZÁRÓJELET IDE // az üzenet fejlécének összeállítása $headers = $from.$Reply_to; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: multipart/mixed;\r\n"; $headers .= " boundary="{$mime_boundary}""; // Ezután fogjuk tovább építeni az üzenet szövegét vegye figyelembe, hogy be két vonal előtt a MIME határ, amikor használjuk $message .= "--{$mime_boundary}\n"."Content-Type: text/plain; charset="utf-8"\n"; $message .= "Content-Transfer-Encoding: 7bit\n\n"; $message .= $message."\n\n"; // Most majd be a határt jelzi kezdünk a mellékletet meg kell határozni a tartalom típusát, a fájl nevét, és a diszpozíció // egy mellékletet, majd hozzáadjuk a fájl tartalmát, és beállíthat egy másik határ azt jelzik, hogy a végén a fájl elérték $message .= "--{$mime_boundary}\n"; $message .= "Content-Type: {$type};\r\n"; $message .= " name="{$name}"\r\n"; $message .= "Content-Transfer-Encoding: base64\n\n"; $message .= $data . "\n\n"; $message .= "--{$mime_boundary}--\r\n"; // itt pedig az üzenet elküldése van if(@mail($to, $subject, $message, $headers)) { // sikeres küldés üzenetének összeállítása $siker .= "Köszönjük! A levelet sikeresen továbbítottuk!<br /><br />\r\n"; $siker .= "Hamarosan válaszolunk a megadott e-mail címre.<br /><br />\r\n"; $siker .= '<a href="javascript:void(0);" onclick="document.location.href='sendmail.php'">Új üzenet küldése</a><br />'."\r\n"; } // } //EZT A KOMMENTET PEDIG IDE } }
    Még egyszer
    Mutasd a teljes hozzászólást!
  • Az && az az "és" feltétel. 1*1=1. 1*0=0. 0*0=0
    A ||  az a "vagy" feltétel. 1+1=1. 1+0=1. 0+0=0.

    Így a legkönnyebb megmérteni, de ettől minden tanárnak görcse rándúl az arca és kiakad.
    Mutasd a teljes hozzászólást!
  • KÖszönöm szépen! Át tanulmányoztam beilesztettem müködik...
    Egyetlen szépséghibája a programnak az ha nem küldök semmit akkor is elküld egy noname.txt fáljt ami üres...
    Ha erre valaki tud egy egyszerü megoldást azt meghivom egy sörre!
    Mutasd a teljes hozzászólást!
  • Szívesen...
    ...ha nem küldök semmit...

    Változtasd meg a feltételrendszert és ha nincs csatolva fájl, akkor a fájl-feldolgozási rész ne fusson le és ez a sor ->
    $message .= $data . "\n\n";
    ne érvényesüljön...
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd