Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » jQuery » Как выполнить SQL запросы при клике по кнопке с админки?

Как выполнить SQL запросы при клике по кнопке с админки?


     01.11.2020    sql запрос    jQuery, Общие вопросы по PHP, Хаки    913

вопрос
Доброго времени суток. Требуется постоянно выполнять sql запросы после добавления новостей. Решил в адмике добавить кнопку, при клике по которой будут выполнятся запросы и в идеале получать результат, но к сожалению не хватает знаний. Может кто подскажет реализацию.

Мои наработки

Кнопка

<a href="#" onclick="ParseSql('sql'); return false;" class="btn btn-link btn-float text-size-small has-text"><i class="fa fa-info-circle text-primary"></i> <span>Выполнить SQL</span></a>


Скрипт обработки

<script type="text/javascript">
function ParseSql(sql) {
	$.post('engine/ajax/parse-sql.php', {sql: sql}, function(data) {
		console.log(data);
	});
}
</script>


Сам файл запросов созданный в плагинах для удобства


Первое это engine/ajax/parse-sql.php отдаёт 404 ошибку, я так понимаю из за того что он в плагинах создан, нужно по другому к нему подключатся.
Второе, как получить результат. Хотя я вообще не уверен что двигаюсь в верном направлении

Буду признателен за любую помощь.

Ответа пока нет


23 комментария

dj-avtosh
PHP-developer

dj-avtosh - 9 ноября 2020 17:38 -

Здравствуйте. В новых версиях dle к ajax-скриптам желательно обращаться через /engine/ajax/controller.php?mod=mymod

mymod.php размещается в /engine/ajax - содержимое можете подсмотреть в других скриптах этой папки.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 9 ноября 2020 23:34 -

А если mymod.php создан в плагине, как к нему обращаться?

dj-avtosh
PHP-developer

dj-avtosh - 9 ноября 2020 23:41 -

что значит создан в плагине? Это физический файл в теории должен быть.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 9 ноября 2020 23:45 -

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

ushkom
Юзер

ushkom - 9 ноября 2020 23:54 -

Сделал так:


function ParseSql(sql) {
	$.post('/engine/ajax/controller.php?mod=parse-sql', {sql: sql}, function(data) {
		console.log(data);
	});
}

Ругается на
console.log(data);


ну и сам файл engine/ajax/parse-sql.php


ushkom
Юзер

ushkom - 10 ноября 2020 00:18 -

По сути, мне нужно при нажатии кнопки с админки, выполнить поочередно запросы UPDATE к базе и получить ответ после каждого запроса, сколько UPDATE изменило строк. Скорее всего своими силами не сделаю, нужно будет заказывать, а потом обучатся.

dj-avtosh
PHP-developer

dj-avtosh - 10 ноября 2020 00:44 -

зачем вы придумываете велосипед, я выше написал как делать, что бы вызывать, через controller.php?mod=

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 10 ноября 2020 00:45 -

откройте в папке engine/ajax самый маленький по размеру php файл - там все внятно, все ваши define уже объявлены в controller.php

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 10 ноября 2020 01:16 -

Я в принципе так и делал, по шаблону другого файла. Не могу понять как правильно получить результат выполненного запроса.
Сейчас сократил до минимума:

<script type="text/javascript">
function ParseSql(sql) {
	$.post('/engine/ajax/controller.php?mod=parse-sql');
}
</script>


<?php
if(!defined('DATALIFEENGINE')) {
	header( "HTTP/1.1 403 Forbidden" );
	header ( 'Location: ../../' );
	die( "Hacking attempt!" );
}

$row = $db->super_query( "SELECT email FROM " . USERPREFIX . "_users WHERE name = 'ushkom'" );
echo $row['email'];

?>


Как мне обратно получить результат выполненного запроса, в данном случае echo, что-то вроде бы всплывающего сообщения?
А если UPDATE, в переменную вряд ли получится получить результат.

Сколько будет стоить сделать такой плагин?

dj-avtosh
PHP-developer

dj-avtosh - 10 ноября 2020 01:19 -


По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 10 ноября 2020 02:01 -

Спасибо за подсказку. С SELECT получилось


<script type="text/javascript">
function ParseSql(sql) {
	$.post('/engine/ajax/controller.php?mod=parse-sql', function( data ) {
      alert( "Выполнено: " + data );
    });
}
</script>



