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

  • Автор темы glonass
  • 37
  • Обновлено
  • 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() для загрузки этого файла?

glonass


Рег
07 Apr, 2011

Тем
1

Постов
2

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

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

maxlittlepirate


Рег
01 Jan, 2011

Тем
0

Постов
1

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

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

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

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

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



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



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

Farsh


Рег
08 May, 2015

Тем
2

Постов
5

Баллов
25
  • 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

Тем
1

Постов
3

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

JohnGolt


Рег
11 Apr, 2015

Тем
1

Постов
3

Баллов
13
Тем
49554
Комментарии
57426
Опыт
552966

Интересно