PHP while-loop gone wrong


PHP while-loop gone wrong

好的,所以我试图制作一个简单的交易脚本,几周来我一直在试图找到问题,现在我决定寻求帮助。我从数据库中选择了一些怪物以及交易信息,例如交易来自谁以及交易将要去谁。脚本虽然正常并说它已完成,但没有进行 2 次更新。 从数据库中抓取怪物然后更新那里的所有者。我有会话启动,页面顶部的数据库连接适用于任何人说这是问题所在

} else if ( $_POST['Submit'] == 'Complete' ) {
  //// This is the bit which does the update and does not work
  $TradeID = $_POST['id'];
  $sql12 = mysql_query( "SELECT * FROM Trades WHERE ID='$TradeID'" );
  $row12 = mysql_fetch_array( $sql12 ) or die( mysql_error() );
  $unserialize11 = unserialize( $row12['MyPokemon'] );
  foreach ( $unserialize11 as $poke222 ) {
    $sql2 = mysql_query( "SELECT * FROM user_pokemon WHERE id='$poke222'" );
    while ( $row2 = mysql_fetch_array( $sql2 ) ) {
      $Update1 = mysql_query( "UPDATE user_pokemon SET  belongsto='".$row12['Me']."' WHERE id='".$row2['ID']."'" );
    }
  }
  $unserialize12 = unserialize( $row12['OtherPokemon'] );
  foreach ( $unserialize12 as $poke122 ) {
    $sql3 = mysql_query( "SELECT * FROM user_pokemon WHERE id='$poke122'" );
    while ( $row3 = mysql_fetch_array( $sql3 ) ) {
      $Update1 = mysql_query("UPDATE user_pokemon SET   belongsto='".$row12['OtherPerson']."' WHERE id='".$row3['ID']."'" );
    }
  }
  echo "You have successfully completed trade #".$TradeID."!";
}
} else if ($_GET['action'] == 'delete'){

刚刚剪掉了一段不起作用的代码,它很好地抓住了怪物,但只是没有进行更新,我认为也许我得到了 }}在错误的地方,或者可能不得不做很多???

在清理格式时,您似乎有一个额外的分号,位于此处显示的if语句的末尾。在 if 语句中,您有 5 个 { 实例和 6 个}实例。删除最后一个}可能会解决您的问题。

保持代码格式良好将减少将来的故障排除问题。我已经删除了这个代码块的大部分正文以揭示问题大括号:

if ( $_POST['Submit'] == 'Complete' ) {
  /* Removed variable assignments */
  /* Removed foreach & while */
  /* Removed variable assignment */
  /* Removed foreach & while */
  /* Removed output */
}
} /* This brace shouldn't be here */

你怎么知道你的脚本通过正常?你不是在任何地方检查成功。按下提交按钮时,您的成功消息始终会回响。也许您应该通过检查受影响的行来检查是否成功。http://php.net/manual/en/function.mysql-affected-rows.php

也许您的数据库结构也需要改进。 在同一笔交易中两次While内部foreach效率不高。根据您的描述,我将使用下表:

  • user:这是理所当然的...
  • pokemon_gen:有关不同型号的一般信息。
  • pokemon_unique:每个项目都应该有一个唯一的ID。此表包含所有者(用户)和口袋妖怪模型的 FK。有关最后交易日期,口袋妖怪的状况(如果这是一个买卖数据库)等信息也可以在这里(或FK到另一个更详细的表格)。
  • trade:关于笔交易的数据和信息。哪个口袋妖怪是从谁交易给谁以及何时交易的。为此需要FK到pokemon_unique

您应该只需要数组来识别独特的口袋妖怪及其当前和未来的所有者。(一个交易不需要两个所有者:当前所有者和新所有者吗?您只需更新pokemon_unique表中的所有者并在trade中创建一行(每个口袋妖怪一行)。

也许我错过了什么。希望不是。