PHP validation med uppladdning av fil
God dag!
Jag försöker använda mitt php script för att skicka iväg ett email med form data och den uppladdade filen. Jag får felmeddelandet "Upload your file" när jag klickar på submit knappen.
Koden:
$error_fnamn = '';
$error_artistlink = '';
$error_email = '';
$error_enamn = '';
$error_downloadlinks = '';
$artistlink = '';
$downloadlinks = '';
$email = '';
$enamn = '';
$fnamn = '';
$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';
$formfield_data = '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ö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å en bifogad fil ('.$size.' byte) är större än tillåten storlek ('.$max_file_size.' byte). Vä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 />
</label>
Någon som vet var felet kan vara?