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

Как сделать обновление страницы сайта после нажатия кнопки submit в формах

30.05.2024, 15:27. Показов 9503. Ответов 111

Студворк — интернет-сервис помощи студентам
У меня на странице сайта, который я пишу для себя, 3 формы. Я хочу, чтобы после нажатия в форме кнопки submit происходило обновление страницы и на странице выводился введённый в форму контент.
Я нашла в интернете образец и по аналогии сделала код, но он не работает. Может быть, кто-то знает, почему?
Теорию ajax в jquery я просмотрела, но не всё поняла, видимо, поэтому и сделала где-то ошибки.
Мой код в файле vopros.php частично для одной из форм:
Code
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
59
...
 
<head>
<title>Вопрос</title>
<script type="text/javascript" 
  src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js">
  </script>
</head>
 
...
 
$id_vopr = intval($_GET['v']);
 
...
 
//Если это эксперт или админ
if($status_id==3||$status_id==2){       
//Форма для ввода ответа на вопрос
?> 
<p  style="color:#E095B2;font-size: 18px "><b>Добавить ответ<b></p>
<form method='POST' action=''>
Наберите здесь текст ответа:<br>
<textarea name='contentO' cols='100' rows='10'></textarea><br>
 <button type="submit" class="lii" name="s" 
data-v="<?=$value->$id_vopr;?>">Опубликовать ответ</button>
</form><br><br>
 
<script> 
$('.lii').on('click',function(){
        $.ajax({
           url:'/vopros.php',
           data:{v:$(this).data('$id_vopr')},
           success:function(){
              location.reload();
           }
        });
    });
  </script>
<?php
 
}
 
//Обрабатываю форму для ответа
if (isset($_POST['s'])) {
    //Если форма заполнена
if(isset($_POST["contentO"])){
//Сохраняю данные в БД
 $contentO = $_POST['contentO'];
 
//Вставляю дату
// получение текущей даты
$odate = date('Y-m-d  H:i');
 
//Вставляю значение + дату в таблицу otvets в БД
$query7 = "INSERT INTO otvets(id,contentO,dateo,experto)
VALUES('$id_vopr','$contentO','$odate','$uzer_c')";
$res7=mysqli_query($link, $query7);
}
}
Адрес моей виртуальной страницы:
http://host2.localhost/vv2/vopros.php?v=28
где 28 - это $id_vopr

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

Или, может быть, есть какой-то другой способ для обновления страницы после нажатия кнопки submit?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2024, 15:27
Ответы с готовыми решениями:

Как получить текст страницы сайта которая открывается после нажатия кнопки
Как получить текст страницы сайта которая открывается после нажатия кнопки from selenium import webdriver from...

Как сделать, чтобы php работал после нажатия на submit
&lt;form method=&quot;post&quot; action=&quot;#&quot;&gt; &lt;p&gt;Имя: &lt;input type=&quot;text&quot; name=&quot;name&quot;&gt; &lt;p&gt;Фамилия: &lt;input type=&quot;text&quot;...

PHP БД отправка данных в phpmyadmin после нажатия кнопки ajax submit
Как отправить данные в БД (из input) после нажатия кнопки submit ajax? (Данные отправляемые в БД $user = R::dispense('users'); ...

111
Невнимательный
 Аватар для ft4l
3139 / 1337 / 362
Регистрация: 08.02.2013
Сообщений: 7,838
Записей в блоге: 2
03.06.2024, 17:00
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Sollita Посмотреть сообщение
все три обработки вставить в один файл
Самое лаконичное
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
switch (array_keys($_POST)){
 case ['f1','f2']:{
 // обработка ... на isset() можно не проверять
 } break;
 case ['f1','f2','f3','f4']:{
 // обработка ... на isset() можно не проверять
 } break;
 case ['f4','f5']:{
 // обработка ... на isset() можно не проверять
 } break;
 default: 
  // чего-то не того прислали
}
Но строгое ,) порядок имён полей имеет значение

