php上传的文件不会发送

时间:2013-06-29 00:47:47

标签: 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\å\ä\ö._-]+@[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 />

你们有谁知道可能是什么问题?

此致 亚当

3 个答案:

答案 0 :(得分:1)

仅在发布提交时才会初始化变量。 (即)在这个块中

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

   }

但是您在发布提交之前使用它。

只需初始化脚本顶部的所有变量,它应该可以正常工作。

答案 1 :(得分:0)

尝试在脚本顶部添加$error_fnamn = '';。 var并不总是被初始化(它是,但实际上是if

如果有效,对所有变量做同样的事情:)

答案 2 :(得分:0)

通知不会破坏您的代码,如果您在使用变量之前没有为其赋值,则会显示该变量。例如,这将显示通知(但打印一个空字符串):

echo $a;

虽然这不是:

$a = 10;
echo $a;

因此,您使用的是您看到的所有变量,而不是先为它们赋值。