-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_*其已弃用、使用mysqlipdo

于 2013-03-16T14:40:00.107 回答
0

您忘记了查询中值的引号:

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

请注意,将文件存储在数据库中并不是一个好主意,并且会导致未来出现重大问题。

如果您允许大型上传,请注意,您在内存中保存上传文件的两个副本会浪费大量内存。一个稍微不那么糟糕的方法是

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

至少为您节省一份文件空间的副本。

于 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 回答