2012-04-07 165 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(每個小寵物一行)。

也許我錯過了什麼。希望不是。