0

複数のドロップダウン メニューがあります。ユーザーが送信ボタンをクリックしたとき。if 句の isset 関数がトリガーされ、次のコードが実行されます

 if(isset($_POST["submit"]))
  {
     $player_id = $_REQUEST['players'];
     var_dump ($player_id);
            for($i=0; $i < sizeof($player_id); $i++) //query database with different player_id each time
            {
                foreach ($player_id as $id){
                    $query = 'SELECT `name`  FROM `player_info`
                    WHERE `player_id` = '.$id;
                    $return_names = mysql_query($query) or die(mysql_error());
                                            }
                        while($row = mysql_fetch_array($return_names))
                        {
                            $selected[] = $row['name'];     
                        }                   
                        var_dump($selected);
                    }
                }

上記のコードがすべきことは、ユーザーが選択したプレイヤーの名前を返すことです。ただし、開くと次のようになります。

ここに画像の説明を入力

最初の var_dump で使用する $player_id 配列が異なる player_id 値を保持していることに注意してください。

ただし、2 番目の配列 $selected で var_dump を実行すると、配列には「Burger」という値のみが含まれます。

問題は foreach ループと、データベースにクエリを実行する方法にあると思われます。誰かが私を正しい方向に向けることができれば、それは大歓迎です。前もって感謝します。

4

5 に答える 5

2

力ルークを使用!safeMysqlのような抽象化ライブラリを使用すると、2行のコードになります

$sql = 'SELECT name  FROM player_info WHERE player_id in (?a)';
$names = $db->getCol($sql,$_POST['players']);

そして、あなたのものとは異なり、注射から安全です.

于 2013-10-06T10:35:45.340 に答える
0

forループを削除すると、機能するはずです。を使用して、各プレーヤー ID を反復処理したいと考えていますforeach。外はfor不要です。

于 2013-10-06T10:29:35.777 に答える
0

基本的に、同じループを 2 回実行しています。テイクアウト

for($i=0; $i < sizeof($player_id); $i++){} 
于 2013-10-06T10:44:04.390 に答える
-1

理由もなく二重ループしています。

SELECTまた、プレイヤー ID ごとに1 つを実行している間、 の外側foreachで結果を反復しようとしています。つまり、最後のものだけを反復することになります。

さらに、SELECT多くても 1 つの行を生成する場合、反復は必要ありません。

次のようにしてみてください。

if(isset($_POST["submit"]))
  {
  $player_id = $_REQUEST['players'];
  var_dump ($player_id);
  foreach ($player_id as $id)
    {
    $query = 'SELECT `name`  FROM `player_info` WHERE `player_id` = '.$id;
    $return_names = mysql_query($query) or die(mysql_error());
    $row=mysql_fetch_array($return_names); // at most one -- or not?
    if($row)
      {
      $selected=$row['name'];     
      var_dump($selected);
      }
    else
      echo "Player with id $id not found in DB!";
    }
  }
于 2013-10-06T10:47:18.663 に答える