我有一个表单的代码:
<?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_id
为3
,
请注意伦敦&#39;卡片显示&#39;旅行&#39;纽约&#39;纽约&#39;卡片显示上述if
声明定义的文本。
当您点击“旅行”时,预期效果应该是什么?它应该在表单提交上切换文本,但是,似乎不会发生。它只在我刷新页面时发生(而不是通过表单提交)。以下GIF应该澄清我的意思。请注意它是如何切换“旅行”的徽章的。并且“你们在这里。&#39;文本。现在,当我明确刷新页面时,您可以看到更改生效。
是什么原因导致更改无法生效?
表单提交如何工作而不是页面刷新?
答案 0 :(得分:2)
我会从你的代码中假设
$user_stat
变量已经在您尝试保存到数据库时实例化,而数据库又用于打印表单。
简而言之,这里发生的是:
从数据库获取$ user_stat并将其放入变量
更改数据库中的$ user_stat
尝试使用$ user_stat
的未更改版本在最后一步之前,您应该从teh数据库中重新选择$ user_stat,或者如果您希望在最后一步到来时看到您的更改,则应该使用代码更改其值