2011-07-02 137 views
0

我隨機的一組問題,使用以下代碼:插入數組值到SQL

for($i=0; $i < count($nwi); $i++) 
$itemorder[$i] = $i; 
shuffle($itemorder); 

$_SESSION["itemorder"] = $itemorder; 

幾頁之後,提出的問題的一部分被呈現:

for ($i=0; $i<40; $i++) { 
     if ($i % 10 ==0) echo $header; 
     echo '<tr class="'; 

     if(in_array($itemlabel[$_SESSION["itemorder"][$i]], $errors)) echo 'skip'; 
     elseif ($i % 2 == 0) echo 'even';     
     else echo 'odd';         

     echo '">'; 
     echo '<td>' . ($i + 1) . ".</td><td>" . $itemtext[$_SESSION["itemorder"][$i]] . '</td>'; 
     for ($j = 1; $j <= 6; $j++) { 
      echo "\n" . '<td'; 
      if ($j == 6) echo ' style="background-color:#999;"'; 
      echo '><input type="radio" name="'; 
      echo $itemlabel[$_SESSION["itemorder"][$i]]; 
      echo '" value="'; 
      echo $j; //value of the input 
      echo '"'; 
      if ($_POST[$itemlabel[$_SESSION["itemorder"][$i]]] == $j) echo " checked"; 
      echo '></td>'; 
     } 

在的端調查,我試圖把問題的答案(應該從1-8的值範圍)到我的SQL數據庫中:

"INSERT INTO surveydata 
    (id, agree_pppg_01,agree_pppg_02,agree_pppg_03,.... 
VALUES  
('$_SESSION[id]', '$_SESSION[itemorder][0]', 
    '$_SESSION[itemorder][1]', '$_SESSION[itemorder][2]', 
    '$_SESSION[itemorder][3]',... 

無論我如何回答問題,我都只在我的SQL數據庫中獲得零。有什麼建議麼?

+0

我會做一個'var_dump($ _ SESSION);'以確保這些值是以開頭的。 – Drazisil

+0

uhm ..這是你正在執行的SQL查詢嗎? –

回答

1

嗯,首先我沒有看到任何分配會話值的任何內容,但是您的代碼存在以下問題:'$_SESSION[itemorder][1]'。首先,我會確保MySQL預期有一個varchar,而不是int。如果它是一個整數,好的形式是確保它不被引用。

更重要的是,當你在PHP中有一個關聯數組時,你需要確保PHP能夠做到這一點。

$a = array("hi"=>array("world"=>0)); echo "$a[hi][world]"; 

輸出

數組[世界]

周圍查找戴上牙套,以確保它知道把它當作一個數組,然後把報價圍繞所有字符串索引:

// note the braces and quotes 
$a = array("hi"=>array("world"=>"here")); echo "{$a["hi"]["world"]}"; 

輸出

「這裏」

但是,我不知道你不會是最好只使用破滅:

$columns = implode(',', $_SESSION['itemorder']); 
$query = "INSERT INTO surveydata 
       (id, agree_pppg_01,agree_pppg_02,agree_pppg_03,.... 
      VALUES ('{$_SESSION["id"]}', $columns)"; 

我感到有必要指出的是,該系統似乎沒有可擴展性,而像agree_pppg_02這樣的列名稱不具有描述性。您可能想要訪問codereview stackexchange網站,看看他們是否無法提供數據庫設計技巧。