webForumDet fria alternativet

Problem med nedladdning

7 svar · 500 visningar · startad av bortglömd

bortglömdMedlem sedan mars 200633 inlägg
#1

Hejhopp!
Jag har ett problem som gör att man ej kan ladda hem filer med ett mellan rum, åäö i filnamnet för han klarar bara av att läsa tills något av detta uppenbararar sig i namnet, detta är jobbigt problem som jag inte har hittat någonlösning på men hoppas att ni kan hjälpa mig med, antar att det är något fel på mina headers...
det som händer är om man t.ex. har ett fil som heter kalle gick på stan så får man upp nedladdningsrutan med kalle, han lyckas inte hitta vad det är för filtyp lr något... hoppas att någon har den hjälp jag behöver...

 session_start(); // Alltid överst på sidan 
// ta fram user information.
 
error_reporting(E_ALL);
ini_set("display_errors", "1");
 
$id = $_SESSION['sess_id'];
 
// Kolla om inloggad = sessionen satt 
if (!isset($_SESSION['sess_user'])) {
   header("Location: index.php");
   exit;
}
 
include "conn.php"; // Databasanslutningen 
 
//Delete function
   if (isset($_GET['delete_fileid']))
   {
      $fid = intval($_GET["delete_fileid"]);
 
      $sqlA = mysql_query("SELECT name FROM uploadfiles WHERE fileid = '{$fid}'  AND id = {$_SESSION['sess_id']}") or die("Error!");
      while ($row = mysql_fetch_array($sqlA))
      {
         //radera filen
      unlink("/uploaded/".$id."/".$row["name"]);//kolla att du har korrekt adress annars får du ha en absolut sökväg
      }
 
      mysql_query("DELETE FROM uploadfiles WHERE fileid = '{$fid}' LIMIT 1") or die("Error!");
   if (mysql_affected_rows() > 0)
   header("Location: uploaded.php?msg=1");
}
 
//Download function
if(isset($_GET['download_fileid'])) {
 
   $sql = "SELECT * FROM uploadfiles WHERE fileid = '$_GET[download_fileid]' AND id = {$_SESSION['sess_id']}";
   $result = mysql_query($sql) or die (mysql_error());
    
   extract(mysql_fetch_assoc($result));
     
   $size = mysql_result($result, 0, "size");  
   header("Cache-Control: private");
   header("Content-Type: application/octet-stream");
   header("Content-Length: $size");
   header("Content-Disposition: attachment; filename=$name");
 
   readfile("/uploaded/$id/$name");
   exit();
 
}
PeddaMedlem sedan juni 20004 880 inlägg
#2

Välkommen till wF.

Det enda felet jag kan se är i din selectsats att du saknar enkelfnuttar i $_GET variabeln

$sql = "SELECT * FROM uploadfiles WHERE fileid = '$_GET[download_fileid]' AND id = {$_SESSION['sess_id']}";

Ska ju vara $_GET['download_fileid'], men det borde ju ha gett ett helt annat felmeddelande.

bortglömdMedlem sedan mars 200633 inlägg
#3

hmm, testade att byta ut till $_GET['download_fileid'] men det ger samma resultat..
du har ingen annan idé på vad felet kan vara?

bortglömdMedlem sedan mars 200633 inlägg
#4

jag har kommit så långt att jag har upptäckt att man bara får felet i firefox, använder du opera eller ie så fungerar det som det ska, vad kan detta bero på?

stevenetMedlem sedan juni 2000985 inlägg
#5

Testat?

header("Content-Disposition: attachment; filename=\"$name\"");
bortglömdMedlem sedan mars 200633 inlägg
#6

okej... tackar stevenet :) nu fungerar det... men ni kanske kan hjälpa mig med ytterligare en sak?
Det är så att jag vill inte att användarna ska kunna ladda ned / radera andra användares uppladdade filer, ladda ned fungerar inte som det är nu för då får man istället upp att ladda ned sidan uploaded.php som sidan ligger på och sen kan man faktiskt radera andra användares bilder genom att byta adressen i adressfönstret till delete_fileid1070 lr vad nu filen heter... så vill jag inte ha det...
Det jag vill när det gäller både download och delete är att man ska få ett medelande att man inte har tillgång till den filen.. ni kan ju se hur kontrollen fungerar på download för där har jag ju lyckats att spärra men inte skriva ut något medelande om att man ej har tillgång till den filen... hoppas att ni förstår vad jag menar... vill alltså ha en kontroll som kontrollerar att detta stämmer $sql = "SELECT * FROM uploadfiles WHERE fileid = '$_GET[download_fileid]' AND id = {$_SESSION['sess_id']}"; och sedan skriver ut ett medelande att man ej har tillgång till filen om inte allt detta överensstämmer med den användaren som är inloggad...

stevenetMedlem sedan juni 2000985 inlägg
#7

Spara uppladdarens användarid, $_SESSION['sess_user'], i ett fält i tabellen uploadfiles. Sedan jämför du det nya fältet med $_SESSION['sess_user'] varje gång någon vill ta bort en fil.

bortglömdMedlem sedan mars 200633 inlägg
#8

jag sparar redan hans användar id i uploadloadfiles men den är jämförelsen jag inte har fått att fungera så hoppades på att någon kunde visa det...

Genererad på 371 ms · cache AV · v20260730165559-full.f96bc7eb