Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/47: Рейтинг темы: голосов - 47, средняя оценка - 4.83
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232

Как создать динамические страницы в РНР

09.05.2024, 13:32. Показов 12095. Ответов 164

Студворк — интернет-сервис помощи студентам
Я пишу свой сайт с форумом. Мне нужно, чтобы 2 файла profile.php и vopros.php изменяли своё содержимое в зависимости от id юзера и id вопроса соответственно. И чтобы остальные файлы рнр и с другими расширениями не перенаправлялись на точку входа.
Т.е. мне нужно создать движок на базе данных, если я правильно поняла. Для этого я создала файл .htaccess и файл точки входа vhod.php.
Я честно пыталась разобраться в теории и синтаксисе .htaccess, но мне это не очень удалось.
Я написала файл .htaccess:
Code
1
2
3
4
5
6
7
8
9
RewriteEngine on
RewriteBase /
# Запретить индексацию каталогов
Options – Indexes
# следующее за этими директивами будет касаться только #виртуальных URL для которых нет папки или файла на диске #сервера.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#Мы перенаправляем все запросы виртуальных url на наш файл точки входа vhod.php
RewriteRule ^.*$ vhod.php [NC,L]
А также файл vhod.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
<?php
$link = mysqli_connect("localhost", "airin", "root", "vv_bd");  
mysqli_set_charset($link, 'utf8mb4');
 
if($_SERVER['REQUEST_URI'] =='/'){
    //Имя страницы
    $Page = 'index'; 
    //Имя модуля
    $Module = 'index';
}else{
    //
$URL_Path = parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH);
//Определяем имя страницы
$URL_Parts = explode('/', trim($URL_Path,' /'));
//Имя страницы
$Page = array_shift($URL_Parts);
//Имя модуля
$Module = array_shift($URL_Parts);
//Разбор параметров id/2
if(!empty($Module)){
    $Param = array();
    for($i = 0; $i < count($URL_Parts); $i++){
    $Param [$URL_Parts[$i]] = $URL_Parts[++$i];
    }
}
}
 
//Пишем страницу входа
if($Page == 'index')include('page/vhod.php');
 
    //Пишем остальные динамические страницы
else if($Page == 'vopros') include('page/vopros.php');
else if($Page == 'profile') include('page/profile.php');
?>
Но выводится ошибка: 500 Internal Server Error.
И вообще сайт не открывается.

Пробовала записать правило только для динамической страницы. Так:
Code
1
2
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?id=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?id=$1
Так:
Code
1
RewriteRule ^(.*)$ profile.php? id=$1  [NC,L]
И так:
Code
1
RewriteRule ^(.*)$ profile.php?/$1  [NC,L]
Но ошибка вылазит та же.
Видимо, я неправильно понимаю, как это работает.
Что у меня не так с .htaccess и можно ли указать правило только для двух файлов и как это сделать правильно?
И ещё один вопрос: как (в каком формате) указывать название этих двух файлов?
vopros.php?, vopros.php, или vopros.php?id=$1
И их название в файле mytytles.php:
Code
1
2
3
'/vv2/vopros.php?' => 'Вопрос',
'/vv2/vopros.php' => 'Вопрос',
'/vv2/vopros.php?id=$1' => 'Вопрос',
Или как-то ещё?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.05.2024, 13:32
Ответы с готовыми решениями:

Можно ли на РНР создавать динамические страницы?
Умею создавать статические HTML- страницы, но это не устраивает. Хочу сделать динамическую страничку в сайте, чтобы изображение менялось...

Как передать РНР скрипту имя страницы, вызвавшей процесс?
В начале страницы устанавливаем РНР код, позволяющий определить ее имя: $str = $_SERVER; Далее производим вывод через АЯКС: ...

Как в текущий файл на рнр подрузить массив из другого файла на рнр?
Мне нужно подгружать массив с данными из mysql одного файла на рнр в текущий файл рнр с выводом точек на график. Для отработки этого режима...

164
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
18.05.2024, 09:13  [ТС]
Студворк — интернет-сервис помощи студентам
sad67man, ну хоть кто-то нормальный Спасибо, жаль, что немного поздно. Я уже сама к этому пришла.

Добавлено через 8 минут
DmitriyLutsenko, Во-первых, решение я нашла абсолютно самостоятельно. И если бы я ждала готового решения на форуме, я бы и по сей день вопрос не решила.
И во-вторых, Фантом предлагал заведомо неприемлемые способы и я убивала время, пытаясь их реализовать. А если он действительно разбирается в вопросе, то должен был знать, что есть другое, гораздо более простое решение, и не морочил бы мне голову с тем, что мне в данной ситуации совершенно не нужно.

Добавлено через 7 минут
ft4l, виртуальных файлов два: vopros.php и profile.php. Остальные файлы неизменные, а файла otvet.php нет вообще, т.к. ответы у меня в одном файле с вопросом, как и на этом сайте. Видимо, я плохо объяснила ситуацию. Спасибо, что пытались помочь.
1
 Аватар для DmitriyLutsenko
76 / 62 / 16
Регистрация: 13.07.2020
Сообщений: 262
18.05.2024, 10:15
Цитата Сообщение от Sollita Посмотреть сообщение
DmitriyLutsenko, Во-первых, решение я нашла абсолютно самостоятельно. И если бы я ждала готового решения на форуме, я бы и по сей день вопрос не решила.
Думаю, полемикой "Кто прав, кто виноват" заниматься бессмысленно

Если Вам в дальнейшем будет интересна разработка форума с возможностью гибкого расширения функционала, то я рекомендую смотреть в сторону MVC движка Да, это может быть сложновато, но как самописный фреймворк будет готов, Вы сможете писать функционал страниц практически под копирку)

Я учился основам MVC по этому курсу на ютубе Уроки реально интересные, плюс рассматриваются роутинги с ЧПУ.
https://www.youtube.com/watch?v=-kacVilgyEI
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
18.05.2024, 13:17  [ТС]
DmitriyLutsenko, спасибо, но я пока не собираюсь зарабатывать программированием. Мне нужен сайт и я его себе пишу
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
18.05.2024, 13:23
Цитата Сообщение от Sollita Посмотреть сообщение
Но я это и без Вас знала. Я не знала - как. И мои настойчивые уговоры так и не заставили Вас ответить на этот простой вопрос.
Я вам указал номер вашего поста, где вы "вывалили" решение, сами не понимая, что это. И дописал, что добавить, чтобы хоть немного повысить безопасность.

Цитата Сообщение от Sollita Посмотреть сообщение
Вы у меня украли неделю времени.
А вы у меня. С учетом того, что мое время стоит дороже, вы мне должны. Как расплачиваться будете?

Цитата Сообщение от Sollita Посмотреть сообщение
Но нет, Вы старательно писали ни о чём. Самое ужасное, что Вы же и другим так же морочите голову и совесть Вас не мучает...
Вы просто не поняли, о чем я писал и зачем. Ну, это ничего. Пока понятливых хватает. Вы бы за собой последили. Новичок ни в зуб ногой в разбираемом вопросе, с "понималкой" около нуля, но зато с гонором на все сто, как будто это он все знает, а не наоборот. Мракобесие

Добавлено через 4 минуты
Цитата Сообщение от Sollita Посмотреть сообщение
виртуальных файлов два: vopros.php и profile.php. Остальные файлы неизменные, а файла otvet.php нет вообще, т.к. ответы у меня в одном файле с вопросом, как и на этом сайте. Видимо, я плохо объяснила ситуацию.
Пользовались бы общепринятыми терминами, всем бы было проще. Но вы даже после моих пояснений по поводу терминов (видимо, это у вас называется "морочить голову") все равно несете свою пургу.
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
18.05.2024, 14:30  [ТС]
Phantom-84, Вы вообще помните, что находитесь в разделе РНР для начинающих? Естественно, я не понимала, о чём пишу. Если бы понимала, то вопрос не задавала бы. И что Вам мешало объяснить мне, как работать с GET параметрами, а не писать рассуждения ни о чём?
То, что я не поняла, что Вы писали и зачем - это исключительно Ваша вина. Вас не смущает, что я таки разобралась в вопросе? Значит, кто-то умеет выражать свои мысли гораздо лучше Вас. Так, чтобы я поняла
В то, что хоть кому-то Вы помогли хоть по какому-то вопросу, я поверю только если Вы пришлёте ссылку на такую тему Очень рада буду почитать
Что касается времени: вас никто не заставлял писать в мой теме, Вы это сделали совершенно добровольно. А вот я была вынуждена читать Ваши ответы, потому что это моя тема. Так что, за потерянное время должны Вы мне.

Добавлено через 55 минут
Phantom-84, ничего, что Ваши "общепринятые термины" даже гугл не знает? А вот термин "виртуальные пути", "виртуальный url" знает. Если есть реально существующие файлы, то есть и виртуальные. Те , которые реально не существуют, но получаются в результате вставки в шаблон каких-то get параметров.
И как можно не понять, что такое виртуальный файл? Виртуальный путь ведёт к виртуальному файлу. Всё логично и понятно.
0
 Аватар для DmitriyLutsenko
76 / 62 / 16
Регистрация: 13.07.2020
Сообщений: 262
19.05.2024, 00:57
Цитата Сообщение от Sollita Посмотреть сообщение
DmitriyLutsenko, спасибо, но я пока не собираюсь зарабатывать программированием. Мне нужен сайт и я его себе пишу
Это просто моя рекомендация по дальнейшему развитию структуры/движка Вашего сайта, не более. Это Ваш проект, как ему жить и развиваться определяете только Вы.

Цитата Сообщение от Sollita Посмотреть сообщение
ничего, что Ваши "общепринятые термины" даже гугл не знает? А вот термин "виртуальные пути", "виртуальный url" знает. Если есть реально существующие файлы, то есть и виртуальные. Те , которые реально не существуют, но получаются в результате вставки в шаблон каких-то get параметров.
Да, есть такое дело, просто понятие "Виртуальный файл" на практике мало используется.

Вместо этого привычней на слух понятие "виртуальная страница" - страница, адрес к файлу которой физически не существует в файловой системе сайта. Но сам адрес обрабатывается и перенаправляется сервером к ответственному за отображение этой страницы файла-скрипта. И все благодаря распознаваемым сервером параметрам, записанным в адресе страницы.
GET-параметры лишь один из способов создания виртуальной страницы.
Есть еще и виртуальные страницы на основе ЧПУ, к примеру, реализованная другим способом логика в "физическом" файле vopros.php запросто обработает запрос к виртуальной странице /vopros/categoriya-pomoshi/1 (Обратится к разделу categoriya-pomoshi и получит из нее вопрос по 1-му ID) и выведет нужный контент.
1
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
19.05.2024, 09:30  [ТС]
DmitriyLutsenko, спасибо, что понятно объяснили про терминологию Оправдываете свой девиз.
Однако термин "виртуальная страница" меня устраивает, а "файл-скрипт" мне не нравится, потому что у меня в сознании слово "скрипт" прочно связано с Ява Скрипт, а на неё у меня аллергия. Я думаю, как у всех, кто начинал с Явы. Скрипты я изредка использую, конечно, но только вынужденно.Поэтому называть файл-шаблон файлом-скриптом я не буду. Извините.
Про ЧПУ я читала. Идея хорошая, реализовывать лень. У меня ведь уже реализована совсем другая логика. Но если вдруг захочется написать ещё один сайт, обязательно использую.
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
19.05.2024, 19:06
Цитата Сообщение от Sollita Посмотреть сообщение
ничего, что Ваши "общепринятые термины" даже гугл не знает?
Любите вы пургу разгонять на ровном месте. Приведите пример хоть одного общепринятого термина, который я использовал и который не знает гугл

Наверное, опять память подкачала. Еще раз для тех, кому лень на несколько страниц назад вернуться:
Цитата Сообщение от Phantom-84 Посмотреть сообщение
С такими рассуждениями вас спецы не поймут. Для них второй вариант (/vopros/add) - более "виртуальный". А первый хотя и "виртуальный", но намекает, что за его обработку скорее всего отвечает физический файл /vopros.php, поэтому лучше использовать общепринятые термины "(динамическая) страница" для результата обработки и "(физический) файл" для файла-обработчика, в который поступают запросы от Web-сервера.
Цитата Сообщение от Sollita Посмотреть сообщение
"виртуальные пути", "виртуальный url"
Этот ваш "виртуальный url" - самый что ни на есть реальный Кстати, словосочетание "виртуальные пути" вполне уместное, когда хотят подчеркнуть, что путям в адресе (URLе) нет соответствия в ФС. Иначе будет понятнее "путь в адресе (URLе)" или "путь из адреса (URLа)". Можете посмотреть в Википедии, из каких частей состоит URL.

Добавлено через 5 минут
У современных сайтов все пути в адресах страниц "виртуальные". Даже основной обработчик для главной страницы вполне может находиться не в индексном файле корня сайта, так что не удивляйтесь, если по адресу /index.php и т.п. вы будете получать 404-ую. В корне (и глубже) обычно хранятся только т.н. "статические файлы" (хотя они могут храниться на др. хостах, так что вполне реальна ситуация, когда корень полностью пустой). Для них обычно пути в адресе и пути в ФС (если считать от корня сайта) совпадают, так что Web-сервер может выводить такие файлы самостоятельно, не обращаясь к PHP и т.п. Кстати, к адресам статических файлов обычно можно спокойно добавлять query_string (Web-сервер просто не будет ее учитывать), что может быть полезно для сброса кеша браузера. Т.е., когда хотите разместить файл под тем же именем и чтобы пользователь гарантированно увидел изменения, добавьте к его адресу ?version=2 и т.п.
1
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
19.05.2024, 19:52  [ТС]
Phantom-84, это Вы что-то сделали, что мне пришлось менять пароль и сайт начал глючить?

Первый мой ответ испарился. Но я повторюсь
Это о "динамических страницах":
"На самом деле, вопрос не вполне прозрачен.

Если речь идёт о "статических" и "динамических" страницах относительно их поведения в браузере, то статическая страница содержит только статические элементы (текст, картинки и пр.) . Динамической в данном случае является страница, использующая технологии JavaScript, AJAX. То есть динамическая страница в данном случае — та, которая изменяет свои данные в зависимости от действий пользователя (например, технология AJAX позволяет подгружать данные и вставлять их в текущую страницу)

Есть ещё одно разделение на динамические и статические — по способу хранения. Статическая страница есть файл HTML, который хранится на сервере. Динамическая же в виде отдельного файла не существует, а формируется серверными языками (PHP, ASP и др. ) в момент обращения пользователя к серверу.

На сегодняшний день сайтов, состоящих из статических по способу хранения страниц, почти не существует. Поэтому понятие статики/динамики несколько переосмыслено.

Если на сайте форма отправки чего-либо, но нет механизмов, которые меняют текущую страницу динамически (упрощая, скажу, например, про кнопку изменения цвета фона) , — страница считается статической по способу поведения в браузере, но наверняка является динамической по способу хранения на сервере - т. к. , как я уже сказал, других сайтов сейчас не сыщешь. "

Если слово имеет несколько значений в одной сфере, оно никак не может быть термином.
"Те́рмин (от лат. terminus «предел, граница») — слово или словосочетание, являющееся названием строго определённого понятия какой-нибудь области науки, техники, искусства и так далее["

Я и не спорю, что "виртуальный url" вполне реален, но я-то использовала термин "виртуальный файл", т.е. файл, который в папке сайта не существует. А слово динамический вполне может относиться и к файлу, который в папке сайта существует

А ГУГЛ не знает, что значит Ваш "общепринятый термин" " стартовый код" И, похоже, что Вы сами тоже

Добавлено через 3 минуты
Phantom-84, может, Вы уже перестанете всякую чушь писать? Ведь если кому-то понадобится ответ на заданный мною вопрос, то из-за Ваших бессмысленных простыней он до ответа не доберётся
0
Невнимательный
 Аватар для ft4l
3141 / 1351 / 362
Регистрация: 08.02.2013
Сообщений: 7,900
Записей в блоге: 2
19.05.2024, 20:16
Цитата Сообщение от Sollita Посмотреть сообщение
Виртуальный путь
Лично как по мне, тоже,)
виртуальные пути звучит как внутреннее перенаправление с mod_rewrite.
а так QUERY_SRING или строка запроса... всё что после ? это часть uri или адреса
путь к какому-нибудь file.php вроде более-менее похож на реальный )) от корня сайта

А файлы это в ФС... + там симлинки, хардлинки и виртуальные диски ))

я предлагал вариант с PATH_TRANSLATED ... типа /dir/file.php/otvet/1/
первая часть реальнее второй

Уникальность этих uri как-бы может иметь значение, если для ботов
например с обычной query_string, на запросы адресов:
/file?post=3&pg=3 и /file?pg=3&post=3
php выполнит одинаково, но поисковики могут не понять... если где-то нароют две такие ссылки
так-то может и поисковики на такое уже обучены, и вариантов масса как выкрутиться
от
<link rel="canonical" href="https://example.com/file?post=3&pg=3" />
или Sitemap или просто неразбрасывания изменённых ссылок.)
до отлавливания изменённых обращений и редиректа на нужные
Но эт мелочи хотя какие-нибудь ЧПУ и SEO-оптимизации многие сайтоделы наверняка преподнесут как киллер-фичу .)


Цитата Сообщение от Sollita Посмотреть сообщение
"скрипт" прочно связано с Ява Скрипт
Скрипты это всё что исполняется из такого как есть, текстового файла с кодом... считываемого в run-time интерпретаторов.
... интерпретируемое вобщем.
JS это да те ещё бывают костыли, когда надо чтобы один код работал как надо,
на всём зоопарке браузеров-интерпретаторов.
В php, кроме различий OS и SAPI, только что-то вроде >= 5.4, 5.5, 7.0, 7.3, 8.0... особо без костылей для поддержки всего)
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
19.05.2024, 21:03  [ТС]
ft4l, в любом случае скрипт - это часть файла, а не синоним слова "файл", поэтому слово "файл-скрипт"противно моему филологическому нутру
Извините, можно я ещё один вопрос задам? Я целый день сегодня игралась с датами. Я решила выводить не только дату, но и время написания вопроса, ответа, комментария. Вроде бы всё сделала правильно.
Поменяла формат этого параметра в БД на datetime(кажется так это пишется). В файле после получения значения параметра "дата" из БД я его форматирую и потом вставляю в страницу вместе с остальными параметрами( логином и прочим). Все параметры, кроме даты, вставляется нормально. Т.е. например, текст ответа и автор в каждом из ответов разные, а дата и время почему-то во всех ответах такие же, как в первом ответе на этой странице. Причём в БД дата и время в каждом ответе указаны правильные и разные. Я проверила, изменение значения параметра "дата" происходит ещё до форматирования. Я вообще не понимаю, как это возможно... Может, Вы такое встречали? Как вообще может только один параметр из БД выводиться неправильно?
Буду благодарна хоть за какие-то идеи.
1
Невнимательный
 Аватар для ft4l
3141 / 1351 / 362
Регистрация: 08.02.2013
Сообщений: 7,900
Записей в блоге: 2
19.05.2024, 21:58
Цитата Сообщение от Sollita Посмотреть сообщение
слово "файл-скрипт"
Просто php-файл и php-скрипт звучит, а javascsript-скрипт не звучит... но файл норм.)

Причём привычное "inline javascript" применительно к php , как-бы наоборот
скорее там "inline html" , в php-скриптах

Цитата Сообщение от Sollita Посмотреть сообщение
datetime
пишется так... выглядит так же как timestamp, но с нюансами
Code
1
2
3
4
5
6
7
8
9
The DATETIME type is used for values that contain both date and time parts. 
MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format.
 The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. 
...
The TIMESTAMP data type is used for values that contain both date and time parts.
 TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC. 
 
MySQL converts TIMESTAMP values from the current time zone to UTC for storage,
 and back from UTC to the current time zone for retrieval.
Цитата Сообщение от Sollita Посмотреть сообщение
изменение значения параметра "дата" происходит ещё до форматирования.
больше похоже на какую-то ошибку при выводе... типа не те имена/ключи в массиве ... если прям одинаковые выводит.

или например fetch_assoc() перезаписывает значения с одинаковыми именами
PHP
1
2
3
4
$r = $DB->query('select xauth, d.upd_ts, i.upd_ts from x_uid i LEFT JOIN x_udata d USING(uId)');
while($row = $r->fetch_assoc())
    echo '
        <dd><xmp>', var_export($row, 1), '</xmp></dd>';
array (
'xauth' => 'XUgCwg7kwmMclCBTm4jCTWiwXxk7Srg6rDE0AjTlByWh',
'upd_ts' => '2024-05-14 18:20:10',
)

в запросе выборка трёх разных, перезаписало второе последним с таким-же именем
... Алиасы бывает полям надо задать или можно с fetch_row() использовать такое
1
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
19.05.2024, 22:22
Цитата Сообщение от Sollita Посмотреть сообщение
А ГУГЛ не знает, что значит Ваш "общепринятый термин" " стартовый код"
"Стартовый код" - это код, который находится в начале.

Цитата Сообщение от Sollita Посмотреть сообщение
Вы уже перестанете всякую чушь писать?
Это не чушь. Вы просто пока не созрели до понимания написанного мной. Ну, ладно пойду "морочить голову" другим за норм. деньги, а не за хамские выпады. Мой альтруизм иссяк. Хорошо, что не все филологи такие
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
19.05.2024, 23:04  [ТС]
ft4l, у меня fetch_assoc().. А что значит "перезаписывает значения с одинаковыми именами"? Может, это потому, что у меня несколько ответов на каждый вопрос? Т.е. для одного id_vopr несколько значений id ответов и соответственно "data". Но почему перезаписывается только параметр "data", а остальные не перезаписываются?
А зачем задавать псевдонимы полям?
Спасибо, буду завтра дальше разбираться.

Добавлено через 1 минуту
Phantom-84, Удачи.
Р.S. все филологи такие. Они используют слова исключительно в соответствии с их значением.
1
Невнимательный
 Аватар для ft4l
3141 / 1351 / 362
Регистрация: 08.02.2013
Сообщений: 7,900
Записей в блоге: 2
20.05.2024, 05:10
Цитата Сообщение от Sollita Посмотреть сообщение
зачем задавать псевдонимы полям?
чтобы такого не было
PHP
1
2
3
4
$r = $DB->query('SELECT xauth, d.upd_ts `UPD-1`, i.upd_ts AS `UPD-2` FROM x_uid i LEFT JOIN x_udata d USING(uId)');
while($row = $r->fetch_assoc())
    echo '
        <dd><xmp>', var_export($row, 1), '</xmp></dd>';
array (
'xauth' => 'XUgCwg7kwmMclCBTm4jCTWiwXxk7Srg6rDE0AjTlByWh',
'UPD-1' => '2024-04-14 18:42:31',
'UPD-2' => '2024-05-14 18:20:10',
)


Добавлено через 13 минут
Цитата Сообщение от Sollita Посмотреть сообщение
перезаписывает значения
имел ввиду то, что ассоциативные массивы реализованы таким образом,
что невозможно иметь несколько значений с одним ключом/именем .

Например если http-запрос будет /otvet.php?vopros=1&pg=2&vopros=2&vopros=3
то в $_GET будет только 'vopros'=>'3', 'pg'=>'2'
но в QUERY_STRING будет QUERY_STRING как есть.
... если вообще QUERY_STRING ) ... или придётся вычленять с REQUEST_URI )))
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
20.05.2024, 12:59  [ТС]
ft4l, я прочитала про fetch_assoc(). Нет, у меня нет двух столбцов с одинаковыми именами.
Даже в 4 разных таблицах у дат у меня разные имена: date, datev, dateo, datec.
Поищу другие варианты.

Добавлено через 2 часа 35 минут
ft4l,странно, я вставила в файл:
$quer = mysqli_query($link,"SELECT * FROM otvets
WHERE id = '{$id_vopr}' ORDER BY id DESC");
//Выводим все значения dateo из этих строк
while($ro = mysqli_fetch_array($quer)){
echo $ro['dateo'] . '<br/>';
}
И оно вывело правильно. Так же, как и в БД:
2024-05-15 00:00:00
2024-05-20 10:35:00
Может быть, мне нужно вместо foreach использовать цикл while? Это может помочь?

Кстати, форматирование дат я пробовала убрать,но это проблему не решило, как я и предполагала.
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
21.05.2024, 12:27  [ТС]
ft4l, я решила проблему. Поменяла foreach на цикл while и всё стало выводиться правильно. Понятия не имею - почему. Выложу здесь код, может быть кому-то пригодится:
//Достаём значения данных из таблицы otvets
$quer = mysqli_query($link,"SELECT * FROM otvets
WHERE id = '{$id_vopr}' ORDER BY id DESC");

$row8 = mysqli_fetch_array($quer);
//Если есть значение contentO (текст ответа) и др.
if (!empty($row8['contentO']) and !empty($row8['id_otv'])
and !empty($row8['dateo'])and !empty($row8['experto'])) {
//Выводим Ответы
echo '<p style="color:#FE9A2E;font-size: 22px "><b>Ответы<b></p><br/></div>
<div class="otvs">';

//Достаём значения из БД

$ball=$row8['ball']; // Это последнее значение из БД
$id_otv=$row8['id_otv']; // из БД
$id_v=$row8['id']; //получаю из т. otvets БД id вопроса


...

//Создаю таблицу для ответов на странице
echo "<table><tr><th></th><th></th><th></th></tr>";
//Выводим значения из БД на странице в блоке ответов
while($row8 = mysqli_fetch_array($quer)){
echo "<tr>";

//Вставляю счётчик с id_otv
echo "<td style='width: 210px'>" . '<div class="sch">';
//Вставка счётчика

echo' <form method="post" class="forma" >
<input type="hidden" name="id_otv" value="', $row8["id_otv"], '"/>
<button class="mysubmit" name="like" value="-"/> - </button>
<b class="sum">', $row8["ball"], '</b>
<button class="mysubmit" name="like" value="+"/> + </button>
<button class="mysubmitlo" name="like" value="++">Лучший ответ</button>
</form>
</div></td>
';


//Вставляю ответ
echo "<td>" . '<div class="otvsT"><p>' . $row8["contentO"] . '</p></div><br/>' . "</td>";
//Вставляю дату и автора ответа
echo "<td>" . '<div class="kvadrO"><div class="datav"><p style="color:#A4A4A4;font-size: 12px"><b>Написан </b>'
. date('d-m-Y H:i',strtotime($row8['dateo'])) . '</p></div>
<div class="avt"><p style="color:#E095B2;font-size: 14px "><b>Автор: ' . $row8["experto"] . '<b></p></div></div><br/><br/>' . "</td>";

echo "</tr>";
}

echo "</table>";

}
echo '</div>';

}
Даты выводит в формате:
Написан 21-05-2024 12:15
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
21.05.2024, 14:42
Цитата Сообщение от Sollita Посмотреть сообщение
Выложу здесь код, может быть кому-то пригодится:
Я бы разделил логику формирования данных от html. Это может выглядеть по разному..

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
function getPageData($link, $id_vopr): array
{
    //Достаём значения данных из таблицы otvets
    $quer = mysqli_query($link, "
        SELECT * FROM otvets
        WHERE id = '{$id_vopr}' ORDER BY id DESC
    ");
 
    $answers = [];
 
    $row8 = mysqli_fetch_array($quer);
    //Если есть значение contentO (текст ответа) и др.
    if (!empty($row8['contentO']) and !empty($row8['id_otv'])
        and !empty($row8['dateo']) and !empty($row8['experto'])) {
 
        while ($row8 = mysqli_fetch_array($quer)) {
            $answers[] = [
                'id_otv' => $row8["id_otv"],
                'ball' => $row8['ball'],
                'contentO' => $row8["contentO"],
                'dateo' => $row8['dateo'], //  date('d-m-Y H:i', strtotime($row8['dateo']))
                'experto' => $row8["experto"]
            ];
        }
    }
 
    return [
        'answers' => $answers
    ];
}
PHP/HTML
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
<?php
 
$data = getPageData($link, $id_vopr);
 
?>
 
<?php if (!empty($data['answers'])): ?>
    <p style="color:#FE9A2E;font-size: 22px "><b>Ответы<b></p>
    <br/>
    <div class="otvs">
        <table>
            <tr>
                <th></th>
                <th></th>
                <th></th>
            </tr>
            <?php foreach ($data['answers'] as $answer): ?>
                <tr>
                    <td style='width: 210px'>
                        <div class="sch">
                            <form method="post" class="forma">
                                <input type="hidden" name="id_otv" value="<?= $answer["id_otv"] ?>"/>
                                <button class="mysubmit" name="like" value="-"> -</button>
                                <b class="sum"><?= $answer['ball'] ?></b>
                                <button class="mysubmit" name="like" value="+"> +</button>
                                <button class="mysubmitlo" name="like" value="++">Лучший ответ</button>
                            </form>
                        </div>
                    </td>
                    <td>
                        <div class="otvsT">
                            <p><?= $answer["contentO"] ?> </p>
                        </div>
                        <br/>
                    </td>
                    <td>
                        <div class="kvadrO">
                            <div class="datav">
                                <p style="color:#A4A4A4;font-size: 12px">
                                    <b>Написан </b><?= date('d.m.Y H:i', strtotime($answer['dateo'])) ?>
                                </p>
                            </div>
                            <div class="avt">
                                <p style="color:#E095B2;font-size: 14px "><b>Автор: <?= $answer["experto"] ?><b></p>
                            </div>
                        </div>
                        <br/>
                        <br/>
                    </td>
                </tr>
            <?php endforeach ?>
        </table>
    </div>
<?php endif ?>

Так же учтите, что в данных могут содержаться html теги

PHP/HTML
1
2
3
4
5
6
<?php
    $answer['experto'] = '<b onclick="alert(123)">Василий </body> <img src="';
?>
<div class="avt">
    <p style="color:#E095B2;font-size: 14px "><b>Автор: <?= $answer["experto"] ?><b></p>
</div>
Чтоб не полетела верстка необходимо при выводе использовать htmlspecialchars. Можно написать отдельную функцию хэлпер

PHP
1
2
3
4
function e($str): string
{
    return htmlspecialchars($str, ENT_QUOTES | ENT_SUBSTITUTE);
}
PHP/HTML
1
2
3
<div class="avt">
    <p style="color:#E095B2;font-size: 14px "><b>Автор: <?= e($answer["experto"]) ?><b></p>
</div>
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
21.05.2024, 15:18  [ТС]
sad67man, не могли бы Вы объяснить, чем Ваш вариант лучше моего? Для чего мне это делать?
Тем более, что я подозреваю, что с foreach опять будут те же проблемы...
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
21.05.2024, 15:28
Цитата Сообщение от Sollita Посмотреть сообщение
не могли бы Вы объяснить, чем Ваш вариант лучше моего? Для чего мне это делать?
Формирования данных и верстка html могут меняться в разное время и по разным причинам.
Html может усложняться, будет легче отследить ее целостность и изменять без риска повредить логику формирования данных.

В контексте html php играет роль простого шаблонизатора. Где используются простые конструкции.
Так же появляется возможность вывести через var_dump данные всей страницы, что удобно при отладке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2024, 15:28

Генерация HTML страницы в UTF-8 средствами РНР
Имеется страница: &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;...

Выполнение РНР-файла по запросу определенной html-страницы
При запросе пользователями определенных html-страничек нужно выполнять php-скрипт. Можно, конечно, поменять расширение html-ки на php и...

Вытащить значение из одной страницы и вставить в другую без РНР
Ребята, задача не совсем стандартная, нужно без использования РНР вытащить значение. Суть. есть страница- http://сайт.ru/counter.php...

Подскажите как создать динамические чекбоксы?
Хотел сделать с десяток чекбоксов с лабелами. Для этого нагуглил примерный код: function myCheckboxes(){ var checkboxParent =...

Почему не работает РНР, не могу запустить ни один скрипт на РНР
Помогите начинающему. Установил Apache и РНР. Апач работает нормально. Проблем нет. А вот с РНР проблемы. Не могу запустить ни...


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru