为什么我的PHP查询字符串会出问题?
我正在编写一个简单的网页应用,用PHP、SQL和 HTML来显示抽认卡。
为了显示当前创建的卡片,我有一个名为view_cards.php的页面,它通过查询字符串加载,查询字符串包含所选牌组的编号,后面跟着所选卡片的编号,例如 www.view_cards.php/?deck_id=4&cardNumber=0
要在卡片之间上下移动,用户点击的其实是两个表单的提交按钮所对应的图标,这些表单包含隐藏字段,用来把牌组编号以及下一张或上一张卡片的编号传入查询字符串。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<?php
if (isset($deck_id)) {
// Get deck_id from URL query string
$deck_id = $_GET["deck_id"];
} else {
$deck_id = 0;
}
if (isset($cardNumber)) {
// Work out which card to show, using cardNumber from URL query string
$cardNumber = $_GET["cardNumber"];
} else {
$cardNumber = 0;
}
?>
<body>
<!-- Submit button has hidden field to decrease value of cardNumber -->
<form action="view_cards.php" method="get">
<input type="hidden" name="deck_id" value="<?php echo $deck_id; ?>">
<input type="hidden" name="cardNumber" value="<?php echo $cardNumber--; ?>">
<input type="submit" value="Previous Card">
</form>
<!-- Submit button has hidden field to increase value of cardNumber -->
<form action="view_cards.php" method="get">
<input type="hidden" name="deck_id" value="<?php echo $deck_id; ?>">
<input type="hidden" name="cardNumber" value="<?php echo $cardNumber++; ?>">
<input type="submit" value="Next Card">
</form>
</body>
</html>
也许这并不是最干净的实现方式,但作为初学者,我想它至少应该能起作用。
然而,如果我点击“上一张卡”的提交按钮,结果URL中的 cardNumber 的值保持不变,而不是递减;而如果点击“下一张卡”的提交按钮,它本来应递增,结果却反而减少了1。
有人能指出导致这种奇怪行为的原因吗?
解决方案
我建议你研究关于自增/自减运算符的官方文档:
https://www.php.net/manual/en/language.operators.increment.php
例如,你可以注意到对于 $a++(后置自增),它先返回 $a,然后再把 $a增加1
因此,下面的代码:
$x=10;
echo $x++;
将显示10(echo $x++),但随后 $x的值为11
可以看看这样的示例:https://onlinephp.io/c/85c38
现在,在你的代码中,你可能希望:
- 在计算“下一张卡”和“上一张卡”时避免使用相同的变量 $cardNumber(例如使用两个新变量,比如 $nextcardNumber和 $precardNumber)
- 除非你熟悉自增/自减运算符,否则可以考虑直接使用+1 / -1来完成
因此,只需使用类似如下的代码:
$nextcardNumber = $cardNumber+1;
$precardNumber = $cardNumber-1;
这样代码将变为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<?php
if (isset($deck_id)) {
// Get deck_id from URL query string
$deck_id = $_GET["deck_id"];
} else {
$deck_id = 0;
}
if (isset($cardNumber)) {
// Work out which card to show, using cardNumber from URL query string
$cardNumber = $_GET["cardNumber"];
} else {
$cardNumber = 0;
}
?>
<?php
$nextcardNumber = $cardNumber+1;
$precardNumber = $cardNumber-1;
?>
<body>
<!-- Submit button has hidden field to decrease value of cardNumber -->
<form action="view_cards.php" method="get">
<input type="hidden" name="deck_id" value="<?php echo $deck_id; ?>">
<input type="hidden" name="cardNumber" value="<?php echo $precardNumber; ?>">
<input type="submit" value="Previous Card">
</form>
<!-- Submit button has hidden field to increase value of cardNumber -->
<form action="view_cards.php" method="get">
<input type="hidden" name="deck_id" value="<?php echo $deck_id; ?>">
<input type="hidden" name="cardNumber" value="<?php echo $nextcardNumber; ?>">
<input type="submit" value="Next Card">
</form>
</body>
</html>
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。