我有一个上传脚本给我带来了一些问题,我不能为我的生活找出原因。这是php代码:
mysql_connect('localhost', 'root', '');
mysql_select_db('uploads');
if (isset($_FILES["file"]["type"]) && isset($_FILES["file"]["size"])) {
if (($_FILES["file"]["type"] == "image/png")) {
if ($_FILES["file"]["size"] < 500120) {
if ($_FILES["file"]["error"] > 0) {
echo $_FILES["file"]["error"];
} else {
if (file_exists("uploads/" . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " already exists. ";
} else {
move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"]);
$name = $_FILES["file"]["name"];
mysql_query("INSERT INTO uploads (name) VALUES ('$name')");
if (isset($_POST['title']) && isset($_POST['desc'])) {
$title = $_POST['title'];
$desc = $_POST['desc'];
mysql_query("INSERT INTO uploads (title, desc) VALUES ('$title', '$desc')");
echo $title;
echo $desc;
}
}
}
} else {
echo "File is too big";
}
} else {
echo "Wrong file type";
}
}
我知道我的文件路径和表单输入是正确的,如果我回显$title
或$desc
变量,则返回正确的值。我的问题是:由于某种原因,它不会将$title
和$desc
值输入数据库。第一个mysql查询工作正常但不是第二个。知道为什么吗?
答案 0 :(得分:2)
这可能是因为desc
是MySQL reserved keyword,并且必须在查询语句中的反引号中包含它。请务必检查mysql_error()
以查找查询失败的原因。
$success = mysql_query("INSERT INTO uploads (title, `desc`) VALUES ('$title', '$desc')");
if (!$success) echo mysql_error();
请在插入前转义$title
和$desc
,因为它们直接来自$_POST
。
$title = mysql_real_escape_string($_POST['title']);
$desc = mysql_real_escape_string($_POST['desc']);
并在之前的查询中为$name
执行相同的操作:
$name = mysql_real_escape_string($_FILES["file"]["name"]);
答案 1 :(得分:0)
您正在上传表中创建2条记录,包含1个文件。可能name列设置为not null,这会导致第二个查询不起作用。 它必须是:
$name = mysql_escape_string($_FILES["file"]["name"]);
$title = isset($_POST['title'])?mysql_escape_string($_POST['title']) : '';
$desc = isset($_POST['desc'])?mysql_escape_string($_POST['title']) : '';
mysql_query("INSERT INTO uploads (`name`, `title`, `desc`) VALUES ('$name', $title, $desc)");