2013-10-10 110 views
2

我的頁面使用下拉菜單顯示某個運動隊的球員的姓名。教練可以登錄挑選他的球隊並選擇他的球隊將對陣的對手。 當用戶選擇團隊和反對者時,他點擊提交併觸發isset功能。PHP SQL查詢錯誤 - WHERE子句中的未知數組列

現在我從下拉菜單中捕獲值並將其上傳到數據庫中正確的表格。一切都非常簡單直接,但是當我點擊提交時,我得到了錯誤。任何幫助,將不勝感激

if (isset($_POST['submit'])) { 
    $player_ids = array_map('intval', $_REQUEST['players']); 
    $opponents_id = $_REQUEST['players']; 

    var_dump($player_ids); 
    var_dump($opponents_id); 

    $query = 'SELECT `name`, `position` 
     FROM `player_info` 
     WHERE `player_id` IN (' . implode(',', $player_ids) . ')'; 

    $return_names = mysql_query($query) or die(mysql_error()); 

     while ($row = mysql_fetch_assoc($return_names)) 
     { 
      $selected[] = $row['name']; 
      $position[] = $row['position']; 
     } 

    $query = ("SELECT `fixture_id` 
       FROM `fixtures`  
       WHERE `fixture_id` = $opponents_id") 
       or die (mysql_error()); 

    $result = mysql_query($query) or die(mysql_error()); 

       while ($row = mysql_fetch_array($query)) 
       { 
        $fixture_id[] = $row['fixture_id']; 

       } 
         for ($i=0; sizeof($selected) > $i; $i++){ 
          $sql = mysql_query("INSERT INTO `team` (`selection_id`, `fixture_id`, `player_position`,`player_name`) 
               VALUES ('$fixture_id[$i]','$position[$i]','$selected[$i]')") 
               or die(mysql_error()); 
           echo $selected[$i]; 
           echo $position[$i]; 
           echo $fixture_id[$i]; 
           echo'<br>'; 


}  

enter image description here

enter image description here

+0

WHERE子句中的未知列'Array' –

+0

哪一行是第37行? –

+0

顯示'implode(',',$ player_ids)' – Sebas

回答

3

The 'where子句'中的未知列'Array'錯誤的含義是字面意思 - 它試圖將數組值放入where子句中。

在這一行:

$query = ("SELECT `fixture_id` 
      FROM `fixtures`  
      WHERE `fixture_id` = $opponents_id") 
      or die (mysql_error()); 

您正在使用$opponents_id變量,您的var_dump所示爲包含五個值的數組。所以,你需要使用IN子句,並一一列舉出來(就像你爲$player_ids):

$query = ("SELECT `fixture_id` 
      FROM `fixtures`  
      WHERE `fixture_id` IN (" . implode(",", $opponents_id) . ");") 
      or die (mysql_error()); 

注:希望大家都知道的mysql_*系列函數的累人主題。這些已被棄用,並且不安全。我後來寫了一段時間:http://www.jorble.com/2012/06/you-are-vulnerable-for-sql-injection/

+0

非常感謝您的幫助 –

+0

不用擔心,您的項目祝您好運 –

+0

能否請您快速查看解決方案的代碼,有語法錯誤,無法找到它... –

0

的問題是在你的第二個SQL查詢:

WHERE `fixture_id` = $opponents_id" - 

這裏$opponents_id是陣列(它會自動轉換到陣列當您將值從$_REQUEST分配給它時,因爲HTML組件select作爲數組發送選項)。 只是implode()它也像你爲$player_ids做的那樣。

-1

您沒有在sql查詢中正確指定數組。

當我們使用數組,我們必須指定在查詢序列號

+0

對於如何正確指定它,你有什麼建議嗎? –

1

bodi0是正確的,你的$ opponents_id是一個數組,如果它必須是一個數組,以便做一些這樣的事情

$opponents_id_text=implode(',',$opponents_id); 
$query = ("SELECT `fixture_id` 
       FROM `fixtures`  
       WHERE `fixture_id` in ($opponents_id_text)") 
       or die (mysql_error());