чаще приходит мысль тегу <button> присваивоить одинаковые name="" и разные value=""
... причём даже в одной форме бывает несколько кнопок.
И варианты когда у разных случаев похожая обработка и даже имена полей бывают одинаковые
... там вообще по три этапа можно ))
сначала проверка из таких-ли вообще прислали, затем общая обработка, затем разделение )

Не по теме:

Или вообше меня тут как-то такие наброски получались :)

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
59
60
61
switch( RQ::$L->sACT ){# any method
    case 'mk': $TITLE = 'Создать директорию в '.$DIR; break;
    case 'del': $TITLE = 'Удалить директорию из '.$DIR;  break;
    default: $TITLE = 'Операции с директориями в '.$DIR;
}
$MSGs = $ERs = [];
$RedirURL = '';
 
if ( RQ::$STAT['POST'] ) {# POST method
    // ....
    $RedirURL = '?'. RQ::$L->Link([2=>'','']);
 
    if (!$ERs)
    switch( RQ::$L->sACT ){
    case 'edit':{
    // ....
    }break;
    case 'mk':{
    // ....
    }break;
    case 'del':{
    // .... 
    }break;
    default:
    }
}
if ( $RedirURL){# POST method redirects
    if ($AJAX) {#   AJAX
        if ($MSGs) echo '
            <dl class="info"><dd>', implode('</dd><dd>', $MSGs), '
            </dd></dl>';
        if ($ERs) echo '
            <dl class="err"><dt>',implode('</dt><dt>', $ERs), '
            </dt></dl>';
        echo '<div class="c big cb"><a  href="">Refresh</a></div>';// тут трабл с ИЕ... по пустой ссылке не туда  идёт
        exit;// errors in stdout
    }
    X::$ERRsupress = true; // 
    if ($MSGs) $_SESSION['tmp']['msgs'] = $MSGs;
    if ($MSGs) $_SESSION['tmp']['errs'] = $ERs;
    header('Location: '. $RedirURL);
    exit;
}
 
# GET Output
require_once    $HEADER;
if ($ERs) {# $DIR not found 
    echo '<dl class="err"><dt>', implode('</dt><dt>', $ERs), '</dt></dl>';
    return;
}
 
//echo "<pre>\t", var_export([$DataFS,RQ],1),"\n</pre>\n";
switch( RQ::$L->sACT){
case '':    break;# after switch output
case 'mk':{
    // .... форма
}return;
case 'del':{
    // .... формы/ обработчики
/* и т.д. и
 и за третим switch() ещё проверки и просто вывод :)



Добавлено через 10 минут
Цитата Сообщение от sad67man Посмотреть сообщение
схитросплести
но если очень хочется , то можно ))
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
03.06.2024, 17:08
Цитата Сообщение от ft4l Посмотреть сообщение
Самое лаконичное
А если разные операции, но одинаковое кол-во полей?

Я думаю, что лучше передавать тип действия явно, чем это определять какими-то косвенными признаками, чтоб не было никаких сюрпризов)

И логичнее это делать через action формы - мне кажется, что он для этого и служит. Это может быть как отдельная ссылка, так и get параметр (конечно учитываем, что GET параметры в action-е работают только при методе POST).

Даже если объединять в один файл. Я бы и в этом случае пытался бы как-то разделить логику самой маршрутизации от операций.
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
03.06.2024, 17:22  [ТС]
ft4l, спасибо, я попробую завтра. С if у меня не получилось, хотя операции аналогичные. Одна вставляет в БД ответ, дату, автора, а вторая - комментарий, дату, автора. Причём, дата и автор те же самые.
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
03.06.2024, 19:22
Цитата Сообщение от ft4l Посмотреть сообщение
но если очень хочется , то можно ))
Если очень хочется, чтоб вас почаще вспоминали))
0
Невнимательный
 Аватар для ft4l
3139 / 1337 / 362
Регистрация: 08.02.2013
Сообщений: 7,838
Записей в блоге: 2
03.06.2024, 20:34
Цитата Сообщение от sad67man Посмотреть сообщение
чтоб вас почаще вспоминали
Кому как ... мне лично удобненько ,)) мышкой по code-folding'у и всё более-менее в одном месте
... Тем более что таких похожих файлов было практически половина
типа экшены модуля админПанели, с суб-экшенами... там хочется всего и побольше, но не до суб-суб-экшенов .)
Так что, присмотревшись в одном, в похожих уже всё понятнее)
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
04.06.2024, 13:15
Цитата Сообщение от ft4l Посмотреть сообщение
мышкой по code-folding'у
Под хитросплетениями я подразумевал немного другое. Новички часто пытаются избавиться от как им кажется дублирующего/похожего или аналогичного кода. И могут делать это невероятными способами, тратя на это кучу времени, и потом непременно гордятся своими "достижениями".

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

У каждого могут быть свои подходы. Но главное показать самую чуть)

Добавлено через 17 минут
ft4l, По моему мнению - изначально должна быть простая схема. Файлы можно сгруппировать по папкам. Стремление автора положить несколько обработчиков в один файл у меня вызывает некие подозрения.
Вот уже идет упоминание, что операции аналогичные и возможна попытка как-то это разрулить if-ами и выносом отдельных частей логики "наверх".
1
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
10.06.2024, 10:49  [ТС]
ft4l, Наконец я доделала 3 файла и теперь освободилась и смогла попробовать предложенный Вами вариант.
У меня получился такой файл new_r2.php:
Code
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
<?php header("Content-Type: text/html;charset=utf-8");?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 
<?php 
$link = mysqli_connect("localhost", "airin", "root", "vv_bd");  
mysqli_set_charset($link, 'utf8mb4');
session_start();
?>
 
<?php
$id = $_SESSION['id'];// id вошедшего юзера
 
//Получаю текущую дату
$odate = date('Y-m-d  H:i');
 
//Получаю из БД логин автора вопроса
$query1 = "SELECT login FROM users WHERE id='$id'"; 
$res=mysqli_query($link, $query1);
$row1 = mysqli_fetch_assoc($res);
 
//Достаём значения из таблицы vopross в БД 
$uzer_c=$row1['login']; // из БД    
 
 
switch (array_keys($_POST)){
 case ['id_vopr','contentO']:{
 // обработка
 //Сохраняю данные в БД
//Вставляю значение + дату в таблицу otvets в БД
$query = "INSERT INTO otvets(id,contentO,dateo,experto)
VALUES('$id_vopr','$contentO','$odate','$uzer_c')";
$res=mysqli_query($link, $query);
 } break;
 
 case ['id_vopr','contentC']:{
 // обработка
 //Сохраняю данные в БД
//Вставляю значение + дату в таблицу comments в БД
$query = "INSERT INTO comments(id,contentc,datec, uzer_c)
VALUES('$id_vopr','$contentC','$odate','$uzer_c')";
$res=mysqli_query($link, $query);
 } break;
}
 
//редирект
$redirect = isset($_SERVER['HTTP_REFERER'])? $_SERVER['HTTP_REFERER']:'redirect-form.html';
header("Location: $redirect");
exit();
?>
Но после нажатия кнопок submit просто ничего не происходит, в БД новая запись тоже не появляется.
Видимо, я опять что-то сделала не так.
0
Невнимательный
 Аватар для ft4l
3139 / 1337 / 362
Регистрация: 08.02.2013
Сообщений: 7,838
Записей в блоге: 2
10.06.2024, 12:47
Цитата Сообщение от Sollita Посмотреть сообщение
ничего не происходит
Что-то происходит но не видно что я бы сказал
Способ , как я сказал, требующий жёсткого соответствия всех имён и порядка полученных полей
На всякий для наладки-отладки бывает можно и var_export($_POST); var_dump($_POST);

... но сначала
для разработки помогает вывод ошибок/сообщений ... они явно должны были быть
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// все сообщения PHP+mysqli в stdout
error_reporting(E_ALL);
ini_set('display_errors', 1);
mysqli_report(MYSQLI_REPORT_ERROR);//+ MYSQLI_REPORT_STRICT если нужно выбрасывать исключения
 
header("Content-Type: text/html;charset=utf-8");
session_start();
$link = mysqli_connect("localhost", "airin", "root", "vv_bd");  
mysqli_set_charset($link, 'utf8mb4');
 
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
Далее мне не очень понятно... может-ли за этим файлом обратиться "гость" у которого не будет ни SID ни $_SESSION['id']
и что делать если $id === NULL
но допустим ... ничего не надо проверять, а сессии только число и в случае чего MYSQLI_REPORT_ERROR нам поможет)

Но вот тут вот ,)
Цитата Сообщение от Sollita Посмотреть сообщение
PHP
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
switch (array_keys($_POST)){
 case ['id_vopr','contentO']:{
 // обработка
 //Сохраняю данные в БД
//Вставляю значение + дату в таблицу otvets в БД
$query = "INSERT INTO otvets(id,contentO,dateo,experto)
VALUES('$id_vopr','$contentO','$odate','$uzer_c')";
$res=mysqli_query($link, $query);
 } break;
 
 case ['id_vopr','contentC']:{
 // обработка
 //Сохраняю данные в БД
//Вставляю значение + дату в таблицу comments в БД
$query = "INSERT INTO comments(id,contentc,datec, uzer_c)
VALUES('$id_vopr','$contentC','$odate','$uzer_c')";
$res=mysqli_query($link, $query);
 } break;
}
Откуда взяться значениям в этих '$id_vopr','$contentO','$contentC' переменных ,
значения которые хоть и гарантирванно должны присутствовать в $_POST,
но никак оттуда не достаются и никак не фильтруются не задействуются ))

++
default: в switch неплохо-бы, если вдруг не такие данные будут получены
подготовленные запросы с mysqli_prepare() или mysqli_real_escape_string(mysqli $mysql, string $string): string
И редиректа не будет... может не быть ... т.к. до header("Location: $redirect"); был вывод с каким-то <meta> ))

И наверное как-то всё-же надо допускать что не всегда всё должно успешно добавится
Чего-то где-то выводить пользователям надо тогда... мол извините подвиньтесь)
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
10.06.2024, 12:52
Цитата Сообщение от Sollita Посмотреть сообщение
PHP/HTML
1
2
3
4
5
6
7
<?php header("Content-Type: text/html;charset=utf-8");?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<?php 
$link = mysqli_connect("localhost", "airin", "root", "vv_bd"); 
mysqli_set_charset($link, 'utf8mb4');
session_start();
?>
Старт сессии должен быть до любого вывода. Тут вы выводите метатег.
Цитата Сообщение от Sollita Посмотреть сообщение
switch (array_keys($_POST)){
case ['id_vopr','contentO']:{
Уже писал, что думаю по этому поводу, такая маршрутизация выглядит как дикий костыль. Вместо того, чтоб указать явно - какую операцию вы собираетесь выполнить - вы пытаетесь ее определить по косвенным признакам..
0
Невнимательный
 Аватар для ft4l
3139 / 1337 / 362
Регистрация: 08.02.2013
Сообщений: 7,838
Записей в блоге: 2
10.06.2024, 13:15
Цитата Сообщение от ft4l Посмотреть сообщение
default: в switch
и совсем забыл .)) возможно и обращение и запросами отличными от POST ... с такими тоже как-то надо быть.
Вариантов много , размещения/разнесения всей логики...

Например сразу c не-POST куда-то лесом,
Затем в switch чуть что не то сразу в сообщения о ошибках и break
Затем после, если нет сообщений об ошибках или статус какой использовали в переменной,
уже можно перенаправлять либо на форму либо на просмотр с выводом как-нибудь OK или OKn't
+++
В сессиях кстати, кроме прочего, время последнего добавления тоже желательно проверять.
У меня мышки иногда по несколько копий форм иногда отправляют... ограничение частоты добавления может помочь
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
10.06.2024, 15:12  [ТС]
ft4l, у меня вообще в Форум зайти могут только зарегистрированные и авторизованные пользователи. Никакие гости на страницы Форума попасть не могут.
Я поторопилась и не вставила полностью обработку в case. Я же сейчас уже совсем другим занимаюсь - стилями в другом файле.
Я сначала пыталась не с полями case выводить, а с именами кнопок sabmit (s, s1,s5) и там у меня были выведены переменные из формы. Но номер не удался и я переделала файл, но пропустила два куска. Извините.
Завтра исправлю и выложу.
А ошибки вывести я хотела, но т.к. я умею это делать только с эхо, а после эхо редирект работать не будет, то и не вставила.А default без сообщения об ошибке вроде бы смысла не имеет... Про функции я не подумала. Вставлю.
А что значит "возможно и обращение и запросами отличными от POST"? Например?

Добавлено через 6 минут
sad67man, я знаю, что старт сессии должен быть до любого вывода, но метатега это не касается. По крайней мере на практике такой порядок никак не мешает пользоваться сессией. Всё прекрасно работает в десятке файлов
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
10.06.2024, 16:35
Цитата Сообщение от Sollita Посмотреть сообщение
но метатега это не касается
А чем метатег круче допустим символа пробела? Откуда у него такие привелегии?
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
10.06.2024, 17:59  [ТС]
sad67man, понятия не имею. Но Вы попробуйте, всё прекрасно работает
0
Невнимательный
 Аватар для ft4l
3139 / 1337 / 362
Регистрация: 08.02.2013
Сообщений: 7,838
Записей в блоге: 2
10.06.2024, 18:22
Цитата Сообщение от Sollita Посмотреть сообщение
Всё прекрасно работает в десятке файлов
Возможно ... некоторые реализации не сбрасывают буфер вывода, до того как... в некоторых случаях.
Но на такое точно лучше не полагаться... наштампуете файлов-страничек ,
а оно рраз,) и в один прекрасный момент перестанет работать после обновлений/изменений ))
... придётся всякими ob_start() ob_end_flush() всё обкладывать или вообще переписывать.

Цитата Сообщение от Sollita Посмотреть сообщение
после эхо редирект работать не будет,
Вот примерно с таким-же расчётом я делал в обработчике
Цитата Сообщение от ft4l Посмотреть сообщение
PHP
38
39
40
41
42
    X::$ERRsupress = true; // 
    if ($MSGs) $_SESSION['tmp']['msgs'] = $MSGs;
    if ($ERs) $_SESSION['tmp']['errs'] = $ERs;
    header('Location: '. $RedirURL);
    exit;
Чтобы после загрузки страницы в popup можно было проверить, вывести и сразу удалить $_SESSION['tmp'] из сессии...
... только сильно не обкатывал ещё... возможно появились-бы ситуации когда вовремя не вовремя.

Другой вариант всётаки выводить страничку по POST-запросу
... вместо header(location) можно сделать таймаут header(refresh) или <meta>refresh
или вообще javascript confirm() alert() и т.п.
Но у меня и так был-бы ajax-запрос ... для клиентов со включенным js ... если не для таких под какие-бы даже ajax никак)
можно и вручную всем предоставить... переходить или нет ... но это дать больше поводов обновлять и пищать)
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
10.06.2024, 18:32
Цитата Сообщение от Sollita Посмотреть сообщение
sad67man, понятия не имею. Но Вы попробуйте, всё прекрасно работает
Вероятно это связано с тем, что session_start - создает либо открывает существующую сессию. Видимо именно при создании он отправляет заголовки setCookie с идентификатором сессии и тут важно, чтоб это происходило до вывода..

Браузер прекрасно понимает заголовок Content-Type и без мета тега.

Так а зачем вам выводить что-либо когда вы делаете редирект? Я вижу применение только как для дебага. Конечно после вывода и редирект не будет работать..
1
Невнимательный
 Аватар для ft4l
3139 / 1337 / 362
Регистрация: 08.02.2013
Сообщений: 7,838
Записей в блоге: 2
10.06.2024, 18:59
Цитата Сообщение от Sollita Посмотреть сообщение
м зайти могут только зарегистрированные и авторизованные пользователи.
По этому коду, если он не включен никаким другим, что-то не видно,)
что например если юзер закроет браузер, а потом запустит его и восстановит вкладки,
... сессионная кука SID/PHPSESSID таким образом потеряется,
так вот не видно чтобы аутентификаия какая-нибудь выполнялаяь... или выпинывания/подпинывания таких куда-то )
Цитата Сообщение от sad67man Посмотреть сообщение
открывает существующую сессию
Да... не подумал об этом.) куку session_start() отправляет только при создании новых сессий.
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
10.06.2024, 19:33  [ТС]
ft4l, я предполагаю, что если юзер закроет браузер, а потом попытается восстановить вкладки, ему напишут, что нужно снова ввести данные. По крайней мере так пишет мне, когда я долго не открываю страницу сайта, т.к. занимаюсь, например базой данных.
Незарегистрированному пользователю может открыться только первая страница Форума, на которой происходит регистрация и аутентификация. Только после аутентификации открывается навигационная панель, с помощью которой юзер может перейти на остальные 8 страниц форума. Поэтому если юзер закроет браузер, ему придётся для входа в Форум снова проходить аутентификацию.
А этот файл new_r2.php вообще не может открыться юзеру, потому что нигде на сайте на него нет ссылки.
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
10.06.2024, 20:10
Цитата Сообщение от Sollita Посмотреть сообщение
ft4l, я предполагаю, что если юзер закроет браузер, а потом попытается восстановить вкладки, ему напишут, что нужно снова ввести данные. По крайней мере так пишет мне, когда я долго не открываю страницу сайта, т.к. занимаюсь, например базой данных.
Незарегистрированному пользователю может открыться только первая страница Форума, на которой происходит регистрация и аутентификация. Только после аутентификации открывается навигационная панель, с помощью которой юзер может перейти на остальные 8 страниц форума. Поэтому если юзер закроет браузер, ему придётся для входа в Форум снова проходить аутентификацию.
А этот файл new_r2.php вообще не может открыться юзеру, потому что нигде на сайте на него нет ссылки.
В программировании мыслят немного другим образом - будто все что могло случиться - случилось, в том числе и все-возможные ошибки и баги..
Что нам тут сидеть и продумывать все возможные ситуации, когда может прийти запрос от незарегистрированного пользователя.. или в каких случаях из-за неправильного порядка может что-то поломаться?..
Если покрыть пограничные случаи, то как правило автоматом покрываются и все остальные.
0
7 / 17 / 0
Регистрация: 30.09.2021
Сообщений: 232
11.06.2024, 11:11  [ТС]
ft4l, Я исправила файл, но, как я и писала, после нажатия кнопок submit ничего не происходит.

Code
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
59
60
61
62
63
64
<?php
//Устанавливает, какие ошибки PHP попадут в отчёт
//Добавлять в отчет все PHP ошибки 
error_reporting(E_ALL);
//Директива display_errors определяет, будут ли 
//ошибки отображаться для пользователя(будут)
ini_set('display_errors', 1);
//Включение протоколирования. Заносить в протокол ошибки вызовов функций mysqli
mysqli_report(MYSQLI_REPORT_ERROR);
 
header("Content-Type: text/html;charset=utf-8");
session_start();
$link = mysqli_connect("localhost", "airin", "root", "vv_bd");  
mysqli_set_charset($link, 'utf8mb4');
?>
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 
<?php
$id = $_SESSION['id'];// id вошедшего юзера - автора ответа или комментария
 
//Получаю текущую дату
$odate = date('Y-m-d  H:i');
 
//Получаю из БД логин автора ответа или комментария
$query1 = "SELECT login FROM users WHERE id='$id'"; 
$res=mysqli_query($link, $query1);
$row1 = mysqli_fetch_assoc($res);
 
//Достаём значения из таблицы users в БД 
$uzer_c=$row1['login']; // из БД    
 
 
switch (array_keys($_POST)){
 case ['id_vopr','contentO']:{
 // обработка
 //Получаю из формы
$id_vopr = $_POST['id_vopr'];
$contentO = $_POST['contentO'];
 //Сохраняю данные в БД
//Вставляю значение + дату в таблицу otvets в БД
$query = "INSERT INTO otvets(id,contentO,dateo,experto)
VALUES('$id_vopr','$contentO','$odate','$uzer_c')";
$res=mysqli_query($link, $query);
 } break;
 
 case ['id_vopr','contentC']:{
 // обработка
//Получаю из формы
$id_vopr = $_POST['id_vopr'];
$contentC = $_POST['contentC']; 
 //Сохраняю данные в БД
//Вставляю значение + дату в таблицу comments в БД
$query = "INSERT INTO comments(id,contentc,datec, uzer_c)
VALUES('$id_vopr','$contentC','$odate','$uzer_c')";
$res=mysqli_query($link, $query);
 } break;
}
 
//редирект
$redirect = isset($_SERVER['HTTP_REFERER'])? $_SERVER['HTTP_REFERER']:'redirect-form.html';
header("Location: $redirect");
exit();
?>
Ошибки тоже не выводятся.

А для чего это:
Code
1
2
//Включение протоколирования. Заносить в протокол ошибки вызовов функций mysqli
mysqli_report(MYSQLI_REPORT_ERROR);
Я не поняла. Я так поняла, для протокола нужно делать отдельную таблицу в БД? А у меня же её нету.
0
Невнимательный
 Аватар для ft4l
3139 / 1337 / 362
Регистрация: 08.02.2013
Сообщений: 7,838
Записей в блоге: 2
11.06.2024, 12:23
Цитата Сообщение от Sollita Посмотреть сообщение
нужно делать отдельную таблицу в БД?
Не нужно. Просто по умолчанию текст ошибок запросов , которые на стороне mysqld, php никак не обрабатывает.
... и нужно извлекать из
Объектно-ориентированный стиль
PHP
1
string $mysqli->error;
Процедурный стиль
PHP
1
mysqli_error(mysqli $mysql): string
с mysqli_report(MYSQLI_REPORT_ERROR); ошибки обрабатываются как ошибки php...

Цитата Сообщение от Sollita Посмотреть сообщение
ничего не происходит.
Случайно не ajax-ом запросы к обработчикам ?

А так что можно сказать,) если не хотите просто обе таблицы с текстами связывать по id юзеров с таблицей юзеров,
то в сессии можно и логин хранить , вместе с id, чтобы первый запрос вообще не нужен был
... даже целый массив туда можно класть со всеми частоиспользуемыми данными касательно юзера.
Кроме того помнится была мысль vopros - может любой зарегистрированный, otvet - только мамонты )) или как-то так.
т.е. в этот массив напрашивается ещё значение типа Group_id/Group/Role/uStatus/...etc
которое будет проверяться как минимум для otvet ... но вообше как говорили посетитель может и оказаться случайный.

... добавьте в switch(){
//..... всё что там
default:
exit('Unknown request');
}
... может оно просто не попадает под перечисленные case
Цитата Сообщение от ft4l Посмотреть сообщение
var_dump($_POST);
может помочь разобраться , если дело в этом.
и
Цитата Сообщение от ft4l Посмотреть сообщение
с mysqli_prepare() или mysqli_real_escape_string(
всё-таки тоже надо делать ... и если ничего кроме такого, то и там где потом вывод
htmlentities(
string $string,
int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
?string $encoding = null,
bool $double_encode = true
): string

или
htmlspecialchars(
string $string,
int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
?string $encoding = null,
bool $double_encode = true
): string
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2024, 12:23

Как сделать перезагрузку страницы после нажатия
Всем привет. Столкнулся с такой проблемой: Установил на wordpress плагин &quot;Button visually impaired&quot; (Плагин для слабовибящих,...

Отлов нажатия кнопки submit и блокировка последующего нажатия
Привет всем! Нужен код, который способствует блокировке нажатия кнопки после одного нажатия на нее. Спасибо. Добавлено через 54...

как после нажатия кнопки Отправит сделать прелоадер и
нажимаю ссылку, появляется модальное окно. надо чтоб после нажатия кнопки отправить появлялся прелоадер(типа отравляется), а когда...

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

Как сделать, чтобы цикл продолжался только после нажатия кнопки?
for (int i=0; i&lt;n;i++) pl=dieroll (); нужно чтобы пользователь перед каждой иттерацией жал любую (можно заданную, можно нет)...


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru