2012-05-29 16 views
1

我有一個關於上傳和下載系統如何與PHP和MySQL工作的問題。上傳和下載爲我的用戶在php/mysql

我希望能夠上傳文件(最好通過我的網頁),以便只有特定的用戶才能查看可用的文件,並按照他/她的要求下載。

我覺得真的很愚蠢,問這個問題,但文件保存在哪裏?在桌子裏面?或者表指向我的網絡服務器中的目錄?

我問這個,因爲我真的想學習這一點,但連基本的問題是很困難的,甚至制定更別說解決...... :)

期待着一些輸入

乾杯 Adam

回答

1

PHP文件上傳實際上是一個兩步過程(如果你想將它保存到所需的路徑)。當您嘗試上傳包含名稱,類型,大小和temp_name的文件時,$ _FILES變量具有所有詳細信息。 temp_name實際上包含文件的臨時路徑。然後,您可以使用move_uploaded_file函數將文件移動到您想要的任何路徑。

關於保存在數據庫中,一旦您能夠成功地將文件移動到所需的位置,您可以更新數據庫。我建議,最好是隻爲文件名和ID設置一個表格,我假設你也可以爲用戶設置一個表格。然後您可以有一張可以映射用戶標識和文件標識的新表。這將使您能夠在用戶之間共享訪問權限。當然,還有其他方法可以做到這一點。我認爲這可能是一個簡單的實現。

另外我剛剛意識到,你可能想看看一個簡單的文件上傳的例子。你可以參考this鏈接

+0

謝謝您花時間回答! – user1424728

0

您可以使用全局變量$_FILES以PHP上載文件。 一旦你上傳文件..他們臨時存儲在您的系統的臨時文件夾..

例如..如果您使用XAMMP ..上傳的文件臨時存儲在xammp/tmp/

檢查http://php.net/manual/en/reserved.variables.files.php使用$的解釋_FILES變量也

+0

我會看看這個!謝謝! – user1424728

1

這一切真的取決於你如何複雜做到這一點。

最簡單的方法是讓用戶上傳文件。使用PHP讀取文件信息($_FILE)並將文件移動到某個文件夾,並將信息放入數據庫。假設你鏈接用戶和文件,用戶將能夠看到所有文件,然後從列表中下載他們的文件。

更復雜,更安全,更全面的選擇是讓用戶上傳文件。仍然使用PHP來讀取文件信息,並將其存儲在數據庫中。使用id或一些獨特的哈希重命名該文件,以便它不會被覆蓋,並將它們移動到受保護的目錄中,在用戶或任何其他用戶可以訪問的目錄中。爲用戶設置一個下載頁面,該頁面根據散列查找請求的文件,然後如果他們已正確登錄,則向他們提供所請求的文件。

同樣,這取決於您想要實現的複雜程度以及您要實現的目標。當你工作並陷入困境時,回過頭來問一些關於問題特定部分的問題,你一定會得到更多的幫助。

+0

隨着反饋iv'e得到了在這裏,我會看看我的選擇應該是多麼複雜!坦克你花時間回答我! – user1424728

0

看來你完全是PHP的新手。我給你一個示例代碼。使用它並前進。這是給我的一個學生。嘗試一下。

<?php 
session_start(); 
if(!isset($_SESSION['Usernm'])) 
    { 
     echo header("Location:../Common/MI_Login.php"); 
    } 
$usernm = $_SESSION['Usernm']; 

include("../Connection/Connection.php"); 
if(isset($_POST['BTN_Submit_mi_songdesc'])) 
    { 
     validate_song(); 
     if(count($error) == 0) 
      { 
       $SongNm = $_POST['TXT_Nm']; 

       $ext=strchr($_FILES['FF_Song']['name'],".mp3"); 
       $newfile=str_replace($_FILES['FF_Song']['name'],$SongNm,$_FILES['FF_Song']['name']); 

       $song = 'Songs/'.$newfile.$ext; 
       $album = $_POST['DDL_AlbumNm']; 
       $singernm = $_POST['DDL_SingerNm']; 
       $bitrate = $_POST['DDL_Bitrate']; 
       $catg = $_POST['DDL_Catg']; 
       $ins_song = "INSERT INTO mi_songdesc (SD_SongName, SD_File, SD_AlbumID, SD_SingerID, SD_Bitrate, SD_CatgID, SD_Approved, SD_UploadedBy) VALUES ('$SongNm','$song','$album','$singernm','$bitrate','$catg','1','$usernm')"; 
       mysql_query($ins_song) or die(mysql_error()); 
       move_uploaded_file($_FILES['FF_Song']['tmp_name'],'../'.$song); 
       header("Location:".$_SERVER['PHP_SELF']); 
      } 
     else 
      { 
       foreach($error as $i) 
        { 
         $test .= $i."<br />"; 
        } 
      } 
    } 
