Интересно, может ли кто-нибудь помочь мне.
Я собрал эту страницу, которая позволяет пользователям просматривать их загруженные изображения в формате галереи.
Теперь я хочу добавить функциональность удаления к каждому изображению. Я создал кнопку и Javascript позади нее, но я действительно не уверен, как связать «щелчок на кнопке» с фактическим физическим удалением файла.
Изображения не сохраняются в базе данных, но находятся в двух папках на моем сервере, в следующей структуре:
UploadedFiles/username/locationid/imagename
и
UploadedFiles/username/locationid/Thumbnails/imagename
Я относительно новичок в PHP, и теперь я дохожу до пределов своих знаний, но, конечно, хочу учиться. Из документации, которую я прочитал, я думаю, что я прав, говоря, что метод unlink
– это правильная команда для использования?
Но то, что я нахожу очень трудным, говорит код, чтобы найти папки с папками username
и locationid
которые соответствуют текущему username
и locationid
а затем удалять файлы, которые соответствуют переменной имени $source
.
Я просто задавался вопросом, может ли кто-нибудь, возможно, дать некоторые указания, как я могу это сделать.
Большое спасибо и добрые пожелания
Если вы можете передать переменные username, locationid и imagename в свой скрипт, вы можете удалить файлы с помощью функции unlink()
:
$path = 'UploadedFiles/' . $username . '/' . $locationid . '/'; unlink( $path . $imagename ); unlink( $path . 'Thumbnails/' . $imagename );
Поскольку вы взаимодействуете с вашей файловой системой, вам нужно быть уверенным и дезинфицировать переменные (запретите кому-то использовать ../../../, чтобы попасть в нежелательные части вашей файловой системы).
$username = str_replace( array( '..', '/', '\\', ':' ), '', $username ); $imagename = str_replace( array( '..', '/', '\\', ':' ), '', $imagename ); $locationid= str_replace( array( '..', '/', '\\', ':' ), '', $locationid );
Очевидно, что ваш javascript (клиентская сторона) должен будет вызывать URL-адрес (на стороне сервера), чтобы удалить изображение, выбранное пользователем. Я предлагаю, что на данный момент вы делаете это статически (если позже вы хотите перейти к чему-то более динамичному, шаг превратиться в ajax в довольно малом размере.
Так как Set Sail Media сказал, вам нужно будет передать имя пользователя и идентификатор местоположения на ваш сервер при нажатии кнопки удаления. Один из способов сделать это:
При рендеринге вашей галереи в HTML / javascript для каждого изображения у вас есть под ним то, которое будет содержать необходимую информацию, а кнопка отправки просто вызовет скрипт удаления с вашего сервера. Пример формы, которую вы можете сделать, это:
<form name="deleteImageX" method="GET" target="your.server.org/deleteImage.php"> <input type="hidden" name="userName" value="theUserNameAssociatedWithThePicture" /> <input type="hidden" name="locationId" value="locationOfThePicture" /> <input type="submit" value="delete"/> </form>
Эта форма сохранит необходимое значение в скрытых полях, которые не будут отображаться на веб-странице, но все равно будут отправляться на сервер при нажатии кнопки отправки.
(для небольшой истории метод, используемый здесь, – это GET, потому что HTML AFAIK не поддерживает метод DELETE (который был бы подходящим в нашем случае)).
Метод GET вызовет скрипт «your.server.org/deleteImage.php». В этом скрипте у вас будет вся необходимая информация (имя пользователя / locationId), чтобы удалить изображение с помощью переменных $ _GET ['username'] и $ _GET ['locationId']. Затем, как вы упомянули, вам нужно будет использовать метод unlink для фактического удаления файла с сервера.
Наконец, как только это будет сделано, вам нужно перенаправить скрипт php, чтобы после удаления изображения вы снова отобразили галерею (например). Это можно сделать, вызвав скрипт, если у вас есть какой-то механизм шаблонов, или вызвав функцию «header» php.
Я надеюсь, что этот поток был тем, что вы ожидали, и я надеюсь, что я был полезным.
С уважением,
медведь