Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2019, 11:34   #1
Nikolaй
Пользователь
 
Регистрация: 07.05.2019
Сообщений: 13
По умолчанию К динамически созданной таблице добавить строку на Java Script

На страницу вывожу динамически создаваемую таблицу с данными из запроса к БД - это работает!
Теперь хочется добавить строку с датой выборки, но так, чтобы это была footer-строка, т.е. последняя строка из этой же таблицы. Формируется это строка Java-скриптом потому, что тут я хочу вывести дату создания отчёта в удобном для чтения формате. Сделать это именно так, как описал, мне пока не удаётся - помещённый в еcho этот скрипт как будто не срабатывает, хотя и ошибок нет.
А вот формирование новой таблицы этот скрипт выполняет и строка выводится, но на неё как бы не действуют стили из CSS. Конечно, я могу и так оставить - всё это я делаю лично для себя, но всё же интересно: можно ли реализовать мою задумка как я описал?
Вот код PHP-файла
Код:
<!DOCTYPE html>
<!--  -->

<html>
<head>
	<meta charset="utf-8">
	<title>Вся таблица</title>
	<link rel="stylesheet" type="text/css" href="style.css" />
</head>

<body>
  <div align="center">
    <a href="index.php">На главную</a><br/>
    <?php
        # require включает и выполняет файл connect.PHP - соединение с БД
        require 'scripts/connect.php';
        #var_dump($_REQUEST);
        $table = trim($_REQUEST['table']);
        #echo $table;
        
        $sth = $pdo->prepare("SELECT * FROM `$table`"); 
        $sth->execute();
        $resarr = $sth->fetchAll(PDO::FETCH_ASSOC);

    // В этом варианте ТАБЛИЦА ВЫВОДИТСЯ как надо и СО СТИЛЯМИ!
    // Сделано по примеру отсюда: https://php.ru/forum/threads/dinamic...tablicu.32102/
    if (!empty($resarr)){
        echo "\n<table class='list_all'>\n";
        echo "<div class='!!!'>\n";
        echo "<thead>\n";
            echo "<tr>";
                echo "<th>Дата</th>";
                echo "<th>кВт дневные</th>";
                echo "<th>Сумма</th>";
                echo "<th>кВт ночные</th>";
                echo "<th>Сумма</th>";
                echo "<th>Всего к оплате</th>";
            echo "</tr>";
        echo "</thead>\n";
        echo "<tbody>\n";        
            foreach ($resarr as $gkey => $row) {
                echo "<tr>";
                    echo "<td>".$row['dt_input']. "</td>";
                    echo "<td>".$row['kW_month_daily']. "</td>";
                    echo "<td>".$row['daily_cost']. "</td>";
                    echo "<td>".$row['kW_month_night']. "</td>";                    
                    echo "<td>".$row['night_cost']. "</td>";
                    echo "<td>".$row['total_cost']. "</td>";
                echo "</tr>\n";
            }#foreach
        echo "</tbody>\n";
        echo "<tfoot>\n";
        /*/ Так выводит только "Информация по состоянию на "
            echo "<th>\n";
            echo "Информация по состоянию на ";
            echo ' .<script language="javascript" type="text/javascript"> ';
            echo ' .<!--';
            echo ' .var d = new Date();';
            echo ' .var day=new Array("Воскресенье","Понедельник","Вторник",';
            echo ' ."Среда","Четверг","Пятница","Суббота");';
            echo ' .var month=new Array("января","февраля","марта","апреля","мая","июня",';
            echo ' ."июля","августа","сентября","октября","ноября","декабря");';
            echo ' .document.write(d.getDate()+ " " + month[d.getMonth()] + " " + d.getFullYear() + " г. - " + day[d.getDay()]);';
            echo ' .//--></script>\n';
         //*/
        echo '<script language="javascript" type="text/javascript">
            <!--
            var d = new Date();
            var day=new Array("Воскресенье","Понедельник","Вторник",
            "Среда","Четверг","Пятница","Суббота");
            var month=new Array("января","февраля","марта","апреля","мая","июня",
            "июля","августа","сентября","октября","ноября","декабря");
            document.write(d.getDate()+ " " + month[d.getMonth()]
            + " " + d.getFullYear() + " г. - " + day[d.getDay()]);
            //--></script>';
        echo "</tfoot>\n";
        echo "</table>\n</div>\n\n";
        error_reporting ( E_ALL );
    }#if
    // 
    ?>
    <!-- Так выводит и со стилем, но как отдельную таблицу -->
    <table style="color: #9CD009; font-size:32px; text-align:center; padding:10px 0px; text-shadow:1px 1px 1px #444;">
    <!-- Стиль из CSS на эту таблицу не действует -->
        <th colspan="6">Информация по состоянию на  <script language="javascript" type="text/javascript">
            <!--
            var d = new Date();
            var day=new Array("Воскресенье","Понедельник","Вторник",
            "Среда","Четверг","Пятница","Суббота");
            var month=new Array("января","февраля","марта","апреля","мая","июня",
            "июля","августа","сентября","октября","ноября","декабря");
            document.write(d.getDate()+ " " + month[d.getMonth()]
            + " " + d.getFullYear() + " г. - " + day[d.getDay()]);
            //--></script>
        </th>
    </table>    
  </div>
  </body>
</html>
К сведению:
1. Всё это на локальном сервере
2. Я самоучка и опыта никакого, всё сделал по примерам из инета


______________________
Используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Serge_Bliznykov; 08.05.2019 в 11:50.
Nikolaй вне форума Ответить с цитированием
Старый 08.05.2019, 11:53   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Nikolaй Посмотреть сообщение
но всё же интересно: можно ли реализовать мою задумка как я описал?
всё можно организовать. и даже намного больше. JS - очень мощная штука.
И, если он разрешён, он может творить со страницей всё, что угодно.

только один вопрос.

Цитата:
Сообщение от Nikolaй Посмотреть сообщение
Формируется это строка Java-скриптом потому, что тут я хочу вывести дату создания отчёта в удобном для чтения формате.
а кто Вам мешает на PHP вывести в каком угодно "удобном для чтения формате"?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.05.2019, 16:18   #3
Nikolaй
Пользователь
 
Регистрация: 07.05.2019
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
всё можно организовать. и даже намного больше. JS - очень мощная штука.
И, если он разрешён, он может творить со страницей всё, что угодно.

только один вопрос.


а кто Вам мешает на PHP вывести в каком угодно "удобном для чтения формате"?
Спасибо за отзыв!
Я не сомневаюсь, что можно, только вот знать бы как!
Решение на PHP нашёл
Код:
<?php
// date-new.php 
    function dateName($date) { // Роспись даты в русском формате
        # https://php.ru/forum/threads/data-na-russkom-jazyke.37809/#post-308782
        $monthes = array(
            1 => 'Января', 2 => 'Февраля', 3 => 'Марта', 4 => 'Апреля',
            5 => 'Мая', 6 => 'Июня', 7 => 'Июля', 8 => 'Августа',
            9 => 'Сентября', 10 => 'Октября', 11 => 'Ноября', 12 => 'Декабря'
        );

        $days = array(
            'Воскресенье', 'Понедельник', 'Вторник', 'Среда',
            'Четверг', 'Пятница', 'Суббота'
        );

        //print_r($date); // Вернр
        $result = "";
        $convert_date = strtotime($date);
        //print_r($convert_date); // дата в формате временной метки - десятизначное число 
        $day = date('j',$convert_date);
        $month = date('n',$convert_date);
        $year = date('Y',$convert_date);
        $w = date('w',$convert_date);

        //echo $day . " " . $monthes[$month] . " " . $year ." г.  - " . $days[$w] . "<br/>";
        $result = $day . " " . $monthes[$month] . " " . $year ." г.  - " . $days[$w] . "<br/>";
        return $result;
    }//*/
?>
Но во-первых: так и не смог подключить этот файл из папки 'scripts'
А вот такие конструкции не работают!
Код:
echo "<th colspan='6'>" . include 'scripts/date_new.php' . "</th>";
echo "<th colspan='6'>" . require 'scripts/date_new.php' . "</th>";
Nikolaй вне форума Ответить с цитированием
Старый 08.05.2019, 16:52   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

для начала разберите Ваш исходный пример.
я его чуть-чуть подправил

Код:
<!DOCTYPE html>
<!--  -->

<html>
<head>
	<meta charset="utf-8">
	<title>Вся таблица</title>
	<link rel="stylesheet" type="text/css" href="style.css" />

<style>
.myFooter{
color: #9CD009; 
font-size:32px; 
text-align:center; 
padding:10px 0px; 
text-shadow:1px 1px 1px #444;
}
</style>
</head>