function validate_song() 
    { 
     global $error; 
     $error = array(); 
     if($_POST['TXT_Nm'] == "") 
      { 
       $error[] = "Error : Enter Song Name"; 
      } 
     if($_FILES['FF_Song']['name'] == "") 
      { 
       $error[] = "Error : Browse a Song"; 
      } 
     if($_POST['DDL_AlbumNm'] == "") 
      { 
       $error[] = "Error : Select Album"; 
      } 
     if($_POST['DDL_SingerNm'] == "") 
      { 
       $error[] = "Error : Select Singer"; 
      } 
     if($_POST['DDL_Bitrate'] == "") 
      { 
       $error[] = "Error : Select Bitrate "; 
      } 
     if($_POST['DDL_Catg'] == "") 
      { 
       $error[] = "Error : Select Category"; 
      } 
    } 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Upload Song</title> 
</head> 

<body> 
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
    <table width="520" border="1" align="center"> 
    <tr> 
     <td colspan="3" align="center" valign="middle">Enter Song Details</td> 
    </tr> 
    <tr> 
     <td width="185">Song Name</td> 
     <td width="16">&nbsp;</td> 
     <td width="297"><label for="TXT_Nm"></label> 
     <input name="TXT_Nm" type="text" id="TXT_Nm" value="<?php echo $_POST['TXT_Nm']; ?>" size="30" maxlength="30"/></td> 
    </tr> 
    <tr> 
     <td>File</td> 
     <td>&nbsp;</td> 
     <td><label for="FF_Song"></label> 
     <input type="file" name="FF_Song" id="FF_Song"/></td> 
    </tr> 
    <tr> 
     <td>Album Name</td> 
     <td>&nbsp;</td> 
     <td><label for="DDL_AlbumNm"></label> 
     <select name="DDL_AlbumNm" id="DDL_AlbumNm"> 
     <option value="">Select</option> 
     <?php 
      $res_alb = mysql_query("SELECT * FROM mi_album"); 
      while($row_alb = mysql_fetch_array($res_alb)) 
       { 
        if($_POST['DDL_AlbumNm']==$row_alb['Alb_SlNO']) 
        { 
     ?> 
     <option selected="selected" value="<?php echo $row_alb['Alb_SlNO']; ?>"><?php echo $row_alb['Alb_Name']; ?></option> 
     <?php 
        } 
        else 
        { 
     ?> 
     <option value="<?php echo $row_alb['Alb_SlNO']; ?>"><?php echo $row_alb['Alb_Name']; ?></option> 
     <?php 
        } 
       } 
     ?> 
     </select></td> 
    </tr> 
    <tr> 
     <td>Singer Name</td> 
     <td>&nbsp;</td> 
     <td><label for="DDL_SingerNm"></label> 
     <select name="DDL_SingerNm" id="DDL_SingerNm"> 
     <option value="">Select</option> 
     <?php 
      $res_singer = mysql_query("SELECT * FROM mi_singer"); 
      while($row_singer = mysql_fetch_array($res_singer)) 
       { 
        if($_POST['DDL_SingerNm']==$row_singer['SI_SlNo']) 
        { 
     ?> 
     <option selected="selected" value="<?php echo $row_singer['SI_SlNo']; ?>"><?php echo $row_singer['SI_Name']; ?></option> 
     <?php 
        } 
        else 
        { 
     ?> 
     <option value="<?php echo $row_singer['SI_SlNo']; ?>"><?php echo $row_singer['SI_Name']; ?></option> 
     <?php 
        } 
       } 
     ?> 
     </select></td> 
    </tr> 
    <tr> 
     <td>Bitrate</td> 
     <td>&nbsp;</td> 
     <td><label for="DDL_Bitrate"></label> 
     <select name="DDL_Bitrate" id="DDL_Bitrate"> 
      <option value="">Select</option> 
      <option value="128">128</option> 
      <option value="256">256</option> 
     </select> 
     kbps</td> 
    </tr> 
    <tr> 
     <td>Select Category</td> 
     <td>&nbsp;</td> 
     <td><label for="DDL_Catg"></label> 
     <select name="DDL_Catg" id="DDL_Catg"> 
     <option value="">Select</option> 
     <?php 
      $res_catg = mysql_query("SELECT * FROM mi_catg"); 
      while($row_catg = mysql_fetch_array($res_catg)) 
       { 
        if($_POST['DDL_Catg']==$row_catg['C_SlNo']) 
        { 
     ?> 
     <option selected="selected" value="<?php echo $row_catg['C_SlNo']; ?>"><?php echo $row_catg['C_Name']; ?></option> 
     <?php 
        } 
        else 
        { 
     ?> 
     <option value="<?php echo $row_catg['C_SlNo']; ?>"><?php echo $row_catg['C_Name']; ?></option> 
     <?php 
        } 
       } 
     ?> 
     </select></td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
     <td>&nbsp;</td> 
     <td align="center" valign="top"><input type="submit" name="BTN_Submit_mi_songdesc" id="BTN_Submit_mi_songdesc" value="Submit" /></td> 
    </tr> 
    <tr> 
     <td colspan="3"><?php echo $test; ?>&nbsp;</td> 
    </tr> 
    </table> 
</form> 
</body> 
</html> 
+0

謝謝,是的,我是新來的,但對於像你們這樣有幫助的人來說,很容易被動機去學習新事物!我要從這裏開始,希望很快我會成爲回答人們的問題之一:) – user1424728