将数组值插入SQL

时间:2011-07-02 15:19:05

标签: php mysql

我使用以下代码随机化了一组问题:

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数据库中只会得到零。有什么建议?

1 个答案:

答案 0 :(得分:1)

好吧,首先我没有看到任何事情为会话值分配任何内容,但代码的问题是这种模式:'$_SESSION[itemorder][1]'。首先,我会确保MySQL期望varchar而不是int。如果它是一个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"]}"; 

输出

  

“这里”

但是,我想知道你使用implode会不会更好:

$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站点,看看他们是否不能提供有关数据库设计的提示。