为什么我的PHP查询字符串会出问题?

前端开发 2026-07-10

我正在编写一个简单的网页应用,用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

现在,在你的代码中,你可能希望:

  1. 在计算“下一张卡”和“上一张卡”时避免使用相同的变量 $cardNumber(例如使用两个新变量,比如 $nextcardNumber和 $precardNumber)
  2. 除非你熟悉自增/自减运算符,否则可以考虑直接使用+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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章