PHP while循环出错了

时间:2012-04-07 14:58:17

标签: php mysql sql

好的,所以我试着制作一个简单的交易脚本,我一直试图找到问题已经好几周了,我已经决定寻求帮助了。我从数据库中选择一些怪物以及贸易信息,例如交易来自谁以及它将去往谁。该脚本虽然没问题并说完了,但没有进行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'){

我刚刚剪断了一些不起作用的代码,它抓住怪物很好但是我没想做更新我想也许我已经把}}放在错误的地方或者可能有很多???

2 个答案:

答案 0 :(得分:0)

清理格式后,您会看到一个额外的分号,位于此处显示的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 */

答案 1 :(得分:0)

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

也许你的数据库结构也需要精炼。在同一行业中Whileforeach两次效率不高。根据您的描述,我将使用下表:

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

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

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