<?php
if(!defined('DATALIFEENGINE')) {
	header( "HTTP/1.1 403 Forbidden" );
	header ( 'Location: ../../' );
	die( "Hacking attempt!" );
}

$row = $db->super_query( "SELECT email FROM " . USERPREFIX . "_users WHERE name = 'ushkom'" );
echo $row['email'];
$row = $db->super_query( "SELECT user_id FROM " . USERPREFIX . "_users WHERE name = 'ushkom'" );
echo $row['user_id'];

?>


А как получить результат от UPDATE?

Вычитал несколько функций, пробовал


echo mysql_info();
echo mysql_affected_rows();


Выдает ошибку что функции нет

dj-avtosh
PHP-developer

dj-avtosh - 10 ноября 2020 10:32 -

$db->query( "UPDATE " . USERPREFIX . "_users SET email = 'test@test.test' WHERE name = 'ushkom'" );

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 10 ноября 2020 11:55 -

Это понятно, запрос я прописал, у меня не получается результат получить в echo

$res = $db->query( "UPDATE " . USERPREFIX . "_users SET email = 'test@test.test' WHERE name = 'ushkom'" );

echo mysql_affected_rows( $res );
Или 
echo mysql_info( $res );


Пробовал около пяти переменных которые находил в сети, не получается получить результат UPDATE в echo

dj-avtosh
PHP-developer

dj-avtosh - 10 ноября 2020 11:57 -

сперва update, потом select сделать.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

To3ls
Юзер

To3ls - 10 ноября 2020 13:13 -

Какой Вам еще нужен результат,когда на выходе вы имеете boolean... У вас есть все данные для вывода ....

if( $db->query("bla bla") ) {
echo "Успех , вставляй данные и айди сущности которую обновлял. к примеру ";
}
// и по желанию - else //

Не надо никаких доп select

ushkom
Юзер

ushkom - 10 ноября 2020 13:31 -

Нужно получить сколько update затронуло строк, точнее сколько изменило. Я читал что mysql_affected_rows это может вывести

dj-avtosh
PHP-developer

dj-avtosh - 10 ноября 2020 13:37 -

$db->get_affected_rows();

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 10 ноября 2020 13:49 -

Совместим это с советом от Уважаемого To3ls:

if( $db->query("bla bla") ) {
  echo "Затронуто строк: " . $db->get_affected_rows();
} else {
  echo "Ошибка выполнения";
}

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 10 ноября 2020 14:13 -

Спасибо, начало получатся. Подскажите пожалуйста как правильно экранизировать такие символы как | или " в самом запросе и echo, пробовал по разному

Так
$res = $db->query( "UPDATE dle_post SET imgs = REPLACE(imgs,'"','|')" );
echo 'В столбец imgs заменили " на | в ' . $db->get_affected_rows($res) . ' строках';

И так
$res = $db->query( 'UPDATE dle_post SET imgs = REPLACE(imgs,""","|")' );
echo 'В столбец imgs заменили " на | в ' . $db->get_affected_rows($res) . ' строках';

dj-avtosh
PHP-developer

dj-avtosh - 10 ноября 2020 14:15 -

экранируется обратным слешем.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 10 ноября 2020 14:20 -

Так вроде бы получилось

$res = $db->query( 'UPDATE dle_post SET imgs = REPLACE(imgs,"\"","|")' );
echo 'В столбец imgs заменили " на | в ' . $db->get_affected_rows($res) . ' строках';

Получается нужно только в самом запросе?

dj-avtosh
PHP-developer

dj-avtosh - 10 ноября 2020 14:35 -

если в качестве обрамления строки используется такой же символ - то его нужно экранировать. Это если не вдаваться в исключения по типу LIKE и т.п.

Если мы смогли ответить на вопрос - просьба оценить комментаторов пальцами вверх.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 10 ноября 2020 16:32 -

Если не сложно подскажите с последней задачей как можно получить в данном запросе news_num в echo?
Пробовал так:

if( $db->query("UPDATE dle_users SET news_num = @news_num := (SELECT COUNT(*) FROM dle_post_extras WHERE user_id = 2) WHERE user_id = 2") ) {
  echo 'Добавляем в таблице dle_users количество новостей для пользователя с id=2, количество новостей ' . @news_num . ' у пользователя с id=2' . "\n";
} else {
  echo "Ошибка выполнения";
}


Или только select использовать?

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх