1

わかりましたので、簡単な取引スクリプトを作成しようとしています。何週間も問題を見つけようとしてきましたが、助けを求めることにしました。データベースからいくつかのモンスターを選択し、取引情報 (たとえば、誰からの取引で、誰が取引先であるか) も選択します。スクリプトは正常に実行され、完了したと表示されますが、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'){

動作していないコードの一部を切り取りましたが、モンスターをうまくつかんでいますが、更新を行っていません.}}を間違った場所に持っているか、多くの必要があると思います???

4

2 に答える 2

0

スクリプトが正常に実行されたことをどのように確認できますか? どこでも成功をチェックしていません。送信ボタンが押されると、成功メッセージが常にエコーされます。影響を受ける行をチェックして、成功を確認する必要があるかもしれません。 http://php.net/manual/en/function.mysql-affected-rows.php

おそらく、DB 構造も改良する必要があります。While同じトレードで 2 回インサイドforeachするのはあまり効率的ではありません。あなたの説明に基づいて、次の表を使用します。

  • user:これは当たり前…
  • pokemon_gen: さまざまなモデルに関する一般的な情報。
  • pokemon_unique: すべてのアイテムには一意の ID が必要です。このテーブルには、所有者 (ユーザー) とポケモン モデルへの FK が含まれています。また、最後の取引日、ポケモンの状態 (これが売買データベースの場合) などに関する情報もここにある可能性があります (または別のより詳細なテーブルへの FK)。
  • trade:単一の取引に関するデータと情報。いつ、誰から、誰に、どのポケモンがトレードされたのか。そのためにはFK topokemon_uniqueが必要です。

一意のポケモンとその現在および将来の所有者を識別するための配列のみが必要です。(1 つの取引に必要なのは、現在の所有者と新しい所有者の 2 人だけではありませんか?)。pokemon_uniqueテーブルの所有者を更新し、行を作成するだけですtrade(ポケモンごとに 1 行)。

多分私は何かを逃した。うまくいけば、そうではありません。

于 2012-04-07T15:53:19.273 に答える
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 に答える