簡體   English   中英

PHP while 循環出錯

[英]PHP while-loop gone wrong

好的,所以我正在嘗試制作一個簡單的交易腳本,我已經嘗試了數周的時間來尋找問題,現在我決定尋求幫助。 我 select 來自數據庫的一些怪物以及交易信息,例如交易來自誰以及交易去往誰。 腳本運行正常,並說它已完成,但不執行 2 次更新。 從數據庫中獲取怪物然后更新所有者。 我有 session 開始,頁面頂部的數據庫連接是任何人都說這是問題所在

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

我剛剛剪下了一些不起作用的代碼,它很好地抓住了怪物,但只是沒有進行更新我想也許我把 }} 放在了錯誤的地方或者可能有很多???

清理您的格式后,您似乎有一個額外的分號,位於此處顯示的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 */

你怎么知道你的腳本通過了? 您不會在任何地方檢查是否成功。 按下提交按鈕時,您的成功消息總是回顯。 也許您應該通過檢查受影響的行來檢查是否成功。 http://php.net/manual/en/function.mysql-affected-rows.php

也許您的數據庫結構也需要改進。 While在同一筆交易中兩次內部foreach效率不高。 根據您的描述,我將使用下表:

  • user :這是理所當然的……
  • pokemon_gen :關於不同模型的一般信息。
  • pokemon_unique :每個項目都應該有一個唯一的 ID。 此表包含所有者(用戶)和口袋妖怪 model 的 FK。還有關於最后交易日期、口袋妖怪狀況(如果這是買賣數據庫)等的信息可以在這里(或 FK 到另一個更詳細的表格)。
  • trade :關於單筆交易的數據和信息。 哪個神奇寶貝從誰那里交易到誰以及何時交易。 為此需要 FK 到pokemon_unique

您應該只需要 arrays 來識別獨特的口袋妖怪及其當前和未來的所有者。 (一筆交易不是只需要兩個所有者:當前所有者和新所有者嗎?)。 您只需更新pokemon_unique表中的所有者並為trade創建一行(每個 pokemon 一行)。

也許我錯過了什么。 希望不會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM