Обращение к PHP-функции AJAX Symply без AJAX
Использую AJAX Simply для удаления фотографий. Всё работает отлично.
Но мне понадобилось обратиться к этой функции не через AJAX, а через другую функцию PHP. И тут мне не совсем понятно, как в функцию передать переменные.
Начало функции удаления фотографии:
function ajaxs_delete_photo( $jx ){ $post_id = $jx->post_id; $photo_id = $jx->photo_id; $filename = $jx->filename; $user_id = $jx->user_id;
А вот кусок кода, в котором я хочу обратиться к функции ajaxs_delete_photo( $jx )
$result = $wpdb->get_results("SELECT id, post_id, author, filename FROM wp_photos WHERE album_id = $id"); foreach ($result as $row) { $photos[] = array( 'post_id' => $row->post_id, 'photo_id' => $row->id, 'user_id' => $row->author, 'filename' => $row->filename); } foreach ($photos as $photo) { ajaxs_delete_photo( $photo ); }
Мне нужно передать 4 переменные. Как я могу это сделать? И могу ли вообще?
Да, без проблем. $jx это объект, а ты передаешь массив, за это и зацепись. Т.е. надо сделать проверку и сконвертировать массив в объект:
-
Но вообще логичнее (потом для расширения кода может пригодится), переделать свою функцию удаления на обычную функцию и для ajaxs просто сделать обертку для нее. Получится так:
Про безопасность не забывай, делай валидацию получаемых данных!
Понял, спасибо большое)
Твой совет оказался действительно логичнее, но столкнулся с одной проблемой:
а вот сама функция удаления фото:
в цикле forech при обращении к функции delete_photo () происходит какой-то обрыв или что-то типа того, потому что вторую фотографию он уже не удаляет и дальше код не срабатывает. а в консоли мне выдается следующее:
По коду не вижу ошибки, надо дебажить так не подскажу. Ваще ппц странно... 500 ошибка еще, похоже на сервере что-то, а не в PHP, темболее если первый раз отрабатывает: памяти не хватает, время выполнения заканчивается, странно... Включи WP_DEBUG в консоли должен увидеть текст ошибки, если не увидишь, смотри в логах. Загляни в статью о дебаге.
Ты совсем о безопасности не думаешь, это же инъекция SQL делай не хочу. Запрос так переделай:
Вот что выдал лог:
Я правильно понимаю, что он ругается на то, что повторно объявляется функция del_photo_in_path()?
Она у меня внутри функции delete_photo(). Как и где тогда её лучше объявлять? Выносить её из этой функции?
P.S. Про безопасность я понимаю, просто сейчас все силы бросаю на выполнение основного функционала, потом пройдусь по всем запросам к БД и проверкам)
А, ну да логично, повторный вызов функции повторно пытается объявить функцию del_photo_in_path() а она уже есть, вот и ошибка!
Запиши лучше нормально, замени:
На это:
Лучше это сразу делать, хотя бы базовые вещи!
Понял. Буду придерживаться. Спасибо за помощь)