webForumDet fria alternativet

Ladda hem/läsa filer

PHP

5 svar · 438 visningar · startad av Tulork

Medlem sedan aug. 2004903 inlägg
Frågan#1

När väl mitt upload skript funkar som det ska, så ska användarna kunna ladda hem den filen som de har tillåtelse till.

Så här kommer databasen se ut

Fil tablen

[B]Filename[/B] [B]RefID[/B]
fil.zip   88
obo.doc   91

RefID är det samma som ID i members tablen.

Filerna ligger alla i samma mapp på servern, men nu ska jag hämta/länka filerna till rätt användare, och rätt användare får jag genom att matcha RefID mot sessions ID't på den som loggar in.

Hur löser man detta smidigast, jag måste ju matcha ID't i RefIDi tablen UserFiles mot ID i tablen members, sen matcha filnamnet i UserFiles mot filerna i mappen Download och sen länka resultatet, annars "du har inga filer att ladda ner".

Medlem sedan aug. 2004903 inlägg
#2

jag tänker mig något åt detta hållet..men jag vet inte riktigt

$query = "SELECT filename FROM UserFiles WHERE id = ".$_SESSION['sess_id']."";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

$downdir = mappen med filer;
någonting ("$_GET['filename'] från $downdir
i en loop i och med att det kan vara flera filer.

länka till filen....
Medlem sedan aug. 2004903 inlägg
#3

Jag har nu trixat lite med detta, och så här långt har jag komme

//Mappen med filerna
$upload_dir = 'download';

//#####################################################
//Hämtar filnamnet som valdes vid inläggning av filen##
//#####################################################
$query2 = "SELECT filename FROM UserFiles WHERE RefID = ".$_SESSION['sess_id']."";
$result2 = mysql_query($query2) or die('Query failed: ' . mysql_error());
echo "<br>";
while ($line = mysql_fetch_array($result2, MYSQL_ASSOC)) {
   echo "\t<tr>\n";
   foreach ($line as $col_value) {
       echo "\t\t<td>$col_value</td>\n";
   }
   echo "\t</tr>\n";
}
echo "</table>\n";

//################################################
//Hämtar ID't som valdes vid inläggning av filen##
//################################################
$query3 = "SELECT RefID FROM UserFiles WHERE RefID = ".$_SESSION['sess_id']."";
$result3 = mysql_query($query3) or die('Query failed: ' . mysql_error());

echo "<br>";
while ($line = mysql_fetch_array($result3, MYSQL_ASSOC)) {
   echo "\t<tr>\n";
   foreach ($line as $col_value) {
       echo "\t\t<td>$col_value</td>\n";
   }
   echo "\t</tr>\n";
}
echo "</table>\n";

Suttit i en timme nu och letat efter funktioner där jag kan matcha filnamnen i databasen mot filnamnen i $upload_dir utan framgång. Hur ska jag på bästa sätt matcha och länka?

EDIT*

Nu har jag inläsningen och länkningen, men hur fixar jag det så att jag Bara visar/länkar filerna som har filnamnen jag hämtat i SELECT filename?

//Mappen med filerna
$upload_dir = 'download';

//#####################################################
//Hämtar filnamnet som valdes vid inläggning av filen##
//#####################################################
$query2 = "SELECT filename FROM UserFiles WHERE RefID = ".$_SESSION['sess_id']."";
$result2 = mysql_query($query2) or die('Query failed: ' . mysql_error());
echo "<br>";
while ($line2 = mysql_fetch_array($result2, MYSQL_ASSOC)) {
   echo "\t<tr>\n";
   foreach ($line as $col_value) {
       echo "\t\t<td>$col_value</td>\n";
   }
   echo "\t</tr>\n";
}
echo "</table>\n";

/*
//################################################
//Hämtar ID't som valdes vid inläggning av filen##
//################################################
$query3 = "SELECT RefID FROM UserFiles WHERE RefID = ".$_SESSION['sess_id']."";
$result3 = mysql_query($query3) or die('Query failed: ' . mysql_error());

echo "<br>";
while ($line = mysql_fetch_array($result3, MYSQL_ASSOC)) {
   echo "\t<tr>\n";
   foreach ($line as $col_value) {
       echo "\t\t<td>$col_value</td>\n";
   }
   echo "\t</tr>\n";
}
echo "</table>\n";
*/

$dir_handle = @opendir($upload_dir) or die("Unable to open $upload_dir");
while ($file = readdir($dir_handle)) {
if(!is_dir($file)) {
//$filesize = filesize($upload_dir.$file);
echo "Name: $file<br>>Download: <a href=\"$upload_dir/$file\">Click here!</a><br>------<br>";
}
}
closedir($dir_handle);
Medlem sedan mars 2005232 inlägg
#4

Kanske följande kan vara till någon nytta?
Du borde med hjälp utav denna kod kunna skapa en array med alla filer i en mapp, som du sedan kan jämföra med databasen.

$dh = opendir("din_mapp/");

if ($dh) {
    while ($file=readdir($dh)) {

			if($file=="." || $file=="..") {
				echo "";
			}
			else {
			
            	echo "<a href='?" .$file. "'>&raquo; " .$file. "</a><br />";
		        }
    }
    closedir($dh);
}
Medlem sedan aug. 2004903 inlägg
#5

hehe, det funkar typ nu, problemet är att den inte visar rätt fil :D

$dir_handle = @opendir($upload_dir) or die("Unable to open $upload_dir");
while ($file = readdir($dir_handle)) {
if($file == $line2) {
//$filesize = filesize($upload_dir.$file);
echo "Name:$file<br>>Download: <a href=\"$upload_dir/$file\">Click here!</a><br>------<br>";
}
}
closedir($dir_handle);

och jag har ingen aning om varför den inte visar rätt fill... databasen ser ut så här

Table UserFiles

filename refid
filen.zip 88

och jag loggar in med den användare som har ID 88.. ändå visas fel fil.

Medlem sedan aug. 2004903 inlägg
#6

its working :) tack för hjälpen.. den slutgiltiga koden blev

 $dir_handle = @opendir($upload_dir) or die("Unable to open $upload_dir");
while ($file = readdir($dir_handle)) {
if($file == $col_value) {
//$filesize = filesize($upload_dir.$file);
echo "Name:$file<br>>Download: <a href=\"$upload_dir/$file\">Click here!</a><br>------<br>";
}
}
closedir($dir_handle);
257 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)