Ошибки загрузки PHP

#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)");