За последние 24 часа нас посетили 20747 программистов и 1134 робота. Сейчас ищут 323 программиста ...

Очистка данных массива после отправки данных

Тема в разделе "PHP для новичков", создана пользователем Pumbaa, 17 янв 2018.

Метки:
  1. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    Существующая форма предназначена для коррекции данных внесённых в БД Postgres.
    Вызов данных, коррекция и обновление записей в БД.
    После вызова и заполнения элементов массива данными из Postgres
    Код (Text):
    1. <?php>
    2. $qexist = "SELECT
    3.        test.tb.id_bld,
    4.        test.tb.street,
    5.        test.tb.bld_no,
    6.   FROM test.tb
    7.   WHERE test.tb.street = '$street'
    8.   AND test.tb.bld_no = '$bld_no'
    9.   ";
    10.   $ress = pg_query($qexist);
    11.   while ($row = pg_fetch_array($ress)) {
    12.         $val[11] = $row[11];
    13.         $val[12] = $row[12];
    14.         $val[13] = $row[13];
    15.         $val[14] = $row[14];
    16.   }
    17. ?>
    вставки их в поля формы и коррекции данных
    Код (Text):
    1. <tr>
    2.   <td>
    3.     <label for="Shop">Shop:</label>
    4.   </td>
    5.   <td>
    6.     <input type="text" name="shop" value="<?php echo $val[11] ?>">
    7.   </td>
    8. </tr>
    9.  
    10. <tr>
    11.   <td><label for="Services">Services:</label>
    12.   </td>
    13.   <td><input type="text"  name="services" value="<?php echo $val[12] ?>">
    14.   </td>
    15. </tr>
    16. <tr>
    17.  
    18.   <tr>
    19.     <td>
    20.       <label for="Category of building">Investment Category:</label>
    21.     </td>
    22.     <td>
    23.       <input type="text" name="category" value="<?php echo $val[13] ?>">
    24.     </td>
    25.   </tr>
    26.  
    27.   <tr>
    28.     <td>
    29.       <label for="Manager_id">Manager ID</label>
    30.     </td>
    31.     <td>
    32.       <input type="text" name="id_manager" value="<?php echo $val[14] ?>">
    33.     </td>
    34.   </tr>
    35.  
    36.   <input type="hidden" name="timestamp" value="<?php echo date ('Y-m-d H:i:s')?>">
    37.  
    38.   <tr>
    39.     <td>
    40.       <input type="submit" onClick="return nodata(this.form)" name="query" value="Query">
    41.     </td>
    42.     <td>
    43.       <input type="submit" onClick="return nodata(this.form)" name="update" value="Update" id="upDate">
    44.     </td>
    45.     <td>
    46.       <input type="reset" name="reset" value="Clear It">
    47.     </td>
    48.   </tr>
    отправки откорректированных данных назад в БД
    Код (Text):
    1. if (isset($_POST['update'])) {
    2.   $data = array(
    3.     'shop' => $val[11],
    4.     'services' => $val[12],
    5.     'category' => $val[13],
    6.     'id_manager' => $val[14]  
    7. );
    8.   $elem = $_POST;
    9.   foreach($elem as $key => $value)
    10.  
    11.   unset($elem['update']);
    12.  
    13.   $res = pg_update($dbconn, 'test.tb', $elem, $data);
    14.   if ($res) {
    15.     echo "Updated: $res\n";
    16.   } else {
    17.     echo "Data not sent\n";
    18.   }
    19. }
    данные последнего запроса остаются в элементах массива `$val[]`, а учитывая то, что эти элементы жестко привязаны к полям формы `value="<?php echo $val[x] ?>`, эти данные продолжают находиться в поле, несмотря на команду `unset ( $elem ['update'] );` и естественно не убираются из полей кнопкой type=reset в стандартном варианте. Подскажите пожалуйста, каким кодом привязанным к кнопке Reset можно очистить (обнулить значения) содержимого элементов массива и тогда предыдущие значения пропадут из формы без всякой её специальной очистки.
    Если возможно очистить массив сразу после отправки данных кнопкой Update, добавив функцию очистки (обнуления данных) массива к unset, это было бы идеально, чтобы не загромождать форму кнопками. Спасибо
    --- Добавлено ---
    собственно, массив очищается после открытия новой страницы, но это довольно бестолковое решение, каждый раз закрывать и открывать страницу
     
    #1 Pumbaa, 17 янв 2018
    Последнее редактирование: 17 янв 2018
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    А что должно произойти при этом? PHP должен, кроме удаления переменной из памяти, пройтись по ответу сервера, если он еще не отправлен клиенту, конечно, проанализировать его, найти там содержимое этой переменной и вырезать его?

    Это так не работает. И еще, PHP не работает на клиенте, только на сервере.
    Потому что эта кнопка влияет на форму. А у вас форма не объявлена же. Заключите вашу таблицу в <form></form>.
     
  3. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    таблица находится в форме, просто не опубликовал, потому считал что это само самой разумеется, на самом деле таблица выглядит так:
    Код (Text):
    1.       <table>
    2.         <tbody>
    3.             <form method="post" action="t54646.php">  
    4.                
    5. ------------------------------------------------------          
    6.             <tr>
    7.             <td>
    8.             <label for="Shop">Shop:</label>
    9.             </td>
    10.             <td>
    11.             <input type="text" placeholder="Number of shops" name="shop" value="<?php echo $val[11] ?>">
    12.             </td>
    13.             </tr>
    14.  
    15.             <tr>
    16.             <td><label for="Services">Services:</label>
    17.             </td>
    18.             <td><input type="text" placeholder="Garage, Dry cleaning etc" name="services" value="<?php echo $val[12] ?>">
    19.             </td>
    20.             </tr>
    21.             <tr>
    22.  
    23.             <tr>
    24.             <td>
    25.             <label for="Category of building">Investment Category:</label>
    26.             </td>
    27.             <td>
    28.             <input type="text" placeholder="1-best,2-good,3-medium,4-bad,5-garbage" name="category" value="<?php echo $val[13] ?>">
    29.             </td>
    30.             </tr>  
    31.                
    32.             <tr>
    33.             <td>
    34.             <label for="Manager_id">Manager ID</label>
    35.             </td>
    36.             <td>
    37.             <input type="text" placeholder="Personal Code of Inputter" name="id_manager" value="<?php echo $val[14] ?>">
    38.             </td>
    39.             </tr>
    40.                    
    41.             <input type="hidden" name="timestamp" value="<?php echo date ('Y-m-d H:i:s')?>">
    42.  
    43.             <tr>
    44.             <td>
    45.             <input type="submit" onClick="return nodata(this.form)" name="query" value="Query" >
    46.             </td>
    47.             <td>
    48.             <input type="submit" onClick="return nodata(this.form)" name="update" value="Update" >
    49.             </td>
    50.             </tr>          
    51.         </form>
    52.     </tbody>
    53. </table>
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    reset там нет. И да,
    Не совсем понятно, что вам нужно и что происходит. Очищаться должна страница? Или переменная в PHP? Это не одно и то же. На момент получения страницы, PHP уже отработал и умер. Буквально.
     
  5. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    при первичном заполнении формы используется метод GET и следующий код:
    Код (Text):
    1. if (isset ( $_GET ['submit'] )) {
    2.             $elem = $_GET;      
    3.             foreach ( $elem as $key => $value ){
    4. [$key] . " || ";              
    5.                 }  
    6.             unset ( $elem ['submit'] );          
    7.             $res = pg_insert ( $dbconn, 'test.tb_54646', $elem );      
    8.             if ($res) {
    9.                 echo " Record completed \n";
    10.             } else {
    11.                  echo "NO complete\n". ";          
    12.     }
    13. }
    при этом, форма сразу очищается для следующего ввода
    --- Добавлено ---
    насколько я понимаю, значение прописано в поле формы однозначно и оно его постоянно берёт из буфера браузера, то есть, надо вычистить данные этого массива в буфере и тогда они перестанут загружаться в поле... PHP умер, но дело его живёт )))
     
  6. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    сейчас работает единственное решение, после отправки изменений в БД кнопкой Update, страница убивается и открывается чистая из Bookmarks... вызывается новая строка из БД, корректируется, отправляется назад в БД с новыми значениями и снова страница убивается... бредовое решение, но только оно работает... а надо просто очистить буфер от предыдущих значений, потому что они не очищаются даже вручную, покойник РНР продолжает впихивать своё мёртвое тело в все поля (((
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Не совсем.

    Он ничего не делает на клиенте. Примите это. PHP не работает на клиенте.

    Нет никаких мифических буферов, в которых данные лежат. Все проще. Вы эти данные в адресной строке прописали, когда форму GET_ом отправили. Естественно, при обновлении страницы, эти данные снова передаются, как часть URL. И снова обрабатываются. И снова ставятся.

    Вам надо либо адресную строку через JS чистить, либо использовать метод POST для отправки данных, либо юзать AJAX и вообще в фоне таскать запросы, не перезагружая страничку. 21 век же на дворе и тд и тп.

    На данном этапе самое простое для вас - заменить GET на POST. И в методе формы и в обработчике на стороне PHP.
     
  8. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    Это другая форма и работает она с GET потому что там есть фрагмент с autocomplete, который только с ним и работает. Я пытался объединить эти две операции: ввод новых данных и последующая выборка и коррекция, но потом отказался из-за этого гемора с тем, что пришлось в полях жестко прописать значения выбираемого массива.
    Поэтому сейчас две формы: первая на внесение новых данных, работает с GET и к ней нет никаких претензий. Поля сразу очищаются после нажатия кнопки Submit, и вторая,
    которая уже работает с методом POST и не хочет избавляться от груза прожитых лет добровольно ))), только через убийство.
    Поэтому у меня и стоит задача, не убивать её, а просто очистить данные в полях любым, более гуманным, способом, чем тупое убийство.
    За этой помощью и обратился на форум.
     
  9. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Так убивайте ваш браузер который хранит предыдущее действие, для этого и делается редирект после запроса что-бы не было повторной отправки при обновлении страницы.
     
  10. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    Так в этом то и вопрос, как это сделать в данном случае, теоретически вроде понимаю, да и советов в инете море, но пазл не складывается (((
    Если можете, подскажите, как практически приложить переадресацию POST к этому случаю
     
  11. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    как я понял, к сожалению, кроме общих умных фраз, на большее тут расчитывать не приходится...
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    ещё одна обидчивая школьница...
     
  13. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    а кроме надувания щёк,
    у 10К программистов есть какие-то конкретные предложения, или все силы уходят только на их надувание? ))))
     
    #13 Pumbaa, 19 янв 2018
    Последнее редактирование: 19 янв 2018
  14. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Это раздел для новичков, тут не дают готовых решений, тут объясняют тем, кто хочет сам во всём разобраться. @Fell-x27 пытался показать вам правильный ход мысли и там были конкретные предложения, просто у вас каша в голове сейчас и вы не хотите их видеть. Не надо так и уж тем более не надо апеллировать к "а вам слабо что ли?". Всё просто: если вам нужен опыт - перечитайте тему ещё раз и попробуйте понять, а если нужно конкретное решение - есть раздел фриланса.
     
  15. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    Спасибо за разъяснение, я всё понял. В этом разделе конкретными тремя строчками кода не балуют, идите в магазин и покупайте, если вы тупые ))) ... Подход понятен, буду знать
     
  16. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Начнем с того, что вам изначально никто ничего не должен. Это неприятно слышать, но это так. Далее.

    Это раздел для обучения. И да, программирование - не колдовство. Тут нет "конкретных трех строчек кода", которые, как заклинание, можно вставить и система заработает. Любая правка в уже работающей системе, так или иначе затрагивает еще какие-то ее фрагменты. Эта связность, порой, может вылиться в долгую отладку, если система была спроектирована без учета возможных изменений. Мы не знаем вашу систему. Вы знаете свою систему. Вы пришли за помощью, мы выдали варианты решений. Абстрактные. Конкретная реализация уже на вас. Если что-то нужно уточнить, если есть вопросы, спрашивайте.

    Тупым никто никого не называл. Идите покупайте, если хотите результат, но не хотите тратить свое время и учиться. Это не признак тупости. Это признак заинтересованности в результате, а не решении. Это нормально. Работающие проекты нужны не только программистам. Я, когда хочу дома кран заменить, вызываю сантехника, а не корячусь сам. Мне нужен результат, я готов заплатить за него квалифицированному специалисту, лишь бы самому туда не лезть. Тут все то же самое.

    Представьте, форум сантехников. Есть разница между тем, чтобы спросить совета по инструментам и материалам и между тем, чтобы сказать "что, никто не может мне на дом приехать и трубу поставить чтоли за бесплатно?".

    Подумайте сами, Вам влом править свою систему, но нам не должно быть влом тратить время, разбираться в ней, решать проблему, тестировать, отлаживать? Наше время дешевле и ненужнее Вашего?

    Вам либо в раздел "сделайте за меня", где, мб кто-то от нечего делать возьмется править за вас, либо во фриланс.
     
    #16 Fell-x27, 19 янв 2018
    Последнее редактирование: 19 янв 2018
  17. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    Странно это от Вас слышать, я что, где-то говорил что мне кто-то что-то обязан? Просто у каждого своё видение помощи. Кто-то просто ограничивается общими фразами, а кто-то даёт пример и конкретный совет. Это личное дело каждого, если иное не оговорено в условиях.
    Вопросы у меня мелкие, но противные, обычно никто не отвечает по существу, только общими фразами, которые я и сам знаю. Поэтому и приходится ковыряться самому. Так что общие ответы меня вообще не интересуют, интересуют конкретные предложения, воплощённые в трёх строчках кода, а дальше я сам всё допиливаю до того что мне надо.
    А подобное философствование
    накак не приближает к решению, я конечно не профи, но и не полный идиот, чтобы этого не понимать.
    Поэтому и спросил про три строчки кода.
    Я вот не могу остановить цикл редиректа, который теоретически должен останавливаться командой exit; и цикл идёт до зависания
    Код (Text):
    1. $host  = $_SERVER['HTTP_HOST'];
    2. $uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    3. $extra = 'redirect.php';
    4. header("Location: http://$host$uri/$extra");
    5. exit;
    Код (Text):
    1. <?php
    2. $host  = $_SERVER['HTTP_HOST'];
    3. $uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    4. $extra = 't54646.php';
    5. header("Location: https://$host$uri/$extra");
    6. exit;
    7. ?>
    уже и header_remove(); добавлял в конце, а результата нет... так что если знаете как остановить этот циклический редирект, подскажите, если нет... то на нет, и суда нет )))
     
  18. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Не должен. exit() останавливает выполнение php-скрипта, а редирект выполняется браузером, но ты ведь читал что тебе писал @Fell-x27 и сам это знаешь, да?
     
  19. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    спасибо за умный совет, но тыкать незнакомому взрослому человеку, это хамство...
     
  20. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Это интернет. Более того - это форум: тут могут и тыкать и послать и это норма. За классами и мимимишкой можно сходить в одноклассники.
     
    mahmuzar нравится это.
  21. Pumbaa

    Pumbaa Новичок

    С нами с:
    17 янв 2018
    Сообщения:
    35
    Симпатии:
    2
    форум, это не синоним хамства... жаль что вы этого не знаете... видно, что с воспитанием у вас в детстве были большие пробелы... кстати, кроме умничанья, других способностей я не заметил, так что если нечего сказать по сути вопроса, пожалуйста не засоряйте эфир репликами
     
  22. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    У меня с воспитанием всё было нормально, мне мама в детстве рассказывала, что либо ты соблюдаешь правила и нормы сообщества, либо покидаешь его. Потому что навязывание своих норм и развешивание по этому поводу ярлыков не имеет ничего общего с культурой поведения.

    Ну а то что у вас не хватает знаний понять, что я вам ответил, прямо указав на проблему и ЧСВ не позволяет даже себе признаться в этом - забавно. Потому я всё же останусь тут и понаблюдаю за следующей попыткой объяснить вам очевидные вещи.

    p.s. одна и та же ошибка во всех случаях и упорное нежелание этого понять. хех
     
    Fell-x27 нравится это.
  23. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    где-то... слышал... что... обилие... многоточий... говорит... о... психологическом... расстройстве... Впрочем... а... кто... сейчас... нормальный...
     
  24. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Ага изменил правилам сообщества ;)
     
  25. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    это как?