您好我正在为我的学位项目开发一个快速原型。我有一个以前的表单,用户将从动态下拉列表中选择一些选项,当这些选项保存到表格中时,下一页面是供用户上传文件的。然后将此文件存储到一个单独的表中,其中外键引用另一个表。问题在于文件上传页面,我没有包含代表外键的变量,因为我想看看我是否可以让它先工作。如果有人能提供帮助,我将不胜感激。
我收到的错误是上传文件的名称不是插入查询字段中的有效列名或
如果我尝试更改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
答案 0 :(得分:0)
$sql = "INSERT INTO product_logs (fileName, mimeType, fileData)
VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')";
并停止使用已弃用的mysql_*
,请使用mysqli
或pdo
答案 1 :(得分:0)
您在查询中忘记了值的引号:
$sql = "INSERT INTO product_logs (fileName, mimeType, fileData)
VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')";
^-- ^ ^ ^ ^ ^
请注意,将文件存储在数据库中并不是一个好主意,并且会导致出现重大问题。
如果您允许大量上传,请注意您浪费了大量内存,并在内存中保存了上传文件的两份副本。
是一个稍微不好的方法$sql = "INSERT .... " . mysql_real_escape_string(file_get_contents(...));
为您节省至少一份文件的空间。
答案 2 :(得分:0)
你应该改变你的Sql -
$sql = "INSERT INTO product_logs (fileName, mimeType, fileData)
VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')";
此外,我们已经看到您的表名是product_logs
你能分享product_logs表的结构吗?这样我们就可以更好地澄清您的问题。
由于