webForumDet fria alternativet

skicka vidare efter nedladdning

4 svar · 398 visningar · startad av Webslave

WebslaveMedlem sedan maj 2002647 inlägg
#1

Hepp! Nu är jag igång igen.

Har ju precis fått ordning hur jag ska gå tillväga för att ladda ner en låt från servern. Nu skulle jag vilja komma till en tacksida efter nedladdningen har påbörjat. Scriptet ser ut såhär:

$mp3_file = "../TESTING-MUSIK/mp3/".$row['trackFileName'];
	
header("Content-Type: audio/mpeg3");
header("Content-Disposition: attachment;filename=".basename($mp3_file));
header("Content-Length: ". filesize($mp3_file));
	
$fp = fopen($mp3_file, "rb");
fpassthru($fp);

Har testat med att lägga till header("location..."); i slutet av den men det går ju inte för då laddar den inte ner något utan går bara förbi till header("location...");, har kollat runt men hittar inget alls som passar. Någon som har några idéer här för jag har letat arslet av mig :)

PeddaMedlem sedan juni 20006 032 inlägg
#2

Man kan nog inte känna av om nedladdningen har startat, men du kan ju skicka vidare efter x antal sekunder.

I detta exempel efter 5 sekunder.
<meta http-equiv="Refresh" content="5;URL=nästasida.php">

WebslaveMedlem sedan maj 2002647 inlägg
#3

Alltså jag kan ju inte ha vanlig html i samma fil som skickar filen till webbläsaren som jag har förstått så den där borde väll inte hjälpa? Jag testade och det hände ingenting. Finns det någon som har någon bra idé på hur man kanske kan skicka formulärdatan till ett nytt fönster som hämtar filen och stängs igen (ller kanske inte öppnas?) och så kan man ju lägga in lite javascript som flyttar en onSubmit? Eller det kanske är helt galet det med :D

WebslaveMedlem sedan maj 2002647 inlägg
#4

Fuskade till mig en lösning. Jag har lagt nerladdningsformuläret i ett lager och tack sidan i ett annat och så fort man klickar för att ladda ner så döljer jag formuäret och visar tacksidan med en "stäng popup" länk... får duga om ingen annan har en bra idé :)

WebslaveMedlem sedan maj 2002647 inlägg
#5

Nu ljög jag så att det rykte om det :D Det funkar bra i mozilla men inte i IE för där så blir det skit om jag använder enter för att submitta formuläret, jag skickas inte tillbaka men om jag klickar direkt på knappen funkar det bra... men som sagt i mozilla går det bra.

För att skicka:

<script type="text/javascript">
function toogleDiv(divElm){
	var divNums = 2;
	var objDivToToggle = document.getElementById(divElm);
	for (i=1; i<divNums+1; i++){
		document.getElementById('div'+ i).style.display = 'none';
	}
	objDivToToggle.style.display = '';	
}
</script>
<style type="text/css">
.div-content {
	width: 290px;
	height: 140px;
	background: #CCCCCC;
	text-align: center;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
	font-weight: bold;
	color: #000000;
	text-decoration: none;
	margin: 5px;
}
body {
	margin: 0px;
	padding: 0px;
	background-color: #CCCCCC;
}
.error {color: #FF0000}
.highlight {color: #666666}
form {
	margin: 0px;
	padding: 0px;
}
</style>

</head>
<body onContextMenu="return false;" onSelectStart="return false;">
<div id="div1" class="div-content">
Skicka ett sms med koden &quot;<span class="highlight">mim mp3</span>&quot; till <span class="highlight">66666</span>. Fyll i koden som du f&aring;r tillbaka i f&auml;tet nedan och klicka p&aring; validera
 f&ouml;r att starta nerladdningen av &quot;<?PHP echo $_REQUEST['trackName'];?>&quot;.
<?PHP
if(isset($_GET['error'])){
	echo "<br \>&nbsp;<br \><span class=\"error\">Felaktig kod!</span>";
}
?><br \>&nbsp;
<form action="download_track.php" method="post" onSubmit="toogleDiv('div2');">
 
Kod: 
  <input name="kod" id="kod" type="text" size="10" maxlength="6">
   &nbsp;
   <input type="submit" name="submit" value="B&ouml;rja nerladdning">
  <br>&nbsp;
<br>
<input name="trackId" type="hidden" id="trackId" value="<?PHP echo $_REQUEST['trackId'];?>">
<input name="trackName" type="hidden" id="trackName" value="<?PHP echo $_REQUEST['trackName'];?>">
</form>
</div>
<div id="div2" class="div-content" style="display:none;">
  <p>Tack f&ouml;r att du lyssnar p&aring; oss!<br></p>
  <p><a href="javascript:window.close();">St&auml;ng f&ouml;nstret</a>   </p>
</div>

För att behandla och skicka tillbaka vid eventuellt fel:

<?PHP
// Kollar så att det kommer en förfrågan om en låt
if(isset($_POST['trackId']) AND !($_POST['trackId']=="")){

	(en massa kod o grejjs)
	
			// Tvingar förfrågan om att ladda ner filen
			$mp3_file = "../TESTING-MUSIK/mp3/".$row['trackFileName'];
		
			header("Content-Type: application/octetstream; name=".basename($mp3_file));
			header("Content-Disposition: attachment;filename=".basename($mp3_file));
			header("Content-Length: ". filesize($mp3_file));
			
			$fp = fopen($mp3_file, "rb");
			fpassthru($fp);
	
			// Stänger kopplingen till databasen
			mysql_close($connect);
			exit;
			
		}	 

		// Kod fanns ej i DB, skicka tillbaka
		else{
			header("Location: validate_code.php?error=code&trackName=".$_POST['trackName']."&trackId=".$_POST['trackId']);
			exit;
		}
	}
}
else{	
	// Om ingen låt förfrågas så skickas man till startsidan
	header("Location: http://www.adressen.com/");
}
?>

Någon som har en idé om vad som kan krångla? Kanske är mer javascript-relaterat nu men om någon vet nått liknande som funkar i mozilla men inte i explorer så dela gärna med er så man kan testa lite.

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)