-1

こんにちは 私は現在、学位プロジェクトの簡単なプロトタイプを開発しています。ユーザーが動的ドロップダウンからいくつかのオプションを選択する前のフォームがあり、これらがテーブルに保存されると、次のページはユーザーがファイルをアップロードするためのものです。このファイルは、別のテーブルを参照する外部キーを持つ別のテーブルに格納されます。問題はファイルのアップロード ページにあります。最初に動作させることができるかどうかを確認したかったので、外部キーを表す変数を含めていません。誰かがそれを助けることができれば、それは大歓迎です。

私が受け取ったエラーは、アップロードファイルの名前が挿入クエリのフィールドの有効な列名ではないか、または

SQL を変更しようとすると、参照整合性に違反しているため、子テーブルで挿入または更新を実行できません。

私は太っていますか?私は数時間立ち往生しています。

これがphpです

if (isset($_POST['action']) and $_POST['action'] == 'upload')
{

$uploadfile = $_FILES['upload']['tmp_name'];
$uploadname = $_FILES['upload']['name'];

if(is_uploaded_file($uploadname)) {


$uploadtype = $_FILES['upload']['type'];
$uploaddata = file_get_contents($uploadfile);



// Prepare user-submitted values for safe database insert

$uploadname = mysql_real_escape_string($uploadname);
$uploadtype = mysql_real_escape_string($uploadtype);
$uploaddata = mysql_real_escape_string($uploaddata);

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData)
        VALUES (".$uploadname.",".$uploadtype.",".$uploaddata.")";
$exesql=mysql_query($sql) OR die(mysql_error());
}
else {
echo 'Error: File could not be uploaded.';
}   
}
include("file.html.php");  

ここにfile.html.phpがあります

<form action="" method="post" enctype="multipart/form-data">
        <div>
            <label for="upload">Upload File:
            <input type="file" id="upload" name="upload"/></label>
        </div>
        <div>
            <input type="hidden" name="action" value="upload"/>
            <input type="submit" value="Upload"/>
        </div>
    </form>

product_logs テーブルの構造は次のとおりです。

Field       Type           Null Key       Default         Extra
logID       int(5)         NO   PRI         NULL           auto_increment
dateCreated date           NO               NULL    
malResultID int(6)         NO   MUL         NULL    
mimeType    varchar(50)    NO               NULL    
fileData    mediumblob     NO               NULL    
fileName    varchar(255)   NO               NULL
4

3 に答える 3

0

ここで一重引用符を忘れました

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData)
VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')";

mysql_*非推奨の使用を停止し、mysqliまたはを使用しますpdo

于 2013-03-16T14:40:00.107 に答える
0

クエリの値を引用符で囲んでいます。

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData)
        VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')";
                ^--             ^ ^               ^ ^               ^

DBにファイルを保存することはめったに良い考えではなく、将来的に大きな問題につながることに注意してください。

大量のアップロードを許可している場合は、アップロードされたファイルの2つのコピーをメモリに保持するために大量のメモリを浪費していることに注意してください。少し少ない悪い方法は

$sql = "INSERT .... " . mysql_real_escape_string(file_get_contents(...));

ファイルに相当するスペースのコピーを少なくとも1つ節約できます。

于 2013-03-16T14:40:14.447 に答える
0

Sqlを次のように変更する必要があります-

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData)
        VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')";

また、テーブル名は product_logs です。

product_logs テーブルの構造を共有できますか? あなたの質問をより明確にするためです。

ありがとう

于 2013-03-16T14:40:55.663 に答える