webForumDet fria alternativet

Problem med att loopa ut

8 svar · 274 visningar · startad av Tulork

TulorkMedlem sedan aug. 2004903 inlägg
#1
//Mappen med filerna
$upload_dir = 'download';
//Hämtar och Visar de tillgängliga filerna
$dir_handle = opendir($upload_dir) or die("Unable to open $upload_dir");
if ($dir_handle){
	while ($file = readdir($dir_handle)) {
		if($file == $col_value) {
			//$filesize = filesize($upload_dir.$file);
			echo "<a href=\"$upload_dir/$file\">$file</a><br>";

} 		
}

closedir($dir_handle);
}

Har lite problem att ersätta if satsen som matchar filerna mot filnamnen i databasen, vill ju gärna kunna visa alla filer som tillhör användaren.

emissionMedlem sedan dec. 19996 721 inlägg
#2

Berätta gärna lite mer. Om filnamnen finns lagrade i databasen finns det ju ingen anledning att låta filsystemet lista upp dem.

TulorkMedlem sedan aug. 2004903 inlägg
#3

filnamnet finns i databasen..men jaha, hur skulle jag annars göra? I övrigt, kan inte du/någon visa hur jag loopar ut dem ändå?

TulorkMedlem sedan aug. 2004903 inlägg
#4

Så här ser hela scriptet ut, tanken är att jag bara ska länka filer åt de användarna jag valt i för väg när jag uploadade

<?php
ob_start();
session_start();
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
  header("Location: index.php");
  exit;
}
if (isset($_GET['logout'])){
  session_unset();
  session_destroy();
  header("Location: index.php");
  exit;
}
?>
<html>
<head>
<link rel=StyleSheet href="setts/style.css" TYPE="text/css">
</head>
<body class="back">
<?php
include "conn.php"; // Databasanslutningen

// Performing SQL query sh
$query = "SELECT user FROM $mem_table WHERE id = ".$_SESSION['sess_id']."";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

// Printing results in HTML
echo "<p><strong>Välkommen</strong><p>";
//echo "$_SESSION['sess_userlevel'];";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
   echo "\t<tr>\n";
   foreach ($line as $col_value) {
       echo "\t\t<td>$col_value</td>\n<br><br>";
   }
   echo "\t</tr>\n";
//echo "test $sess_userlevel";
}
echo "</table>\n";
// $query = mysql_query("SELECT id FROM UserFiles WHERE refID = ".$_SESSION['sess_id']."");
//while ($pic = mysql_fetch_array($query)){
 // echo "<a href=\"bild.php?Id=".$pic['id']."\">mmmm</a>";
//} 
// Free resultset
//mysql_free_result($result);

//---------------------------------------------------------------------------------------------------------
?>
<?
echo "<p><strong>Dina filer</strong><p>";

//#####################################################
//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 ($line2 as $col_value) {
 //      echo "\t\t<td>$col_value</td>\n";
   }
  // echo "\t</tr>\n";
}
//echo "</table>\n";
//echo "<br>";
//echo "<br>";

//Mappen med filerna
$upload_dir = 'download';
//Hämtar och Visar de tillgängliga filerna
$dir_handle = opendir($upload_dir) or die("Unable to open $upload_dir");
if ($dir_handle){
	while ($file = readdir($dir_handle)) {
		if($file == $col_value) {
			//$filesize = filesize($upload_dir.$file);
			echo "<a href=\"$upload_dir/$file\">$file</a><br>";

}	
}

}closedir($dir_handle);

ob_end_flush();
?>
<?php
echo "<br><a href=\"index.php?logout=\">Logga ut</a>\n<br><br>";
?>
<a href="admin.php">Tillbaka </a><br><br>
</body>
</html>
DufferMedlem sedan mars 2003429 inlägg
#5

Som ovan talare sagt så är det väl dumt att gå igenom mappen med filer eftersom de redan finns i databasen där du hämtar filnamnen till en/flera specifik/a användare.

din if-sats: if($file == $col_value) kan endast bli true en gång (om äns det?) eftersom den sätts i en loop innan som spinner igenom utan att du gör något, det är ju inte direkt så att $col_value är en array()...

Om du vill använda din ganska otaktiska teknik som ovan är det bättre du sparar alla filnamnen i en array och kollar mot den om den filen du vill visa (if($file == $col_value)) är med i den.

Mitt förslag är att du bara helt enkelt hämtar filnamnen ur databasen till den eller de användare du vill ha

sen kör du:

while($resultRow = mysql_fetch_array($dinSqlSats) {
// För lite extra säkerhet så kollar vi att filen finns i verkligheten också
if(file_exists($resultRow['fileName'])
echo "<a href='$upload_dir/".$resultRow['fileName']."'>".$resultRow['fileName']."</a>";
}

Det där grejjar du fint ;-) komihåg att min kod ovan inte är plug n play utan du får ändra variablerna så det passar din databas.

Mvh

TulorkMedlem sedan aug. 2004903 inlägg
#6

ska jag vara ärlig så har jag inte den blekaste hur jag loopar ut alla rätta filnamn med samma RefID och sparar dem i en array...PHP är inte mitt "native" kodnings språk..skiljer sig inte så mkt va, men vissa saker är ??? för mig.. men det du/ni säger låter väldigt vettigt och så var väl tanken från början..

DufferMedlem sedan mars 2003429 inlägg
#7

Men skit i att stoppa det i en ny array, kör på mitt sista förslag, är dumt att lagra något i en till array när det redan finns i ett mysql resultat ;-)

Jag menar har du hyfsad kontroll vid upladdning av filer så sparar du ju ingen fil i databasen som verkligen inte finns på servern, och alltså blir mitt sista förslag kanon ;-)

mvh

TulorkMedlem sedan aug. 2004903 inlägg
#8

hehe, det funkade perfa..men inte if satsen file_exists, den böka till det...

tack ska du ha!!

DufferMedlem sedan mars 2003429 inlägg
#9

Oj sorry, glömde ju tamed hela söksträngen till filen, man måste ju ha med så man kommer till rätt mapp, det var mitt fel där!

if(file_exists($uploadFolder."/".$resultRow['fileName']))

Alltid bra att göra en extra koll ;-)

269 ms totalt · 3 externa anrop · v20260731065814-full.30151723
144 ms — hämta forumlista (db)
123 ms — hämta statistik (db)
134 ms — hämta tråd, inlägg och bilagor (db)