Получите путь к файлу перед загрузкой, используя форму

  • Автор темы Geldim
  • Обновлено
  • 15, May 2024
  • #1
У меня есть форма:
  <form name="subir_archivo" action="process.php" method="POST" enctype="multipart/form-data">
 <input type="hidden" name="MAX_FILE_SIZE" value="2097152"></input>
 <input type="file" name="archivo"></input>
 <input type="submit" value="Cargar Archivo"></input>
 </form>
HTML: перед использованием можно узнать путь к файлу. move_uploaded_file() для загрузки этого файла?

Geldim


Рег
18 Apr, 2006

Тем
62

Постов
173

Баллов
513
  • 18, May 2024
  • #2
вам придется выполнить некоторые проверки значений в data[0],data[1],data[2]. Выполните некоторые проверки работоспособности, например, значения не должны содержать одинарные кавычки или атаки SQL-инъекций.

PHP имеет встроенную функцию для очистки таких данных непосредственно перед их вставкой в БД.
 

Congreevelels


Рег
01 Jan, 2011

Тем
69

Постов
198

Баллов
563
  • 06, Jun 2024
  • #3
Если вы используете PDO, вы в основном защищены от атак с прямым внедрением, используя подготовленные операторы.

Всегда полезно выполнять дополнительную проверку переменных, вводимых в базу данных, но для таких простых функций вы в основном в безопасности.

Немного зависит от того, кто будет загружать эти CSV-файлы.

Если это внутренняя/контролируемая загрузка, все в порядке.

Если он загружен пользователем, возможно, вам захочется сделать немного больше.

Что касается вашего вопроса о большем или меньшем количестве полей в CSV, вам необходимо убедиться, что каждый загружаемый вами CSV-файл имеет правильное количество «контейнеров» (каждый бит содержимого между каждым делителем). Если у вас меньше и нет проверки ошибок, сценарий завершится неудачно, поскольку значение не будет присутствовать.

Если у вас больше или отсутствуют элементы, вы можете вставить неправильные биты в неправильные части базы данных.
 

Farsh


Рег
08 May, 2015

Тем
69

Постов
174

Баллов
549
  • 10, Jun 2024
  • #4
Чтобы проверить содержимое, вам нужно сделать нечто большее, чем просто проверить тип файла. Во-первых, вы должны знать, какими должны быть ожидаемые значения — текстовые, числовые, с плавающей запятой и так далее.

Если это текст, то трудно проверить фактическое содержимое без очень строгих определений того, каким оно должно быть, но если это нормально, если оно соответствует некоторым общим критериям и/или не пусто, тогда это не так уж сложно подтвердите каждое значение.

Кроме того, нет необходимости создавать переменные для чего-то, используемого только один раз (по крайней мере, так это выглядит в примере):

 

$sth = $BD->prepare("INSERT INTO tabla (codigo, nombre, cantidad) VALUES (:codigo, :nombre, :cantidad)"); //declare the query outside the loop

while (($data = fgetcsv($registro, 200, ",")) !== false) { //no need to use caps on "false", caps are usually only used for constants and for mysql-queries (the actual SQL command words, not the content)

//$codigo = $data[0]; // these are all unneccessary
//$nombre = $data[1];
//$cantidad = $data[2];

//$sth->bindParam(':codigo', $data[0]);
//$sth->bindParam(':nombre', $data[1]);
//$sth->bindParam(':cantidad', $data[2]); //these can also be cut, if you're using PDO, by changing the execute to the following:

$sth->execute([':codigo'=>$data[0],':nombre'=>$data[1],':cantidad'=>$data[2]]);
}


PHP: таким образом вы сократите 9 строк кода до 3 строк кода.

Однако это никак не проверяет содержимое, что вы, возможно, захотите сделать, однако, в зависимости от того, что вы ожидаете, существуют разные способы проверки содержимого каждой переменной или значения массива.
 

Aka_Pyro


Рег
01 Jan, 2011

Тем
81

Постов
183

Баллов
608
  • 11, Jun 2024
  • #5
Э...? Что? Не будет никакого пути до тех пор, пока вы фактически не загрузите файл, который будет загружен в любую временную папку, которую вы настроили на своем сервере, из которой его можно будет переместить при прохождении других проверок. Ничего из этого происходит не в самой форме, а в обработке php-файла.
 

JohnGolt


Рег
11 Apr, 2015

Тем
77

Постов
198

Баллов
583