webForumDet fria alternativet

Lista fil, länka till filen i databasen

PHP

27 svar · 788 visningar · startad av Tulork

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

nu är det jag som skriver igen :)

har fått ordning på upload utav filer till databasen samt till specifik användare, nu ska jag lista filen/filerna beroende på vilken användare som är inloggad, så här långt har jag kommit

<?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;
}
?>
<?php
include "conn.php"; // Databasanslutningen

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

// Printing results in HTML
echo "<p>Den inloggade är<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";
   }
   echo "\t</tr>\n";
//echo "test $sess_userlevel";
}
echo "</table>\n";

// Free resultset
mysql_free_result($result);

?>
<?
   // include 'library/config.php';
   // include 'library/opendb.php';

    //$id      = $_GET['id'];
    $query   = "SELECT filename, type, size, content FROM $mem_table WHERE id = ".$_SESSION['sess_id']."";
    $result  = mysql_query($query) or die('Error, query failed');
    list($name, $type, $size, $content) = mysql_fetch_array($result);

    header("Content-Disposition: attachment; filename=$name");
    header("Content-length: $size");
    header("Content-type: $type");
    echo $content;

   // include 'library/closedb.php';    
    exit;

?>
<html>
<head>
<title>Download File From MySQL</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?
//include 'library/config.php';
//include 'library/opendb.php';

$query  = "SELECT id, name FROM $mem_table";
$result = mysql_query($query) or die('Error, query failed');
if(mysql_num_rows($result) == 0)
{
    echo "Database is empty <br>";
} 
else
{
    while(list($id, $name) = mysql_fetch_array($result))
    {
?>
    <a href="download.php?id=<?=$id;?>"><?=$name;?></a> <br>
<?        
    }
}
//include 'library/closedb.php';
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>

Får lite roliga fel..bland annat så fill den nu ladda hem filen konto.php...fast som bild, iom att det är en bild som ligger under det användarnamnet..

Medlem sedan aug. 2004903 inlägg
#2

okej, kanske enklare om jag postar enbart koden jag har problem med

<?
   // include 'library/config.php';
   // include 'library/opendb.php';

    //$id      = $_GET['id'];
    $query   = "SELECT filename, type, size, content FROM $mem_table WHERE id = ".$_SESSION['sess_id']."";
    $result  = mysql_query($query) or die('Error, query failed');
    list($name, $type, $size, $content) = mysql_fetch_array($result);

    header("Content-Disposition: attachment; filename=$name");
    header("Content-length: $size");
    header("Content-type: $type");
    echo $content;

   // include 'library/closedb.php';    
    exit;

?>
<html>
<head>
<title>Download File From MySQL</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?
//include 'library/config.php';
//include 'library/opendb.php';

$query  = "SELECT id, name FROM $mem_table";
$result = mysql_query($query) or die('Error, query failed');
if(mysql_num_rows($result) == 0)
{
    echo "Database is empty <br>";
}
else
{
    while(list($id, $name) = mysql_fetch_array($result))
    {
?>
    <a href="download.php?id=<?=$id;?>"><?=$name;?></a> <br>
<?        
    }
}
//include 'library/closedb.php';
ob_end_flush();
?>

Som sagt..jag vill hämta filerna från databasen jag har laddat upp, vad jag ska hämta beror på vem som är inloggad.

Medlem sedan aug. 2004903 inlägg
#3

okej..det verkar som att ingen har någon lösning till mig..ni kanske har något annat tips om hur jag ska ladda hem filerna? det enda kravet jag har är att den letar efter filerna på det ställe i databasen där den som är inloggad är... dvs

FROM $mem_table WHERE id = ".$_SESSION['sess_id']."";

och att den som är inloggad kan trycka på en länk och ladda ner filen.

Medlem sedan aug. 2004903 inlägg
#4

Har tänkt om upload och download av fil...är detta genomförbart tror ni? kanske lite bättre om man ska ladda upp flera filer till samma användare.

1. Väljer fil
2. Filen skickas till en mapp
3. Man fågnar filens namn och lägger den i en egen table med det ID't som den som är inloggad har
4. konto.php, kollar vilken den inloggade är (vilket ID)
5. Matchar det ID't mot filerna i FIL tablen, länkar dem, matchar filennamnet mot det i mappen

Medlem sedan juli 2006461 inlägg
#5

Byt ut alla

$result = mysql_query($query) or die('Error, query failed');

till

$result = mysql_query($query) or die('Error, query failed<br />'.$query.'<br />'.$mysql_error());

och berätta vad det står.

Medlem sedan aug. 2004903 inlägg
#6

står ingenting, den så fort man försöker surfa in på konto.php där denna kod ligger vill den bara ladda hem filen konto.php som det filformatet filen hade som jag sparade i databasen under den användaren.. jag tog bort

header("Content-Disposition: attachment; filename=$name");
    header("Content-length: $size");
    header("Content-type: $type");

då slutar den ladda ner..men nu skickar den bara ut informationen i databasen..det vill säga

id, användare, pass, namn, och application/octet-stream 7351

Medlem sedan juni 20006 031 inlägg
#7

Du måste hämta bilden från en annan fil

bild.php

<?php
if (isset($_GET['Id'])) {
  // koppla dig till databasen här
   
  $result = mysql_query("SELECT filename, type, size, content  FROM tabellen WHERE Id = ".$_GET['Id']."");
  $file_data = mysql_result($result, 0, "file_data");
  $file_type = mysql_result($result, 0, "file_type");
   
  Header ("Content-Type: $file_type");
  echo $file_data;
}
?>

Och i konto.php så har du

<img src="bild.php?Id=".$_SESSION['sess_id']."">

Obs, jag har inte testkört koden

Medlem sedan aug. 2004903 inlägg
#8

så jag ska ha typ download.php med den övre koden för sig..och sen konto.php som ska visa och länka till filen, med den undre koden för sig självt? kan ju passa på att fråga om man kan ha flera filer under samma användare i databasen? Alltså

User Pass Fil
hej hej fil.c
fil2.c
hej2 ops filo.c

...hej har alltså 2 filer..

Medlem sedan juni 20006 031 inlägg
#9

Ok, missade ditt inlägg där du skrev att du hade tänkt om och inte skulle spara bilderna i databasen utan bara filnamnet på bilden.

sorry.

Medlem sedan aug. 2004903 inlägg
#10

just nu har jag filerna i databasen..kan man ha mer än en fil på samma användare?

Medlem sedan juni 20006 031 inlägg
#11

ja, du får loopa ut dom då istället.

Medlem sedan aug. 2004903 inlägg
#12

ok, va inte säker på att man kunde ha mer än en fil på samma rad så att siga, under samma användare...

Medlem sedan juni 20006 031 inlägg
#13

Vad menar du med på samma rad? När du visar dom i konto.php?

Medlem sedan aug. 2004903 inlägg
#14

ne alltså..vi lagrar just nu filerna i egna fält i samma table hos rätt användare.. undrar om man kan då liksom ha flera filer hos en användare.... eller om man skriver över den andra filen som ligger där eller nått?

Medlem sedan juni 20006 031 inlägg
#15

Ska du ha bilderna i samma tabell som användarinformationen så är du ju tvungen att bestämma hur många bilder som dom får ladda upp.

t.ex
------------------
id
namn
bild1
bild2
bild3
------------------

annars så får du ha två tabeller

t.ex
------------------
id
namn
------------------
och
------------------
id
refId --> referens till id i den andra tabellen
bild
------------------

Medlem sedan aug. 2004903 inlägg
#16

detta är vårt upload del som admin har tillåtelse till, vem/var han ska ladda bestäms utav vem vi valde i edit.php, (id't följer med till redigera.php)

<?php
ob_start();
session_start();
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_userlevel']) || $_SESSION['sess_userlevel'] != "admin") {
//  header("Location: index.php");
  header("refresh: 5;url=konto.php");
// eller
  echo "Du har inte behörighet till den här sidan";
  exit;
}
?>
<?php
include "conn.php"; // Databasanslutningen

// Performing SQL query sh
$ID_ADD = $_GET['var'];

if (isset ($_GET['var'])){
$query = "SELECT * FROM $mem_table WHERE id =".$_GET['var']." ";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

// Printing results in HTML
echo "<p>Du redigerar användaren:<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";
   }
   echo "\t</tr>\n";
//echo "test $sess_userlevel";
}
echo "</table>\n";

// Free resultset
mysql_free_result($result);

} //or die('fucked');

//Ladda upp
//----------------------------------------------------------
//----------------------------------------------------------
//----------------------------------------------------------
echo "<br>$ID_ADD";

if(isset($_POST['upload']))
{
        $fileName = $_FILES['userfile']['filename'];
        $tmpName  = $_FILES['userfile']['tmp_name'];
        $fileSize = $_FILES['userfile']['size'];
        $fileType = $_FILES['userfile']['type'];
        
        $fp = fopen($tmpName, 'r');
        $content = fread($fp, $fileSize);
        $content = addslashes($content);
        fclose($fp);
        
        if(!get_magic_quotes_gpc())
        {
            $fileName = addslashes($fileName);
        }
       
 	
      //  $query = "UPDATE $mem_table SET (filename, size, type, content ) ".
        //         "VALUES ('$fileName', '$fileSize', '$fileType', '$content') WHERE id = $ID_ADD";
        
		$query = "UPDATE $mem_table SET filename='$fileName', size='$fileSize', type='$fileType'  WHERE id = $ID_ADD";

        mysql_query($query) or die('Gick inte att uploada');
      
        
        echo "<br>File $fileName uploaded<br>";
}        
ob_end_flush();
?>
<form action="" method="post" enctype="multipart/form-data" name="uploadform">
  <table width="350" border="0" cellpadding="1" cellspacing="1" class="box">
    <tr> 
      <td width="246"><input type="hidden" name="MAX_FILE_SIZE" value="2000000"><input name="userfile" type="file" class="box" id="userfile">
         </td>
      <td width="80"><input name="upload" type="submit" class="box" id="upload" value="  Upload  "></td>
    </tr>
  </table>
</form>
</body>
</html>

<?php
echo "<br><a href=\"index.php?logout=\">Logga ut</a>\n<br><br>";
?>
<a href="admin.php">Tillbaka </a><br><br>

för att klargöra ännu mer

Admin loggar in, väljer användare han vill ladda upp en fil till, han laddar upp den.. den användaren loggar nu in, går in på konto.php (vilket ska vara en mall för alla användare), han ser att en fil ligger på hans konto, nu vill han ladda ner den (kommer vara pdf, .doc osv)

sen är ju frågan vilket som är bäst, så som jag har det nu, eller om jag ska ha en separat table för filerna o ange referens där till vilket användarID det tillhör..?

Medlem sedan aug. 2004903 inlägg
#17

då är det nog bäst att ha en egen table för filerna..

Medlem sedan aug. 2004903 inlägg
#18

Okej, jag har nu gjort om upload skriptet lite :) nu laddar den till en egen table och under RefID i databasen lägger den den inloggades id när man uploadar filen.. jag uploadade en .doc fil, sen kollade jag direkt i databasen vad som låg där...en jääävla massa tecken, gick inte att urskilja...antar att det är rätt? i alla fall

Så här ser upload skriptet ut, hur löser jag detta med nedladdningen på det sätt jag beskrev?

<?php
ob_start();
session_start();
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_userlevel']) || $_SESSION['sess_userlevel'] != "admin") {
//  header("Location: index.php");
  header("refresh: 5;url=konto.php");
// eller
  echo "Du har inte behörighet till den här sidan";
  exit;
}
?>
<?php
include "conn.php"; // Databasanslutningen

// Performing SQL query sh
$ID_ADD = $_GET['var'];

if (isset ($_GET['var'])){
$query = "SELECT * FROM $mem_table WHERE id =".$_GET['var']." ";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

// Printing results in HTML
echo "<p>Du redigerar användaren:<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";
   }
   echo "\t</tr>\n";
//echo "test $sess_userlevel";
}
echo "</table>\n";

// Free resultset
mysql_free_result($result);

} //or die('fucked');

//Ladda upp
//----------------------------------------------------------
//----------------------------------------------------------
//----------------------------------------------------------
echo "<br>$ID_ADD";

if(isset($_POST['upload']))
{
        $fileName = $_FILES['userfile']['filename'];
        $tmpName  = $_FILES['userfile']['tmp_name'];
        $fileSize = $_FILES['userfile']['size'];
        $fileType = $_FILES['userfile']['type'];
        
        $fp = fopen($tmpName, 'r');
        $content = fread($fp, $fileSize);
        $content = addslashes($content);
        fclose($fp);
        
        if(!get_magic_quotes_gpc())
        {
            $fileName = addslashes($fileName);
        }
       
 	
      //  $query = "UPDATE $mem_table SET (filename, size, type, content ) ".
        //         "VALUES ('$fileName', '$fileSize', '$fileType', '$content') WHERE id = $ID_ADD";
        
	//$query = "UPDATE $mem_table SET filename='$fileName', size='$fileSize', type='$fileType'  WHERE id = $ID_ADD";
	
	  $query = "INSERT INTO UserFiles (filename, size, type, content, RefID ) "."VALUES ('$fileName', '$fileSize', '$fileType', '$content', '$ID_ADD')";

        mysql_query($query) or die('Gick inte att uploada');
      
        
        echo "<br>File $fileName uploaded<br>";
}        
ob_end_flush();
?>
<form action="" method="post" enctype="multipart/form-data" name="uploadform">
  <table width="350" border="0" cellpadding="1" cellspacing="1" class="box">
    <tr> 
      <td width="246"><input type="hidden" name="MAX_FILE_SIZE" value="2000000"><input name="userfile" type="file" class="box" id="userfile">
         </td>
      <td width="80"><input name="upload" type="submit" class="box" id="upload" value="  Upload  "></td>
    </tr>
  </table>
</form>
</body>
</html>

<?php
echo "<br><a href=\"index.php?logout=\">Logga ut</a>\n<br><br>";
?>
<a href="admin.php">Tillbaka </a><br><br>
Medlem sedan juni 20006 031 inlägg
#19

bild.php

<?php
if (isset($_GET['Id'])) {
  // koppla dig till databasen här
   
  $result = mysql_query("SELECT bild FROM files WHERE id = ".$_GET['Id']."");
  $file_data = mysql_result($result, 0, "file_data");
  $file_type = mysql_result($result, 0, "file_type");
   
  Header ("Content-Type: $file_type");
  echo $file_data;
}
?>

konto.php

$query = mysql_query("SELECT id FROM files WHERE refId = ".$_SESSION['sess_id']."");
while ($pic = mysql_fetch_array($query)){
  echo "<img src=\"bild.php?Id=".$pic['id']."\">";
}

Du får ändra tabellnamn o sånt till det du använder

Medlem sedan aug. 2004903 inlägg
#20

Tacksam för din hjälp :)

Nu är jag nära! Bara något fel med mysql statements.. detta har jag nu

konto.php

<?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;
}
?>
<?php
include "conn.php"; // Databasanslutningen

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

// Printing results in HTML
echo "<p>Den inloggade är<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";
   }
   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);

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>

bild.php

<?php
ob_start();
session_start();
include "conn.php";
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
  header("Location: index.php");
  exit;
}
//  header("Location: index.php");
//  header("refresh: 5;url=konto.php");
// eller
 // echo "Du har inte behörighet till den här sidan";
//  exit;
//}
?>

<?php
if (isset($_GET['Id'])) {
  // koppla dig till databasen här
   
  $result = mysql_query("SELECT content FROM files WHERE RefID= ".$_GET['Id']."");
  $file_data = mysql_result($result, 0, "content");
  $file_type = mysql_result($result, 0, "type");
   
  Header ("Content-Type: $file_type");
  echo $file_data;
}
?>

Tablen UserFiles ser ut så här

| ID | filename | type | size  | content| RefID |

Felmeddelanden jag får ser ut så här

<br />
<b>Warning</b>:  mysql_result(): supplied argument is not a valid MySQL result resource in <b>/usr/local/www/apache22/data/Grej/bild.php</b> on line <b>24</b><br />
<br />
<b>Warning</b>:  mysql_result(): supplied argument is not a valid MySQL result resource in <b>/usr/local/www/apache22/data/Grej/bild.php</b> on line <b>25</b><br />

Nu är det iofs inte bilder vi laddar upp..därmed fel namn på php filen..men det e struntsamma just nu.

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)