За последние 24 часа нас посетили 53779 программистов и 1773 робота. Сейчас ищут 819 программистов ...

После submit данные приходят только от повторной перезагрузки

Тема в разделе "PHP для новичков", создана пользователем yagordeev, 16 ноя 2017.

  1. yagordeev

    yagordeev Новичок

    С нами с:
    14 ноя 2017
    Сообщения:
    7
    Симпатии:
    0
    После сабмита "cards_frm" отправленные данные приходят из базы только после перезагрузки страницы, получается 2 перезагрузки должно произойти прежде чем данные придут, в чем может быть проблема?

    <?php
    if($_POST["cards_update"]){
    $post_cards = $mysqli->query("
    INSERT `members`
    SET `birthday`='".$_POST['birthdaycard']."',
    `Card`='".$_POST['numbercard']."',
    `CardAdd`='".$_POST['CardAdd']."'
    WHERE `email`='".$_SESSION['email']."'
    LIMIT 1;
    ");
    }
    $GetCards = $mysqli->query("SELECT * FROM `Cards` WHERE `Email`='".$_SESSION['email']."';");
    $Cards = $GetCards->fetch_assoc();
    ?>

    <?php if ($row_p["CardAdd"] == 'yes') : ?>
    <?php if (!empty($Card)) : ?>
    1 исход
    <?php endif; ?>
    <?php elseif (empty($row_p["CardAdd"])) : ?>
    <?php if (!empty($Cards["Number"])) : ?>
    <form name="cards_frm" method="POST">
    <input type="text" value="yes" name="CardAdd" hidden>
    <input type="text" value="<?php echo $Cards['Birthday']; ?>" name="birthdaycard" hidden>
    <input type="text" value="<?php echo $Cards['Number']; ?>" name="numbercard" hidden>
    <input type="submit" class="card_update" name="cards_update" value="Добавить">
    </form>
    <?php endif; ?>
    <?php endif; ?>

    В то время, как эта форма отправляет и получает все с первого раза:

    <?php
    if($_POST["user_update"]){
    $post_form = $mysqli->query("
    UPDATE `members`
    SET `username`='".$_POST['username']."',
    `last_name`='".$_POST['last_name']."',
    `patronymic`='".$_POST['patronymic']."',
    `birthday`='".$_POST['birthday']."',
    `street`='".$_POST['street']."',
    `city`='".$_POST['city']."',
    `phone`='".$_POST['phone']."'
    WHERE `email`='".$_SESSION['email']."'
    LIMIT 1;
    ");
    }
    $post_form = $mysqli->query("SELECT * FROM `members` WHERE `email`='".$_SESSION['email']."';");
    $row_p = $post_form->fetch_assoc();
    ?>

    <form name="user_frm" method="POST" style=" padding: 0 2.5%; text-align: center ;">
    ...
    <input class="p_input_sub" type="submit" value="Cохранить" name="user_update">
    </form>
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.816
    Симпатии:
    1.333
    Адрес:
    Лень
    в кривой логики кода.
    Валидатор ущемлен в своих способностях так, что его и не назвать валидатором данных.
    а еще узнай что такое - отображение ошибок.
    как правильно принимать пост данные и фильтровать.
    --- Добавлено ---
    что такое сессия в пхп и как правильно ее кушать
    --- Добавлено ---
    что такое sql injection, и какие презервативы для этого нужны.
     
  3. karmay

    karmay Активный пользователь

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    Дело в кривой логике кода, до всего остального нужно дорасти.
    PHP язык серверный, работает он на сервере, обрабатывает форму и возвращает html.
    Отправил данные, они на сервере обрабатываются, возвращается страница. Попробуй var_dump массива $_POST в разных местах своего скрипта, в конце, после формы, в начале...
    Да прибудет свет во тьме...
    Тут, кстати, про презервативы, чет читал, запретили так говорить, ган-ны вроде тоже нельзя, как дальше жить будем, товарищи??
     
    gruth нравится это.
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.816
    Симпатии:
    1.333
    Адрес:
    Лень
    Надувные шарики :D:D:D:D
     
  5. yagordeev

    yagordeev Новичок

    С нами с:
    14 ноя 2017
    Сообщения:
    7
    Симпатии:
    0
    Извиняюсь, менял и забыл исправить, код такой:
    PHP:
    1. <?php
    2. if($_POST["cards_update"]){
    3. $post_cards = $mysqli->query("
    4. UPDATE `members`
    5. SET `birthday`='".$_POST['birthdaycard']."',
    6. `Card`='".$_POST['numbercard']."',
    7. `CardAdd`='".$_POST['CardAdd']."'
    8. WHERE `email`='".$_SESSION['email']."'
    9. LIMIT 1;
    10. ");
    11. }
    12. $GetCards = $mysqli->query("SELECT * FROM `Cards` WHERE `Email`='".$_SESSION['email']."';");
    13. $Cards = $GetCards->fetch_assoc();
    14. ?>
    15.  
    16. <?php if ($row_p["CardAdd"] == 'yes') : ?>
    17.     <?php if (!empty($Card)) : ?>
    18.       1 исход
    19.     <?php endif; ?>
    20. <?php else : ?>
    21.     <?php if (!empty($Cards["Number"])) : ?>
    22.       <form name="cards_frm" method="POST">
    23.       <input type="text" value="yes" name="CardAdd" hidden>
    24.       <input type="text" value="<?php echo $Cards['Birthday']; ?>" name="birthdaycard" hidden>
    25.       <input type="text" value="<?php echo $Cards['Number']; ?>" name="numbercard" hidden>
    26.       <input type="submit" class="card_update" name="cards_update" value="Добавить">
    27.       </form>
    28.    <?php endif; ?>
    29. <?php endif; ?>
    Что не так, можно конкретнее, и по существу. Что именно в данном коде влияет на ошибку, которую я описал, про резинки я не спрашивал
     
    #5 yagordeev, 16 ноя 2017
    Последнее редактирование: 16 ноя 2017
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    окружай код в [php] . . . [/php] чтобы выглядел хорошо
     
  7. yagordeev

    yagordeev Новичок

    С нами с:
    14 ноя 2017
    Сообщения:
    7
    Симпатии:
    0
    Спасибо, исправил!
     
  8. yagordeev

    yagordeev Новичок

    С нами с:
    14 ноя 2017
    Сообщения:
    7
    Симпатии:
    0
    Никто не знает?
    Выводил форму отдельно, удалял другую, которая работала, форму и php от нее - все также
    --- Добавлено ---
    Короче помогла только задержка.
    Код (Text):
    1. <script>
    2. function refr()
    3. {setTimeout("document.location.reload()", 1000);
    4. }
    5. </script>
    6. <form onsubmit="refr();">
     
  9. karmay

    karmay Активный пользователь

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    Позвольте полюбопытствовать, это что за сайт, что за эльдорадо такое с номерами карт, я надеюсь банковских, можно ссылку?
     
  10. yagordeev

    yagordeev Новичок

    С нами с:
    14 ноя 2017
    Сообщения:
    7
    Симпатии:
    0
    Нет, карты не банковские, бонусные. Ссылку не дам, не нравится мне Ваш интерес :)
     
  11. karmay

    karmay Активный пользователь

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    А вот чтобы интерес такой пропал не только у меня но и у всех окружающих и мимо проходящих, запомните на всегда, что ВСЕ ДАННЫЕ приходящие от посетителей вашего WEB-приложения категорически НЕОБХОДИМО ОБРАБАТЫВАТЬ, начиная с удаления лишних пробелов по краям.... почитайте про SQL-инъекции.