2012-04-07 168 views
1

好吧,所以即时尝试做一个简单的交易脚本我一直在试图找到问题数周,现在我已决定寻求帮助。我从数据库中选择一些怪物以及交易信息,例如交易的来源以及交易的对象。该脚本虽然没问题,并说它已完成,但不做2次更新。它需要从数据库中抓取怪物,然后更新那里的所有者。我有会话开始和DB在页面的顶部连接是对任何人说,这是问题PHP while循环出错

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

我刚才剪断的这些工作不被抓住怪物不错,但仅仅是代码位没有进行更新,我想也许我得到了错误的地方}或可能有很多?

+3

这是对旧服务器的某种压力测试吗?另外,你有没有尝试**学习SQL **?!它看起来像你甚至不能写一个简单的'JOIN'语句。 – 2012-04-07 15:01:38

+0

你是什么意思压力测试? – user1121083 2012-04-07 15:02:56

+0

https://en.wikipedia.org/wiki/Stress_testing_(software) – 2012-04-07 15:04:13

回答

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 */ 
+0

删除多余的部分后得到一个白页} – user1121083 2012-04-07 15:51:08

+0

不幸的是,我不能在没有看到更多代码的情况下诊断白页的原因。也许你可以通过http://pastebin.com/向我们提供更大的样本? – Sampson 2012-04-07 16:24:48

+0

http://pastebin.com/2ybh7kYw你去了 – user1121083 2012-04-07 18:56:51

0

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

也许你的数据库结构也需要提炼。 While里面foreach两次在同一行业是不是很有效率。根据您的描述,我会用下表:

  • user:这是理所当然...
  • pokemon_gen:关于不同型号的一般信息。
  • pokemon_unique:每个项目都应该有一个唯一的ID。该表包含所有者(用户)和口袋妖怪模型的FK。还有关于上次交易日期,pokemon条件(如果这是一个买入和卖出数据库)等的信息可以在此处(或FK到另一个更详细的表格)。
  • trade:有关单一贸易的数据和信息。哪个宠物小精灵是从谁到谁和什么时候交易的。 FK到pokemon_unique是需要的。

您应该只需要阵列来识别独特的小宠物及其当前和未来的所有者。 (没有一个交易只需要两个所有者:现在的和新的?)。您只需更新pokemon_unique表中的所有者并创建一行到trade(每个小宠物一行)。

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