2013-02-25 37 views
4

我想懶惰(或聰明):我有7個複選框,它們與MySQL表中的7列相關。將數組提取到動態變量中

複選框被張貼在一個陣列:

$can = $_POST['can']; 

我創建了下面的循環轉儲爲MySQL插入變量:

for($i=1;$i<8;$i++){ 
    if($can[$i] == "on"){ 
     ${"jto_can".$i} = 'Y'; 
    } 
    else{ 
     ${"jto_can".$i} = 'N'; 
    } 
} 
print_r($jto_can1.$jto_can2.$jto_can3.$jto_can4.$jto_can5.$jto_can6.$jto_can7); 

這種正確輸出:

YYNYYYY 

但是,當我嘗試在我的MySQL更新中使用這些變量時,它不接受更改ES。

mysqli_query($db, "UPDATE jto SET jto_can1 = '$jto_can1', jto_can2 = '$jto_can2', jto_can3 = '$jto_can3', jto_can4 = '$jto_can4', jto_can5 = '$jto_can5', jto_can6 = '$jto_can6', jto_can7 = '$jto_can7' WHERE jto_id = '$id'")or die(mysqli_error($db)); 

任何人都可以解釋爲什麼print_r顯示變量,而MySQL更新沒有?

+1

堅持與陣列,沒有任何意義或創造所有這些變量的好處。 – nickb 2013-02-25 18:09:06

+0

此外,你錯過了這裏的「WHERE」之間的空間:'jto_can7 ='$ jto_can7'WHERE jto_id ='$ id'' – nickb 2013-02-25 18:09:51

+0

我應該如何將數組加載到MySQL中呢? – thebarless 2013-02-25 18:10:15

回答

2

棒與陣列,並形成動態查詢:

$sql = 'UPDATE jto SET '; 

$cols = array(); 
foreach(range(1, 7) as $i) { 
    $value = $_POST['can'][$i] == 'on' ? 'Y' : 'N'; // Error check here, $_POST['can'] might not exist or be an array 
    $cols[] = 'jto_can' . $i . ' = "' . $value . '"'; 
} 

$sql .= implode(', ', $cols) . ' WHERE jto_id = "' . $id . '"'; 

現在做一個var_dump($sql);看到您的新的SQL語句。

1

這不是mysql問題。 mysql只會看到你輸入的字符串。例如在執行mysql_query之前轉儲出查詢字符串。我猜你正在其他地方做這個查詢,並且遇到了範圍問題。是的,這是懶惰的。不,這不是「聰明」。你只是爲自己做更多的工作。有什麼問題在做

INSERT ... VALUES jto_can1=$can[0], jto_can2=$can[1], etc... 
+0

我用這種方法唯一的困難是我沒有看到如何控制$ can [0]得到一個「N」值時,該框未選中。該數組只會通過選中的(除非我錯過了某些東西)。 – thebarless 2013-02-25 18:35:02