2015-06-09 44 views
-1

將我的表單保存到數據庫並爆炸出現小問題。問題如下:Implode和表單數據

我有一個表單有多個字段,包括複選框,它有一個值的數組。如果我將整個表單發送到我的php腳本中,它將取消選中的最後一個複選框的值,所以問題是,我只獲取數據庫中最後一個選中的值,而不是所有選中的值。

所以我做了一些調試,我發現這個問題,這是在這一行:

$values = "'" . implode("', '", $_POST) . "'"; 

這條不幸的是我的數據。

編輯:

這是我的PHP腳本:

$hoeveelheidvalues = count($_POST); 


$values = "'" . implode("', '", $_POST) . "'"; 
$queryvoorderesperform = "INSERT INTO `app_res_per_form` ("; 

for($i = 1; $i <= $hoeveelheidvalues; $i++) 
{ 
    if($i==$hoeveelheidvalues) 
    { 
     $queryvoorderesperform .= "vraag$i"; 
    } 
    else{ 
     $queryvoorderesperform .= "vraag$i, "; 
    } 

} 

$queryvoorderesperform .= ") VALUES ($values)"; 

編輯2:

如果我使用序列化,我得到一個非常怪異的字符串。這是$ queryvoorderespform:

INSERT INTO `app_res_per_form` (vraag1, vraag2, vraag3, vraag4, vraag5, vraag6, vraag7, vraag8, vraag9, vraag10, vraag11, vraag12) 
VALUES (a:12:{s:16:"multipleradios-0";s:11:"Orientation";s:11:"textinput-0";s:0:"";s:20:"multiplecheckboxes-0";s:9:"Recycling";s:11:"textinput-1";s:0:"";s:10:"interestin";s:15:"Diverter Valves";s:12:"rotaryvalves";s:7:"AL, AXL";s:14:"divertervalves";s:3:"PTD";s:15:"othercomponents";s:3:"DUC";s:11:"textinput-3";s:0:"";s:16:"multipleradios-1";s:18:"Systems Integrator";s:16:"multipleradios-2";s:38:"Will buy product in long time (1 year)";s:15:"standcrewmember";s:13:"Aap";}) 
+0

檢查錯誤會發出語法錯誤信號。不知道你使用哪個MySQL API連接/查詢。 –

+0

必須有100個更好的方法來做到這一點,並通過你的理智檢查你的$ _POST數組中的值 – RiggsFolly

+0

有100000種方法可以做得更好。目前我需要做這項工作,但這只是一個臨時解決方案。 –

回答

2

您可以使用serialize(),它是一個PHP函數轉換一個數組或對象將使用unserialize();

然後可以重新水合回一個數組或對象的字符串$ values = serialize($ _ POST);

或者更好的是使用

$values = json_encode($_POST); 

和再水合入數組的$ _POST內容保存爲JSON或使用對象

$var = json_decode($x); 

這些文件可以在PHP陣列或PHP對象使用。

好了,現在我看到你實際上是試圖做這樣試試這個: -

$fields = ''; 
$values = ''; 
$count = 0; 

foreach ($_POST as $idx => $val) { 
    // I assume you are skipping occurance 0 for a reason 
    if ($count == 0) { 
     $count++; 
     continue; 
    } 

    $fields .= sprintf('vraag%d,', $count); 
    $values .= sprintf("'%s',", $val); 

    $count++; 
} 
//trim off trailing commas 
rtrim($fields, ','); 
rtrim($values, ','); 

$sql = sprintf('INSERT INTO `app_res_per_form` (%s) VALUES (%s)', 
       $fields, $values); 

} 

哦,我假設你正在使用的MYSQL_擴展!有人會告訴你不要切換到MYSQLI_或PDO。所以它可能是我。

+0

見上,我做了一個編輯。它是動態保存到數據庫中的,所以我不認爲我可以使用序列化。 –

+0

這只是你不記得瀏覽器只發送CHECKED複選框到PHP腳本,並忽略未選中的複選框。 – RiggsFolly

+0

我需要測試一些東西了。感謝你的回答!如果我修復它,我會確保任何人都知道解決方案是什麼,並且我的答案是正確的! –