表单是否在提交时刷新页面?

时间:2017-12-10 21:56:54

标签: php html forms

我有一个表单的代码:

<?php
if ($user_stat->location_id === $destination->destination_id) {
    ?>
    <small class="pull-left">You are here.</small>
    <?php
} else {
    ?>
    <form class="pull-left" action="my_offices.php" method="post">
        <input type="hidden" name="office_id" value="<?= $destination->destination_id ?>" />
        <input type="hidden" name="action" value="travel" />

        <a href="javascript:void(0);" role="button" class="badge badge-primary" onclick="$(this).parent().submit();">Travel</a> <small><?= format_money(TRAVEL_COST) ?></small>
    </form>                            
    <?php
}
?>

单击链接时,它会提交表单,从而导致执行以下代码,

if (!Request::check_post('office_id')) {
    echo UI::alert('Sorry, a malformed request was sent.', 'danger');
} else if (!Office::exists(Request::get_post('office_id'))) {
    echo UI::alert('Sorry, this <strong>Office</strong> does not exist.', 'danger');
} else if (!UserOffice::owns($user->id, Request::get_post('office_id'))) {
    echo UI::alert('Sorry, you don\'t own this <strong>Office</strong>.', 'danger');
} else if (Request::get_post('office_id') === $user_stat->location_id) {
    echo UI::alert('Sorry, you are currently situated in this <strong>Office</strong>.', 'danger');
} else {
    $office_id = Sanitize::int(Request::get_post('office_id'));
    $total = $user_stat->money - TRAVEL_COST;

    if ($total < 0) {
        echo UI::alert('Sorry, you don\'t have enough money to travel.', 'danger');
    } else if (UserOffice::travel($user->id, $office_id)) {
        $minus = Database::run('UPDATE user_stat SET money = ? WHERE id = ?', [$total, $user->id]);

        if ($minus) {
            echo UI::alert('You travelled to your <strong>' . Office::get($office_id)->name . '</strong> office.', 'success');
        }
    }
}

重要的是UserOffice::travel($user->id, $office_id)更新表格中与相应$office_id匹配的字段。以下内容应阐明其含义。

注意:更改会反映在数据库中,我已经确认。

我目前在纽约&#39;其中$office_id3

请注意伦敦&#39;卡片显示&#39;旅行&#39;纽约&#39;纽约&#39;卡片显示上述if声明定义的文本。

问题

当您点击“旅行”时,预期效果应该是什么?它应该在表单提交上切换文本,但是,似乎不会发生。它只在我刷新页面时发生(而不是通过表单提交)。以下GIF应该澄清我的意思。请注意它是如何切换“旅行”的徽章的。并且“你们在这里。&#39;文本。现在,当我明确刷新页面时,您可以看到更改生效。

是什么原因导致更改无法生效?

表单提交如何工作而不是页面刷新?

1 个答案:

答案 0 :(得分:2)

我会从你的代码中假设

$user_stat

变量已经在您尝试保存到数据库时实例化,而数据库又用于打印表单。

简而言之,这里发生的是:

从数据库获取$ user_stat并将其放入变量

更改数据库中的$ user_stat

尝试使用$ user_stat

的未更改版本

在最后一步之前,您应该从teh数据库中重新选择$ user_stat,或者如果您希望在最后一步到来时看到您的更改,则应该使用代码更改其值