1

好的,所以我正在尝试制作一个简单的交易脚本,几周来我一直试图找到问题,现在我决定寻求帮助。我从数据库中选择了一些怪物以及交易信息,例如交易来自谁以及交易对象。该脚本虽然可以并说它已完成,但没有进行 2 次更新。从数据库中获取怪物然后更新那里的所有者。我有会话开始,页面顶部的 db connect 任何人都说这是问题

} 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'){

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

4

2 回答 2

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 */
于 2012-04-07T15:32:34.903 回答
0

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

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

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

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

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

于 2012-04-07T15:53:19.273 回答