2017-01-06 7 views
1

ファイル情報をMySQL DBテーブルに保存するアップロードコンポーネントを構築しようとしています。私の最初の問題は、ユーザーがファイルをアップロードするたびに、データベースに2つのエントリが追加されることです。ファイルアップロードの内容をMySQL DBに適切に保存してリンクとして取得します

私の次の問題は、アップロードしたファイルをつかみ、それをクリックして新しいタブで見るためのリンクとして表示することでした。今すぐアップロードすると、ファイルのサーバーディレクトリパスが保存されます。ファイルをクリックすると、ディレクトリパスが見つからないというエラーメッセージが表示されます。

私の最大の問題は、アップロードを表示するためのリンクの問題です。次に、誰かにも二重入力の問題に対する提案がある場合は、それも高く評価されます。

マイコード:

HTML:ファイルアップロード機能 - に成功二度すべての変数をアップロード...

<form id="sgFileUpload" action='sg_addupload.php' target='hiddenFrame' method="POST" enctype="multipart/form-data"> 

<fieldset id='uploadBtnField'> 

    <input type="hidden" name="MAX_FILE_SIZE" value="50000000"/> 

    <input type='hidden' name='sgRef' id='sgRef' value='<?php echo $sgref ?>'> 

    <input type='file' name='searchFile' id='searchFile' multiple> 

    <input type='submit' name='startUpload' id='startUpload' value='Upload'> 


</fieldset> 

</form> <!-- End Form Input --> 

マイPHP:DB

へのファイルアップロード
if(isset($_POST['sgRef'])) { 

$sgref=$_POST['sgRef']; 

} 

$fileName = $_FILES['searchFile']['name']; 

    $fSize = $_FILES['searchFile']['size']; 
    $fType = $_FILES['searchFile']['type']; 

    $target = "../bms/uploads/";   
    $fileTarget = $target.$fileName;  
    $tempFileName = $_FILES["searchFile"]["tmp_name"]; 
    //$docType = $_POST['docType']; 
    $result = move_uploaded_file($tempFileName,$fileTarget); 

if ($result) { 

    //run DB Connection code... 

    //Writes the information to the database 
     $sql="INSERT sg_uploads(sgref,file,type,size,content,doctype) VALUES('$sgref','$fileName','$fType','$fSize','$fileTarget','Other')"; 

     $conn->query($sql); 

     if($conn->query($sql)) { 
      echo 'Your file <html><b><i>'.$fileName.'</i></b></html> has been successfully uploaded!'; 
     } else { 
      //Gives an error if its not 
      echo "Sorry, there was a problem uploading your file."; 
     } 


     //Free the result variables. 
     $sql->free(); 


     $result->free(); 


     //Close the Database connection. 
     $conn->close(); 


    }//End If Statement. 

PHPコード:へDBからのリンクを表示する(PHP検索のためのコードは成功している)

<?php 
while ($row = $result->fetch_array()) { 

       echo "<tbody>"; 
       echo "<tr>"; 
       echo "<td>" . "<a href=".$row['content']."' >".$row['file']."</a>". "</td>"; 
       echo "<br/>"; 
       echo "<br/>"; 
       }//end while. 
       echo "</tr>"; 
       echo "</tbody>"; 

$filename = $row[0]; 
    echo "<p></p>"; 


?> 

すべてのご協力をいただきありがとうございます。ありがとうございました!

注:データベースの 'file'列は 'blob'のデータ型です。

+1

重複したエントリは、 '$ conn->クエリ($ sqlを)によって引き起こされます。 if($ conn-> query($ sql)){' - これはあなたの質問の「1」に答えます。 –

+0

* "ファイルをクリックすると、ディレクトリパスが見つからないというエラーメッセージが表示されます。" * - パスを確認してください。エラー報告がここに役立ちます。 –

+0

@Fredはいそれでした!その部分のために簡単に修正してくれてありがとう!ファイルリンク上の任意のアイデアですか?アップロード機能を初めて構築したので、ファイルをデータベースに保存する適切な方法が不明です。ファイル名とディレクトリなどを保存するだけでよいですか、または実際のファイルの内容を取得目的で保存する必要がありますか? – rdimouro

答えて

2

は「@Fredは、はい、それはディレクトリの問題でした。この問題を修正したら、私は正常にページをリンクし、それを表示することができました。あなたは答えとしてあなたの2つの提案をまとめるならば、私はあなたを迎えます正解としての回答。ありがとう! "

私はコメントで述べたように:

重複したエントリが使用されてquery()の2つのインスタンスがあった$conn->query($sql); if($conn->query($sql))

によって引き起こされます。

条件文を使用して$conn->query($sql);を省略することができます。

パスの問題については、これはコメントでも、フォルダのパスが適切にインデックス付けされていないことが記載されていました。


脚注:

あなたは現在、SQLインジェクションに開放しています。最高のあなたは準備されたステートメントを使用します。

+0

もう一度ありがとう! – rdimouro

+0

@rdimouroあなたは大歓迎です、*歓声* –

関連する問題