2013-06-29 88 views
-1

我想用我的php腳本發送表單數據和上傳的文件。當我嘗試發送郵件時,收到錯誤消息「上傳文件」。我創建的消息是用來查看用戶是否上傳了一個文件。php上傳的文件不會發送

代碼:

$error_fnamn = ''; 
$error_artistlink = ''; 
$error_email = ''; 
$error_enamn = ''; 
$error_downloadlinks = ''; 
$artistlink = ''; 
$downloadlinks = ''; 
$email = ''; 
$enamn = ''; 
$fnamn = ''; 
$data = ''; 
$formfield_data = ''; 
$streamlink = ''; 
$releasedate = ''; 
$error_data = ''; 
$formfield_steamlink = ''; 

############################################################## 
// FELMEDDELANDEN PHP 
// visar felmeddelanden när du testar dina script 
ini_set('display_errors', 1); 
// visar alla felmeddelanden men INTE "E_NOTICE" (standardvärdet i php.ini) 
// error_reporting(E_ALL^E_NOTICE); 
// visar alla felmeddelanden 
// error_reporting(E_ALL); 
//stäng av eventuella felrapporter 
//error_reporting(0); 
############################################################## 

// CSS-formatering av formulärfält om inget felmeddelande visas 
$formfield_fnamn = 'formfield'; 
$formfield_enamn = 'formfield'; 
$formfield_email = 'formfield'; 
$formfield_artistlink = 'formfield'; 
$formfield_streamlink = 'formfield'; 
$formfield_downloadlinks = 'formfield'; 
$formfield_releasedate = 'formfield'; 
// om submitknappen använts 
if(isset($_POST['submit'])){ 

// kontrollerar om magic_quotes_gpc är aktiverat 
if(get_magic_quotes_gpc()){ 
$email = stripslashes(trim($_POST["email"])); 
$fnamn = stripslashes(trim($_POST["artist"])); 
$enamn = stripslashes(trim($_POST["trackname"])); 
$artistlink = stripslashes(trim($_POST["artistlink"])); 
$streamlink = stripslashes(trim($_POST["streamlink"])); 
$downloadlinks = stripslashes(trim($_POST["downloadlinks"])); 
$releasedate = stripslashes(trim($_POST["releasedate"])); 
} 
else{ 
$email = $_POST["email"]; 
$fnamn = $_POST["artist"]; 
$enamn = $_POST["trackname"]; 
$artistlink = $_POST['artistlink']; 
$streamlink = $_POST['streamlink']; 
$downloadlinks = $_POST['downloadlinks']; 
$releasedate = $_POST['releasedate']; 
} 

######################################################################## 
// FELMEDDELANDEN - kontrollerar om formulärfält i ifyllda 
// anger en variabel som lagrar felmeddelanden 
$errors = array(); 

// kontrollera om ett Förnamn angivits 
if (empty($fnamn)) { 
// felmeddelandet (array) 
$errors[] = 'Ange ditt <strong>f&ouml;rnamn</strong>.'; 
// formulärfältet 
$error_fnamn = '<span class="error_text">*</span>'; 
$formfield_fnamn = 'error_formfield'; 
} 
// kontrollera om ett Efternamn angivits 
if (empty($enamn)) { 
// felmeddelandet (array) 
$errors[] = 'Ange ditt <strong>efternamn</strong>.'; 
// formulärfältet 
$error_enamn = '<span class="error_text">*</span>'; 
$formfield_enamn = 'error_formfield'; 
} 

// kontrollera om en E-postadress angivits 
if (empty($email)) { 
// felmeddelandet (array) 
$errors[] = 'Ange din <strong>e-postadress</strong>.'; 
// formulärfältet 
$error_email = '<span class="error_text">*</span>'; 
$formfield_email = 'error_formfield'; 
} 

if (empty($artistlink)) { 
// felmeddelandet (array) 
$errors[] = 'Ange din <strong>artistlink</strong>.'; 
// formulärfältet 
$error_artistlink = '<span class="error_text">*</span>'; 
$formfield_artistlink = 'error_formfield'; 
} 

if (empty($downloadlinks)) { 
// felmeddelandet (array) 
$errors[] = 'Ange din <strong>downloadlinks</strong>.'; 
// formulärfältet 
$error_downloadlinks = '<span class="error_text">*</span>'; 
$formfield_downloadlinks = 'error_formfield'; 
} 

if (empty($data)) { 
// felmeddelandet (array) 
$errors[] = 'Upload your file.'; 
// formulärfältet 
$error_data = '<span class="error_text">*</span>'; 
$formfield_data = 'error_formfield'; 
} 

// kontrollera om E-postadress är korrekt 
$emailcheck = trim($_POST["email"]); 
if(!preg_match("/^[a-z0-9\å\ä\ö._-][email protected][a-z0-9\å\ä\ö.-]+\.[a-z]{2,6}$/i", $emailcheck)) { 
// felmeddelandet (array) 
$errors[] = 'Du har angivit en felaktig <strong>e-postadress</strong>!'; 
// formulärfältet 
$error_email = '<span class="error_text">*</span>'; 
$formfield_email = 'error_formfield'; 
} 
// kontrollerar den (extra) maximala filstorleken 
foreach($_FILES as $userfile){ 
// sparar filinformation om temporärt filnamn, filtyp, filnamn och filstorlek 
$size = $userfile['size']; 

if ($size > $max_file_size) { 
// felmeddelandet (array) 
$errors[] = '<strong>Filstorleken</strong> p&aring; en bifogad fil ('.$size.' byte) &auml;r st&ouml;rre &auml;n till&aring;ten storlek ('.$max_file_size.' byte). V&auml;lj en fil med mindre storlek!'; 
} 
} 
######################################################################## 
// om felaktig information angivits visas felmeddelandet (array) 
if (count($errors)>0){ 
echo ' 
<div id="error">'; 
foreach($errors as $fel) 
echo $fel.'<br />'; 
echo '</div> 
'; 
} 

// formmail-scriptet anropas om inga felmeddelanden visas 
else { 

// hämtar datum, IP och tid 
$ip = $_SERVER["REMOTE_ADDR"]; 
$datum = date("Y-m-d"); 
$time_local = date('H:i'); 

######################################################################## 
// meddelandets innehåll 
$mailmessage = "". 

" 

------------------------------------------------ 
avsändare: ".$fnamn." ".$enamn." 
e-post: ".$email." 
artist links: ".$artistlink." 
stream links: ".$streamlink." 
download or purchase links: ".$downloadlinks." 
release date: ".$releasedate." 
datum: ".$datum." 
tid: ".$time_local." 
IP: ".$ip." 

"; 

######################################################################## 
// lagrar informationen i HEADERS 
$multipart_info = "This is a multi-part message in MIME format.\nIf you are reading this, consider upgrading your e-mail client to a MIME-compatible client.\n"; 
$boundary = md5(uniqid(time())); 
$headers = "From: $email \r\n"; 
$headers .= 'MIME-Version: 1.0' ."\n"; 
$headers .= 'Content-Type: multipart/mixed; boundary="'.$boundary .'"' . "\n\n"; 
$headers .= $multipart_info . "\n"; 
// Infogar en gräns (boundary) 
$headers .= '--'.$boundary."\n"; 
// Kodning för textinnehåll 
$headers .= 'Content-Type: text/plain; charset=ISO-8859-1' ."\n"; 
$headers .= 'Content-Transfer-Encoding: 7bit'. "\n\n"; 
// Infogar meddelandets textinnehåll 
$headers .= $mailmessage . "\n"; 
// START slinga för att bifoga flera filer 
foreach($_FILES as $userfile){ 
// sparar filinformation om temporärt filnamn, filtyp, filnamn och filstorlek 
$tmp_name = $userfile['tmp_name']; 
$type = $userfile['type']; 
$name = $userfile['name']; 
$size = $userfile['size']; 

// kontrollerar att filen laddats upp 
if (file_exists($tmp_name)){ 
// kontrollerar att det är den uppladdade filen som lagrats i variabeln $tmp_name 
if(is_uploaded_file($tmp_name)){ 
// öppnar filen för att läsas binärt 
$file = fopen($tmp_name,'rb'); 
// hämtar filinnehållet till en variabel 
$data = fread($file, filesize($tmp_name)); 
// stänger filen 
fclose($file); 
// chunk_split — delar en sträng i mindre bitar för att sedan konvertaras till base64_encode 
// base64_encode - kodar innehållet med 7 bitars kod stället för 8 bitars kod 
// Används för att transportera data genom olika system där alla inte använder 8 bitars kod som tex olika mailklienter 
$data = chunk_split(base64_encode($data)); 
} 
// Infogar en gräns (boundary) 
$headers .= '--'.$boundary."\n"; 
$headers .= 'Content-Type: '.$type.'; name="'.$name.'"' ."\n"; 
// Anger kodning för den bifogade filen 
$headers .= 'Content-Transfer-Encoding: base64'. "\n"; 
// Anger att en bifogad fil finns 
$headers .= 'Content-Disposition: attachment; filename="'.$name.'"' ."\n\n"; 
// Infogar filen uppdelad i mindre bitar med chunk_split och base64_encode 
$headers .= $data. "\n\n"; 
} 
} // SLUT slinga för att bifoga flera filer 
// Infogar en gräns (boundary) 
//$headers .= '--'.$boundary."\n"; 
######################################################################## 

// om meddelandefältet för avsändarens e-post inte är tomt skickas meddelandet 
if (!empty($_POST["email"])) { 
// Mailfunktionen som skickar meddelandet 
$send = mail($to, $subject, '', $headers); 

if ($send) { 
echo ' 
<div id="confirmation"> 
<h1>Tack '.$fnamn.'!</h1> 
<p>Ditt meddelande enligt nedan har skickats till oss. </p>'; 
// Om en fil bifogats visas namn och storlek på filen 
foreach($_FILES as $userfile){ 
if(!empty($userfile['name'])) { 
echo 'Bifogad fil: '.$userfile['name'].' ('.$userfile['size'].' byte)'; 
echo '<br />'; 
} 
} 
echo '</div>'; 
} 

else { 
echo "Det gick inte att skicka ditt meddelande. <br /> 
Gå tillbaka och prova igen!"; 
} 
} 
} 

} 
ob_end_flush(); 

