Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 16.10.2018
Сообщений: 50

Почему вызов процедуры PHP работает по разному?

16.04.2022, 21:02. Показов 402. Ответов 3

Студворк — интернет-сервис помощи студентам
Добрый день!
Прежде чем написать - сломал всю голову, пару дней пытался сам докопаться до истины, но безуспешно
Итак - есть сайт на DLE 9. Возникло желание дать возможность админам править некоторую таблицу TestTable прямо из веб-морды. DLE не допускает прямого вызова PHP-модулей, но это легко решается. Вопрос в другом...
Для начала, набросал простейший скрипт, который получает таблицу с и выводит её. Формирование внутренней части тега таблицы оформил функцией, для возможности повторного обновления таблицы по клику на кнопке:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
 
function is_ajax() {
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
}
 
// ------------ begin of update data block -----------------
if (is_ajax() && isset($_POST['refresh_data'])) {
  $res  = mteBuildDataTable(); // ** тут - не работает (если внутри лезем к базе, если простостатически что-то присвоить, то норм.)! :((
    echo json_encode(array(
        'ok' => 'AJAX OK!!!',
        'data' => $data,
        'result' => $res // тут предполагается возврат кода таблицы
    ));
exit();   
}
// ------------ end of update data block -----------------
 
// перестроение таблицы 
function mteBuildDataTable() {
    $res1 =  "<thead>";
    // символ № почему-то ломает код >8()  - использовать код № !
    $res1 .= "<tr><th>№</th><th>ID</th><th>Caption</th>". "<th>Value</th></tr>";  
    $res1 .= "</thead>";
    $res1 .= "<tbody>";
    $db1 = $GLOBALS['db']; // db - глобальная переменная DLE для доступа к базе
    $qu1 = $db1->query("SELECT F.* FROM " . USERPREFIX . "_test F "); // ***
    $fz_table_itterator = 1;
    while ( $row = $qu1->fetch_assoc()) {
      $val = $row['Value'];
      $id = $row["ID"];
      $caption = $row['Caption'];
      $res1 = $res1 . "<tr>";       
      $res1 = $res1 . "<td>$fz_table_itterator</td>";       
      $res1 = $res1 . "<td>$id</td>";       
      $res1 = $res1 . "<td>$caption</td>";
      $res1 = $res1 . "<td ID='my-cell-$id' style='width: 30%;' onclick='MyCellClick($id)'>$val</td>";       
      $res1 = $res1 . "</tr>";
      $fz_table_itterator++;       
    }
    $res1 .= "</tbody>";
    $qu1->free();
  return $res1; 
}
 
//------------------------------------------------------
$tagcode = '... some code here ... <hr style="width: 100%;"/>';       
$tagcode .= '<table ID="mteTestTable" class="my-table-style" style="width: 100%">';
$tagcode .= mteBuildDataTable(); // * тут РАБОТАЕТ, даже если вызывать неоднократно, причём символ № внутир процедуры тоже прокатывает! 
$tagcode .= '</table>';
$tagcode = $tagcode . "<p></p>";  
// слой по клику на котором будет вызываться обновление таблицы
$tagcode = $tagcode . "<div id='mteBtnRefresh' style='background: yellow; width: 300px;'>Click for refresh Value!</div>";  
$tagcode = $tagcode . "<script>mteInit();</script>";     
// этот оператор позволяет DLE заменить тэг в тексте на подстановку вызова PHP
$tpl->set ( '{my-tag-for-table-generate}', $tagcode); 
 
?>
скрипт с функцией mteInit(), всё лишнее выкинул из кода:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// обновление таблицы
function mteRefreshData(event) {
  console.log("Refresh data was entered");
  if (event !== undefined && event !== null)
    event.preventDefault();
  var data = {"refresh_data" : 1};
  $.ajax({
    type: "POST",
    dataType: "json",
    url: "/engine/gen-mytagmytag.php",
    data: data,
    success: mteCallbackRefresh
  });
  console.log("Refresh ajax was called");
  return false;
}
 
function mteCallbackRefresh(r) {
      console.log("Callback was entered");
      console.log(r);
      // r будет содержать "ответ" из PHP 
      $("#mteTestTable").html(r['result']);
}
 
function mteInit(){
  let mteBtnRefresh = document.getElementById('mteBtnRefresh');
  mteBtnRefresh.addEventListener("click", mteRefreshData);
  console.log("mteTest click was assigned...");
  // всё остальное выкинул - важно что назначается действие по кллику на div
}
Так вот, при первом проходе PHP генерирует таблицу, вызывает в (*) построение таблицы - всё проходит ок. Далее, по клику на mteBtnRefresh выполняется mteRefreshData. И вот далее, в (**) функция уже не срабатывает как надо, причём на моменте обращения к таблице (***).
Что делаю не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.04.2022, 21:02
Ответы с готовыми решениями:

Почему не работает вызов процедуры из php
Мой код session_start(); require&quot;conect.php&quot;; $pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); ...

Почему не работает повторный вызов процедуры
program Program9; uses graphabc, abcobjects, abcbuttons; var b : rectangleABC; c : rectangleABC; left, right :...

Почему работает по-разному?
Почему работает по-разному? cout &lt;&lt; &quot;Hello, world! \n&quot;; printf(&quot;%s\n&quot;,&quot;By, world!&quot;); By, world! Hello, world! cout...

3
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
16.04.2022, 21:31
Ну так подебажьте работу с БД.
Может $GLOBALS['db'] нету.
Может запрос к БД с ошибкой выполнился.
Может USERPREFIX не объявлен.
Гадать можно долго.
0
2 / 2 / 0
Регистрация: 16.10.2018
Сообщений: 50
17.04.2022, 19:49  [ТС]
to tarasalk:
>> Может $GLOBALS['db'] нету.
есть. При первом вызове работает же (
пробовал так объявить:
PHP
1
global $db;
результат тот же - при основном вызове всё ок, при вызове по клику - нет
>> Может запрос к БД с ошибкой выполнился.
тоже вопрос этот продумывал, однако - первый вызов всё ок...
>> Может USERPREFIX не объявлен.
там интересная ситуация - при первом вызове USERPREFIX виден и запрос выполняется без проблем. При вызове по клику - выдаю в консоль текст запроса и вижу что USERPREFIX выглядит как строка "USERPREFIX". Ппц.
>> Гадать можно долго.
2 дня гадал разве что не на кофейной гуще
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
17.04.2022, 20:54
Так а причем тут первый вызов? Смотрите там где проблема. var_dump на каждом шагу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.04.2022, 20:54
Помогаю со студенческими работами здесь

Почему по разному работает загрузчик?
Добрый день! Я устанавливал Убунту16 под Виндовс10 на комп и ноутбук. И загрузчик граб2 работает у них по разному У компьютера ,после...

Почему табуляция работает по-разному?
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; int main (void) { int n; ...

почему в разных ОС по разному работает IntelliJ
Привет всем! собственно сабж, далее вкладываю два скриншота: 1) ОС Линукс Дебиан 8 2) ОС Винда 10 обоих случаях IDE была скачана...

Непонятно, почему в разных случаях работает по-разному
Итак, захотел я сделать простейшую SQL инъекцию через поле ввода (логин и пароль). Так как у меня не получалось сделать это сразу через...

Почему таймер работает по разному на разных устройствах?
Одно время писал игру (примитивную, картинки, анимации, рисовал прям на форме через QPainter). Делал сборку под андроид и тестил на разных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru