Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 271
#1

POST запрос и БД - PHP

08.06.2018, 18:36. Просмотров 272. Ответов 19
Метки нет (Все метки)

Делаю удаление из одной таблицы, после ого как продублирую в другую. Все работает. Но при обновлении в POST остается значение старое. По этому операция выполняется, пока я не делаю процедуру с другой записью. В посте сохраняется id записи. По ней я и совершаю операции. Вопрос, как мне после того как я совершил операции с бД очистить пост запрос. unset($_POST) не поможет, так как пост запрос будет пустой, и ничего не выполнится.
Общий алгоритм такой:
1) получаем пост $arData = $_POST;
2)Если в посте есть id записи то загружаем данные этой записи в объект
http://www.cyberforum.ru/php/thread777569.html
3)Сохраняем в другую таблицу эти данные
4)Удаляем запись в id из первой таблицы
5) выводим список записей из первой таблицы с кнопкой восстановить.



Конечно есть вариант, я пытаюсь реализовать простую версию Удалить восстановить запись, привязанную к пользователю. Возможно подскажите алгоритм, который лучше справится с этой задачей

Добавлено через 6 минут
Есть конечно мысль реализовать через ajax, Но пока не знаю как мне обобщить методы добавления и редактирования записей
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2018, 18:36
Я подобрал для вас темы с готовыми решениями и ответами на вопрос POST запрос и БД (PHP):

Не работает POST запрос на сервере...
Есть код: $fp = fsockopen($parts, isset($parts)?$parts:80, ...

Как узнать post-запрос?
Всем привет! В общем, задача следующая. На странице http:// spys....

Не отправляется post запрос на asp сайте
Пишу парсер с asp.net сайта.Столкнулся с проблемой скачивания файла отчёта со...

Неправильно работает post запрос Ajax к php
JS-функция делает post запрос к файлу process.php который проверяет наличие...

POST запрос
Здравствуйте ув. форумчани. Проблема в следующем, нужно авторизироваться на...

19
tarasalk
1081 / 635 / 259
Регистрация: 13.06.2013
Сообщений: 2,245
08.06.2018, 18:38 #2
Редирект надо делать чтобы повторно те же данные не слать.
В вашем случае после пункта 4 нужно перенаправить (функция header) пользователя на страницу с пунктом 5.

У ajax тоже проблемы есть. Например два раза нажмет на кнопку и будет 2 запроса.
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 271
08.06.2018, 18:43  [ТС] #3
У меня все эти пункты на одной странице

Добавлено через 3 минуты
На кнопке хотя бы можно ява скриптом отработать и все.
0
tarasalk
1081 / 635 / 259
Регистрация: 13.06.2013
Сообщений: 2,245
08.06.2018, 18:52 #4
Владислав-2012, дело ваше. Зачем все усложнять я хз.
Хотя конечно если вдруг у вас навалено все в одну кучу (без MVC), то распутать этот клубок может быть тяжело. У меня это делается в пару кликов.
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 271
08.06.2018, 18:54  [ТС] #5
я вот и спрашиваю, как все это правильно огранизовать, я юзаю орм. С помощью нее все опериации с бд
0
tarasalk
1081 / 635 / 259
Регистрация: 13.06.2013
Сообщений: 2,245
08.06.2018, 19:18 #6
Так я ответил. Редирект решает проблему с повторной отправкой данных.
Даже если у вас все на одной странице, никто не мешает делать редирект на эту же самую страницу, только запрос уже GET.
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 271
08.06.2018, 19:37  [ТС] #7
header('/current_page.php?ation="complite'); Типа так? но тогда странице будет редиректится бесконечно
0
tarasalk
1081 / 635 / 259
Регистрация: 13.06.2013
Сообщений: 2,245
08.06.2018, 19:50 #8
Редирект нужен только когда POST запрос.
Выглядит это примерно так
PHP
1
2
3
4
5
6
7
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // получаем данные с формы, сохраняем в БД итп.
   
    header('Location: http://www.example.com/');
}
 
// обычный запрос, показываем страничку
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 271
09.06.2018, 05:38  [ТС] #9
Ладно, я попробую спасибо!))

Добавлено через 9 часов 42 минуты
Так, Warning
: Cannot modify header information - headers already sent by ошибка, как мне ее исправить, заголовок передаю <?header( "Content-Type: text/html; charset=utf-8" );?>. Но ошибка вызывается на строчке с header('Location: http://archive-task.php');
0
Phantom-84
88 / 87 / 25
Регистрация: 15.09.2017
Сообщений: 453
09.06.2018, 06:33 #10
Посмотрите закрепленную в разделе тему про эту ошибку. И зачем вам Content-Type при перенаправлении? После header Location сразу делайте exit, содержимое выводить не нужно.

Добавлено через 55 секунд
Адрес у Location какой-то странный.
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 271
09.06.2018, 12:22  [ТС] #11
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
62
63
64
65
66
67
68
69
70
71
72
<?
require 'header.php';?>
<?//--------------------------системный блок---------------------------//
    
    $arCurrent_user = $_SESSION['logged_user'];
    $CurUser = R::findOne('users','id = ?', array($arCurrent_user['id']));
    $arData = $_POST;
    
//--------------------------системный блок---------------------------//
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($arData['restore']) {
        $m = R::load('delettasks', $arData['restore']);
        echo $arData['restore'];
        vardump($m);
        vardump($arData);
        $save_restore = R::dispense('tasks');
        $save_restore->user_id = $m['user_id'];
        $save_restore->date_create = $m['date_create'];
        $save_restore->name_task = $m['name_task'];
        $save_restore->time_real_task = $m['time_real_task'];   
        $save_restore->time_plan_task = $m['time_plan_task'];
        $save_restore->persent = $m['persent'];
        R::store($save_restore);
        R::trash( $m );
        header('Location: http://archive-task.php');
    }
    } else {
?>
    <?
    $taskView = R::findall('delettasks');
    ?>
 
    <div class="container" style="padding-bottom: 160px;">
        <h2>Удаленные задачи</h2>
        <div class="row table">
            <div class="col s3">Название задачи</div>
            <div class="col s1">Реальное затра ченное время</div>
            <div class="col s1">Поста вленное время</div>
            <div class="col s1">Процент выпол нения</div>
            <div class="col s3">Создание записи в БД</div>
            <div class="col s2"></div>
        </div>
        <? 
        $i=0;
        foreach ($taskView as $key => $value) { $i++;?>
            <div class="row table-tasks shadow" id="<?=$value['id']?>">
                <div class="col s3"><p class="txt"><?=$value['id']?>:<?=$value['name_task']?></p></div>
                <div class="col s1"><p class="txt"><?=$value['time_real_task']?></p></div>
                <div class="col s1"><p class="txt"><?=$value['time_plan_task']?></p></div>
                <div class="col s1"><p class="txt"><?=$value['persent']?></p></div>
                <div class="col s3"><p class="txt"><?=$value['date_create']?></p></div>
                <div class="col s2">
                    <form action="archive-task.php" method="post" id="del">
                        <input type="hidden" name="restore" id="restore" value="<?=$value['id']?>">
                        <button class="restore btn green">Восстановить</button>
                    </form>
                </div>
            </div>
            
        <?
        }
        ?>
        <div class="row table">
            <div class="col s3">Количество задач: <span id="count_task"><?=$i;?></span></div>
            <div class="col s1">Всего:<span id="time_real_task"><?=$time_real_task;?></span></div>
            <div class="col s1">Всего:<span id="time_plan_task"><?=$time_plan_task;?></span></div>
            <div class="col s1">Средний процент:<span id="persent_all_task"><?=$persent/$i;?></span></div>
            <div class="col s3">Примерная сумма:<span id="sum_cost_task"><?=round($sum_cost_task, 1);?></span></div>
            <div class="col s2">Примерная по плану сумма:<span id="sum_cost_plan_task"><?=round($sum_cost_plan_task, 1);?></span></div>
        </div>
 </div>
 <? }

Если я буду писать ексит, у меня не отобразится страница
0
Mr_Nerub
23 / 23 / 15
Регистрация: 05.06.2018
Сообщений: 83
09.06.2018, 12:38 #12
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
Но ошибка вызывается на строчке с header('Location: http://archive-task.php');
После http:// всегда идет название сайта, хост. Вот так: http://какой-то сайт.com(или .ru, .net, .org). И уже через знак дроби(/) может идти какой-то файл, например: http://какой-то сайт.com/файл.php

У вас же идет http://какой-то файл.php. Вот у вас и ругается на этом месте.
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 271
09.06.2018, 12:48  [ТС] #13
не, там стоит правильно сайт, просто он у меня на локалке. Там у меня прописал домен, и через слеш этот файл

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

Добавлено через 51 секунду
пришла идея, типа создать еще таблицу, где будет храниться состояние задачи(удален, восстановленб только создан и не восстановлялся). Есть право на существование такого подхода?
0
Mr_Nerub
23 / 23 / 15
Регистрация: 05.06.2018
Сообщений: 83
09.06.2018, 13:08 #14
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
Есть таблица с задачами. Есть таблица с Удаленными задачами. Как мне организовать так, чтобы я могу спокойно удалить задачу и потом восстановить.
Очевидно, что надо перемещать удаленную задачу в таблицу с удаленными задачами. И в случае восстановления перемещать из таблицы удаленных нужную задачу.
Например здесь:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if ($arData['restore']) {
        $m = R::load('delettasks', $arData['restore']);
        echo $arData['restore'];
        vardump($m);
        vardump($arData);
        $save_restore = R::dispense('tasks');
        $save_restore->user_id = $m['user_id'];
        $save_restore->date_create = $m['date_create'];
        $save_restore->name_task = $m['name_task'];
        $save_restore->time_real_task = $m['time_real_task'];   
        $save_restore->time_plan_task = $m['time_plan_task'];
        $save_restore->persent = $m['persent'];
        R::store($save_restore);
        R::trash( $m );
        header('Location: http://archive-task.php');
}
Как я понял, здесь я вижу восстановление выбранной задачи, но я не вижу, где она здесь удаляется из таблицы удаленных задач.
Всё, что вам нужно, это последовательность действий.
Есть посланные данные -> восстанавливаем в нужную таблицу то, что нам послали -> следом тут же удаляем из другой таблицы эту же задачу. И всё это делаем перед header(), которая перенаправляет куда-то.
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 271
09.06.2018, 13:12  [ТС] #15
PHP
1
 R::trash( $m );
Эта функция удаляет сущность из таблицы
0
Mr_Nerub
23 / 23 / 15
Регистрация: 05.06.2018
Сообщений: 83
09.06.2018, 13:29 #16
Владислав-2012, либо она этого не делает, либо я не понимаю, чего же вы тогда хотите.

Вы выбираете задачу, восстанавливаете ее в одну таблицу, затем тут же удаляете ее из другой(из таблицы с удаленными задачами), а после вас перебрасывает на определенный адрес. Где у вас в этой последовательности действий и что не работает? И чем конкретно вам нужно помочь?

Добавлено через 9 минут
UPD.
Поправьте меня, если я ошибаюсь. У вас на одной страничке находятся 2 таблицы и в случае каких-то манипуляций всё идет хорошо, но в таблицах данные не успевают измениться?
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 271
09.06.2018, 13:34  [ТС] #17
По сути механизм работает, если не считать проблемы с например когда обновляешь, то приходят пустые данные, и сохраняются
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 271
09.06.2018, 13:39  [ТС] #18
У меня сейчас структура такова, это нормально, что tasks и archive_task одинаковы. Что делать если надо будет добавить поля в архивтаск (удалена тогда то), а в tasks восстановлена тогда то.
0
Миниатюры
POST запрос и БД  
Mr_Nerub
23 / 23 / 15
Регистрация: 05.06.2018
Сообщений: 83
09.06.2018, 13:52 #19
Владислав-2012, я извиняюсь, только сейчас понял, что у вас за проблема. По сути, вам правильно подсказали. В условие if (isset($_POST['data'])) вставляете функции восстановления, удаления задач, а в конце header() с exit. В случае, когда вас перекинет, условие if (isset($_POST['data'])) работать уже не будет, т.е. бесконечного редиректа быть не должно, да и exit не сработает. Условие не выполняется и выполняется отображение данных.

Добавлено через 12 минут
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
что tasks и archive_task одинаковы.
Я бы таскархив изменил бы. Как я понял, она представляет из себя ту самую таблицу с удаленными задачами?
Туда я бы добавил лишь id, которая была бы связана с таблицей task, и дату удаления, если мне это нужно было бы. Ну или просто изменил бы task, добавив поле "дата удаления". Если поле пусто, то она не отображается в таблице удаленных задач, но отображается в таблице действующих. Если в поле есть дата, то эта задача отображается в таблице удаленных задач и не отображается в таблице действующих. Соответственно, и восстановление, и удаление от меня бы требовало лишь одного обращения к бд, где либо добавляется эта самая дата удаления, либо очищается.
Хотя мне немного непонятна связь между этими двумя таблицами с таблицей "Проекты". Одна связана по id, а другая - по project_id.
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 271
09.06.2018, 14:06  [ТС] #20
а, то мисс, я исправил сразу
0
09.06.2018, 14:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2018, 14:06
Привет! Вот еще темы с решениями:

Post запрос
Помогите пожалуйста, есть код для записи в файл содержимого форм. Проблема в...

post запрос
Здравствуйте. У меня такая задача: есть изображение и комменатрий к нему, надо...

Post запрос
Добрый день, нужна помощь по-братски, Задача таккая: Допустим есть сайт...

POST запрос
Здравствуйте, может кто пояснить почему у меня иногда post запрос методом get...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru