#php #mysql #upload
#php #mysql #загрузка
Вопрос:
У меня есть скрипт загрузки, который вызывает у меня некоторые проблемы, и я не могу понять, почему. Вот код php:
mysql_connect('localhost', 'root', '');
mysql_select_db('uploads');
if (isset($_FILES["file"]["type"]) amp;amp; 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']) amp;amp; 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
or $desc
, они возвращаются с правильными значениями. Моя проблема заключается в следующем: по какой-то причине он не вводит значения $title
and $desc
в базу данных. Первый запрос mysql работает нормально, но не второй. Есть идеи, почему?
Комментарии:
1. вы, конечно, хотите связать title, desc с именем?
2. Какой результат будет, если вы добавите
echo mysql_error()
после второго запроса?3. да, сейчас это немного запутано, но $name — это фактическое имя файла, $title — имя пользовательского изображения, а $ desc — описание, определенное пользователем.
4. Во-первых, вам действительно нужно посмотреть на очистку данных перед отправкой их в базу данных, во-вторых, какую ошибку вы получаете?
5. Я не получаю ошибок, просто в базу данных ничего не вводится
Ответ №1:
Вероятно, desc
это связано с тем, что это зарезервированное ключевое слово MySQL, и оно должно быть заключено в обратные кавычки в вашем запросе. Всегда проверяйте 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. повлияет ли это и на переменную $title?
2. @codedude Нет, это не повлияет
title
, потому что это не зарезервированное слово MySQL. Смотрите список, который я только что связал с ответом.
Ответ №2:
Вы создаете 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)");