ファイル情報を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'のデータ型です。
重複したエントリは、 '$ conn->クエリ($ sqlを)によって引き起こされます。 if($ conn-> query($ sql)){' - これはあなたの質問の「1」に答えます。 –
* "ファイルをクリックすると、ディレクトリパスが見つからないというエラーメッセージが表示されます。" * - パスを確認してください。エラー報告がここに役立ちます。 –
@Fredはいそれでした!その部分のために簡単に修正してくれてありがとう!ファイルリンク上の任意のアイデアですか?アップロード機能を初めて構築したので、ファイルをデータベースに保存する適切な方法が不明です。ファイル名とディレクトリなどを保存するだけでよいですか、または実際のファイルの内容を取得目的で保存する必要がありますか? – rdimouro