<body>
  <div align="center">
    <a href="index.php">На главную</a><br/>
    <?php
        # require включает и выполняет файл connect.PHP - соединение с БД
        require 'scripts/connect.php';


        //var_dump($_REQUEST);
        $table = trim($_REQUEST['table']);
        //echo $table;
	//$table='stest';
        
        
        $sth = $pdo->prepare("SELECT * FROM `$table`"); 
        $sth->execute();
        $resarr = $sth->fetchAll(PDO::FETCH_ASSOC);

    if (!empty($resarr)){
        echo "\n<table class='list_all'>\n";
        echo "<div class='!!!'>\n";
        echo "<thead>\n";
            echo "<tr>";
                echo "<th>Дата</th>";
                echo "<th>кВт дневные</th>";
                echo "<th>Сумма</th>";
                echo "<th>кВт ночные</th>";
                echo "<th>Сумма</th>";
                echo "<th>Всего к оплате</th>";
            echo "</tr>";
        echo "</thead>\n";
        echo "<tbody>\n";        
            foreach ($resarr as $gkey => $row) {
                echo "<tr>";
                    echo "<td>".$row['dt_input']. "</td>";
                    echo "<td>".$row['kW_month_daily']. "</td>";
                    echo "<td>".$row['daily_cost']. "</td>";
                    echo "<td>".$row['kW_month_night']. "</td>";                    
                    echo "<td>".$row['night_cost']. "</td>";
                    echo "<td>".$row['total_cost']. "</td>";
                echo "</tr>\n";
            }#foreach
        echo "</tbody>\n";
        echo "<tfoot class='myFooter'>\n";
	echo "<tr><td><span id='MyPrettyDate'>Дата тут</span><td></tr>\n";
        echo "</tfoot>\n";
        echo "</table>\n</div>\n\n";
        error_reporting ( E_ALL );

        echo '<script language="javascript" type="text/javascript">
            <!--
            var d = new Date();
            var day=new Array("Воскресенье","Понедельник","Вторник",
            "Среда","Четверг","Пятница","Суббота");
            var month=new Array("января","февраля","марта","апреля","мая","июня",
            "июля","августа","сентября","октября","ноября","декабря");
            document.getElementById("MyPrettyDate").innerHTML = d.getDate()+ " " + month[d.getMonth()]
            + " xx " + d.getFullYear() + " г. - " + day[d.getDay()];
            //--></script>';

    }#if
    // 
    ?>
  </div>
  </body>
</html>
основная ошибка была в том, что в теге <tfoot> вы забыли указать теги <tr><td>

ну и вместо document.write я использовал запись в элемент DOM по его ID
document.getElementById()
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.05.2019, 16:58   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Nikolaй Посмотреть сообщение
Но во-первых: так и не смог подключить этот файл из папки 'scripts'
А вот такие конструкции не работают!
подключить файл - это не то же самое, что использовать функцию(ции) из него.

использовать это так:
Код:
<!DOCTYPE html>
<!--  -->

<html>
<head>
	<meta charset="utf-8">
	<title>Вся таблица</title>
	<link rel="stylesheet" type="text/css" href="style.css" />

<style>
.myFooter{
color: #9CD009; 
font-size:32px; 
text-align:center; 
padding:10px 0px; 
text-shadow:1px 1px 1px #444;
}
</style>
</head>

<body>
  <div align="center">
    <a href="index.php">На главную</a><br/>
    <?php
        # require включает и выполняет файл connect.PHP - соединение с БД
        require 'scripts/connect_PDO.php';
	include 'scripts/date_new.php';


