Jag har en form som lagrar filerna på en plats och filnamnen i tabellen i DB.
Sen hämtar jag filen via <a href=\"{$rad['fil']} och då blir det ju en helt vanlig länk.
Men, så tänkte jag att jag använder headers för att tvinga nedladdningen och då la jag till get_file.php
Ok, lova att du sätter dig in i koden för att förstå den. Inte bara klippa och klistra ;)
nånfil.php
<?php
include "conn.php";
$sql = mysql_query("SELECT * FROM musik ORDER BY datum DESC LIMIT 50");
while ($rad = mysql_fetch_array($sql)) {
$id = $rad['id'];
$fil = $rad['fil'];
$datum = $rad['datum'];
/* I raden nedan så används $type ... den variabeln verkar inte finnas enligt koden ... men jag lät den vara med i alla fall :D */
echo '<img src="images/' . $type . '.gif"> <a href="get_file.php?file=' . $fil . '">Ladda ner</a>";
echo " - ";
echo $datum;
echo "<br>";
}
?>
nånfil.php blev lite konstig tyvärr. Den hämtade inte ut några fil namn och så hämtade den bara ut en fil, så jag provade med den gamla koden, vilket jag tror inte var tanken med det hela faktikst. För jag misstänker väl att det är i min kod i den som felet ligger.
get_file.php
gick den direkt in i else-satsen (file not found)
Hahaha ja jösses du är en klippa!!!! :) :) Det funkar sååååå kanon!
Alltså jag har suttit med detta i två dagar och inte fattat ett smack vad som händer!
Hmmmmm...sätta sig in i koden ja :) Hehehe, skall jag vara ärlig....hur gjorde du? :P
Du får jätte gärna förklara för mig :)
.$type. som du frågade om innan är att jag hade tänkt att ha en specifik ikon vid den specifika bilden. Alltså .gif en ikon för det och .jpg en ikon för det.
Tjo....du undrar inte hur glad du gjorde mig precis!
Tack!!!!!!!!!!!!
basename() plockar ut själva filnamnsdelen ur en sökväg. Jag la in det i koden för att förhindra att någon ska kunna ladda ner vilken fil som helst från din server. Tänk t.ex. om någon anger get_file.php?file=../index.php, scriptet skulle då låta besökaren ladda ner filen ./bilder/../index.php, dvs din index-fil, och det är nog inte önskvärt.
Manualen är förresten en ypperlig källa till kunskap när man programmerar PHP. Vilken funktion du än är osäker på så skriver du bara adressen http://www.php.net/funktionsnamn i adressfältet i din webbläsare så kan du läsa om funktionen, vilka parametrar den tar och vad den returnerar tillsammans med några exempel på hur den används.
Det som är farligt är att utgå ifrån att bara snällt data kommer in till scriptet.
All data som besökaren på något sätt kan manipulera, oavsett om det är via GET, POST eller COOKIE, så måste du validera att datat är det du förväntar dig. Scriptet blir alltså inte farligt bara för att du inte använder basename(), men du måste kontrollera och tvätta bort sånt som kan vara farligt.
Googla t.ex. på SQL injection så kommer du finna ganska mycket som är läsvärt.
Har försökt med manualens hjälp och lite snodd kod från andra sidor att få till min variabel $type som är tänkt att visa en specifik bild för gif, en för jpg....etc
Men, det blev inte riktigt som jag hade tänkt mig hahaha
jag tänkte öppna mappen som filerna ligger
$dir = opendir("bilder/");
Så här skrevs det i manualen att man var tvungen till att göra med readdir()
while (false !== ($files = readdir($dir))) {
Listar alla filer och filtyper
list($files, $type) = explode(" ", $files);
Skriver ut bilderna för de olika filtyperna
echo '<img src="images/icon'.$type.'.gif"><br>';
Avslutar och stänger
}
closedir($dir);
Så långt funkar det (om jag gör det utan min andra kod)....hmmm :r
Så när jag lägga ihop mina två skript:
<?php
include "conn.php";
$sql = mysql_query("SELECT * FROM musik ORDER BY datum DESC LIMIT 50");
while ($rad = mysql_fetch_array($sql))
{
$id = $rad['id'];
$fil = $rad['fil'];
$datum = $rad['datum'];
$dir = opendir("bilder/");
while (false !== ($files = readdir($dir))) {
list($files, $type) = explode(" ", $files);
echo("<img src=\"images/icon'.$type.'.gif\"> <a href=\"get_file.php?file={$rad['fil']}\">Ladda ner</a>");
echo(" - ");
echo($rad['datum']);
echo(" - ");
echo($rad['fil']);
echo("<br>");
}
}
closedir($dir);
?>
Så listar den ut alla filerna 20 gånger utan bilder.
Jag misstänker att jag inte gjort rätt hahahaha :)
Hahahaha :)
Jo, att man öppnar mappen bilder och läser av vilka filtyper som finns i mappen.
Sen var tanken att den "skriver ut" och visar en ikon för varje post och om det är en gif-fil så visas ikonen icongif.gif, och om det är en jpg-fil så visas ikonen iconjpg.gif.
Där av min konstiga $type