if(!isset($_POST['submit']) || (count($errors)>0)){ 
// FORMULÄR START 
echo ' 
<form action="" method="post" enctype="multipart/form-data" name="kontaktform" id="kontaktform"> 
<fieldset style="width: 500px;"> 
<legend>Submit your track!</legend><br /> 
<label for="artist">'.$error_fnamn.'Artist Name:</label><br /> 
<input name="artist" type="text" class="'.$formfield_fnamn.'" id="artist" size="30" value="'.$fnamn.'" /><br /> 
<label for="trackname">'.$error_enamn.'Track Name:</label><br /> 
<input name="trackname" type="text" class="'.$formfield_enamn.'" id="trackname" size="40" value="'.$enamn.'" /><br /> 
<label for="email">'.$error_email.'E-mail:</label><br /> 
<input name="email" type="text" class="'.$formfield_email.'" id="artistlink" size="40" value="'.$email.'" /><br /> 
<label for="artistlink">'.$error_artistlink.'Artist Link:</label><br /> 
<input name="artistlink" type="text" class="'.$formfield_artistlink.'" id="artistlink" size="40" value="'.$artistlink.'" /><br /> 
<label for="streamlink">Stream Link (if applicable):</label><br /> 
<input name="streamlink" type="text" class="'.$formfield_streamlink.'" id="streamlink" size="40" value="'.$streamlink.'" /><br /> 
<label for="releasaedate">Release Date (if applicable):</label><br /> 
<input name="releasedate" type="text" class="'.$formfield_releasedate.'" id="releasedate" size="40" value="'.$releasedate.'" /><br /> 
<label for="downloadlinks">'.$error_downloadlinks.'Purchase or Download Links:</label><br /> 
<textarea name="downloadlinks" id="downloadlinks" style="width: 450px; height: 50px; padding: 5px;" 
class="'.$formfield_downloadlinks.'" ">'.$downloadlinks.'</textarea><br /> 
<br /> 
<label for="filenamn">'.$error_data.'Bild eller fil som ska bifogas meddelandet:</label><br /> 
<input type="file" name="filename1"'.$formfield_data.'" id="filename1" size="60"'.$data.'" /><br /> 

做任何你有任何想法可能是什麼問題呢?

問候, 亞當

回答

0

嘗試在你的腳本的頂部添加$error_fnamn = '';。 的VAR並不總是初始化(它是,但在實際if

,如果它的工作原理,對於所有的瓦爾:)

+0

謝謝!它的工作:) –

+0

不客氣:)請不要忘記接受答案,以幫助未來的遊客 – Pascamel

0

的通知,也不會破壞你的代碼做同樣的,它如果出現您在使用變量之前不使用變量而使用變量。例如,這將顯示的通知(但是要打印一個空字符串):

echo $a; 

雖然這不是:

$a = 10; 
echo $a; 

所以,你使用你看到的變量,而第1代入他們的值。

1

變量只有在提交已過帳時纔會初始化。 (IE)在此塊

if(isset($_POST['submit'])){ 

    } 

但是,你正在使用它之前提交張貼。

只需初始化腳本頂部的所有變量,它應該可以正常工作。