好的,所以我试着制作一个简单的交易脚本,我一直试图找到问题已经好几周了,我已经决定寻求帮助了。我从数据库中选择一些怪物以及贸易信息,例如交易来自谁以及它将去往谁。该脚本虽然没问题并说完了,但没有进行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'){
我刚刚剪断了一些不起作用的代码,它抓住怪物很好但是我没想做更新我想也许我已经把}}放在错误的地方或者可能有很多???
答案 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
也许你的数据库结构也需要精炼。在同一行业中While
内foreach
两次效率不高。根据您的描述,我将使用下表:
user
:这是理所当然的...... pokemon_gen
:有关不同模特的一般信息。pokemon_unique
:每件商品都应该有唯一的ID。此表包含FK到所有者(用户)和口袋妖怪模型。还有关于最后交易日期,口袋妖怪的条件(如果这是一个买卖数据库)等信息可以在这里(或FK到另一个更详细的表)。trade
:有关单一交易的数据和信息。哪个口袋妖怪是从谁到谁以及何时交易的。为此需要FK到pokemon_unique
。您应该只需要数组来识别独特的小宠物及其当前和未来的所有者。 (一笔交易是否只需要两个所有者:当前和新的?)。您只需更新pokemon_unique
表中的所有者,并为trade
创建一行(每个口袋妖怪都有一行)。
也许我错过了什么。希望不是。