......        
        
        $sth = $pdo->prepare("SELECT * FROM `$table`"); 
        $sth->execute();
        $resarr = $sth->fetchAll(PDO::FETCH_ASSOC);

    if (!empty($resarr)){
        echo "\n<table class='list_all'>\n";

......

        echo "</tbody>\n";
        echo "<tfoot class='myFooter'>\n";
	echo "<tr><td>".dateName(date("d.m.y"))."<td></tr>\n";
        echo "</tfoot>\n";
        echo "</table>\n</div>\n\n";

....

Последний раз редактировалось Serge_Bliznykov; 08.05.2019 в 17:07.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.05.2019, 17:49   #6
Nikolaй
Пользователь
 
Регистрация: 07.05.2019
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
для начала разберите Ваш исходный пример.
я его чуть-чуть подправил
Спасибо! Работает, но...

Цитата:
основная ошибка была в том, что в теге <tfoot> вы забыли указать теги <tr><td>
У меня тут НЕ ошибка - я это сделал умышленно с целью разместить дату в одной объединенённой ячейке по ширине таблицы (colspan="6").
Теперь же дата выводится в одну ячейку (первую)
Попробовал вернуть тег <th colspan='6' > и добавил свойство colspan к <tr> ,

Код:
        echo "<tfoot class='myFooter'>\n";
        echo "<th colspan='6'>Информация по состоянию на </th>";
	echo "<tr colspan='6'><td><span id='MyPrettyDate'>Дата тут</span><td></tr>\n";
        echo "</tfoot>\n";
но это ничего не дало

Цитата:
ну и вместо document.write я использовал запись в элемент DOM по его ID
document.getElementById()
За это отдельное и большое Вам Спасибо! - это для меня новое открытие

Последний раз редактировалось Nikolaй; 08.05.2019 в 17:55.
Nikolaй вне форума Ответить с цитированием
Старый 08.05.2019, 18:23   #7
Nikolaй
Пользователь
 
Регистрация: 07.05.2019
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
подключить файл - это не то же самое, что использовать функцию(ции) из него.

использовать это так:
Код:
....
        echo "</tbody>\n";
        echo "<tfoot class='myFooter'>\n";
	echo "<tr><td>".dateName(date("d.m.y"))."<td></tr>\n";
        echo "</tfoot>\n";
        echo "</table>\n</div>\n\n";

....
Я так уже пробовал, но у меня выдаёт ошибку "Fatal error: Uncaught Error: Call to undefined function dateName()"
т.е. функция как бы не определена. Я это понимаю так, что обращение к файлу date_new.php не происходит!
Признаюсь, для меня это пока очень туманно: если нет обращения к файлу, то как из него можно взять функцию?
У меня в голове свербит, что надо всё же прописать типа
<link ... "scripts/date_new.php" />

Последний раз редактировалось Nikolaй; 08.05.2019 в 18:25.
Nikolaй вне форума Ответить с цитированием
Старый 08.05.2019, 20:52   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Nikolaй Посмотреть сообщение
т.е. функция как бы не определена. Я это понимаю так, что обращение к файлу date_new.php не происходит!
а эту строчку не забыли?

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
<body>
  <div align="center">
    <a href="index.php">На главную</a><br/>
    <?php
        # require включает и выполняет файл connect.PHP - соединение с БД
        require 'scripts/connect.php';
	include 'scripts/date_new.php';
а в папке scripts (рядом с connect.php) точно лежит файл date_new.php (см. ваш пост #3)?!

замените include на require
если файла нет - будет ошибка (а не WARNING, как в случае include
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.05.2019, 04:40   #9
Nikolaй
Пользователь
 
Регистрация: 07.05.2019
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а эту строчку не забыли?



а в папке scripts (рядом с connect.php) точно лежит файл date_new.php (см. ваш пост #3)?!

замените include на require
если файла нет - будет ошибка (а не WARNING, как в случае include
Файл date_new.php в папке скриптов есть (и был там!) Но я не знал как его подключить! Попытка сделать по аналогии со строкой кода "require 'scripts/connect.php';" мне ничего не дала и я потерялся. А причина была в том, что я не знал как обратиться к функции внутри его. Теперь знаю, Спасибо!

Спасибо Вам так же за новую для меня информацию по использованию js-скрипта! Теперь я хотя бы имею рабочий пример применения js в php и даже в двух вариантах вывода на страницу. Спасибо!

Теперь о том, что у меня в итоге получилось с Вашей помощью при добавлении строки к динамически созданной таблице.
Вот все варианты:
1.
Код:
echo "<th colspan='6'>Информация по состоянию на ". dateName(date("d.m.y")) . "</th>";
Это для меня самый лучший вариант - всё как надо! Делается скриптом date_new.php
Скрин результата прилагаю

2.
Код:
echo "<tr colspan='6'><td><span id='MyPrettyDate'></span><td></tr>";
Это выводит Java Script, но тут есть НО! - colspan='6' работает не так как надо: вывод в одну ячейку. Возможно я чего-то так и не понял, но, переставляя свойство colspan в <td>, или даже в оба тега сразу, нужного результата так и не увидел.

3.
Код:
echo "<th colspan='6'><span id='MyPrettyDate'></span><th>";
Так лучше, но строка получается шире основной таблицы. И при этом у меня вопрос: ведь тег "<th> - это тег заголовка, и в футере он как бы по определению не должен быть! Но мой эксперимент показал, что он тут работает. Значит это возможно?

4.
Код:
echo "<th colspan='6'>".dateName(date("d.m.y"))."<th>";
Результат выглядит так же, как от варианта 3
================================
А это результат от echo "<th colspan='6'>Информация по состоянию на ". dateName(date("d.m.y")) . "</th>";
Изображения
Тип файла: png ehergy.png (50.4 Кб, 122 просмотров)

Последний раз редактировалось Nikolaй; 09.05.2019 в 05:03.
Nikolaй вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрытие динамически созданной вкладки exyl Общие вопросы Delphi 33 26.02.2018 00:14
Изменение размера динамически созданного StringGrid на динамически созданной форме loom12 Общие вопросы Delphi 2 08.09.2014 15:35
Как добавить строку в таблице в Word используя VBA? 3orp Microsoft Office Word 1 05.07.2013 14:07
Работа с динамически созданной формой Airou C++ Builder 1 12.07.2011 10:58
Прозрачность динамически созданной формы Lime Общие вопросы .NET 1 03.04.2010 16:25