2015-04-06 61 views
0

我有一個複選框列表,我想插入每個項目檢查到數據庫中。由於它是一個複選框,我只有一個值傳遞給數據庫,但我也傳遞了一個從先前的數據庫插入中獲取的變量(主鍵)。插入多個複選框答案到數據庫中

我的問題是,我不能讓它發佈到數據庫。我已經嘗試了多種方式來通過這裏的帖子來做到這一點,似乎沒有任何工作。我很茫然。我對PHP和mysqli也相當陌生,所以我相信有更好的方法來做我想做的事情,所以請幫助我。

該表由三列(school_id,graduate_id,schoolName)組成。 school_id是AI主鍵,而graduate_id將填充從先前查詢抓取的變量$ graduateID。 以下是我有:

if (isset($_POST['school'])) { 
$school=$_POST['school']; 
$schoolQuery=""; 
foreach($school as $value) { 
    if(!$schoolQuery) { 
     $schoolQuery="INSERT INTO schoolReunion (graduate_id, schoolName) VALUES ($graduateID, '$value')"; 
    } else { 
     $schoolQuery .= ", ($graduateID, '$value')"; 
     mysqli_store_result($schoolQuery); 
    } 
} 
$schoolQuery .=";"; 
if (mysqli_multi_query ($schoolQuery)) { 
    echo "Files have been updated successfully."; 
} else { 
    echo "Error: " . $schoolQuery . "<br/>" . mysqli_error($dbc); 
} 

}

當錯誤代碼打印出來,它看起來不錯,但它只是將不會發布任何東西,讓我沒有錯誤。你可以幫我嗎?

+0

什麼是你前端形式看起來像? – Maximus2012

+1

請注意,您只構建了一個插入多個數據集的查詢,因此您不需要'mysqli_multi_query'。你有一個SQL注入問題。你也應該去掉'mysqli_store_result'語句。 – jeroen

+0

在if語句中,您設置了插入的開頭部分(INSERT INTO ...),但在else語句中,您沒有任何要執行的真實查詢。邏輯是,你需要執行「this」查詢,或者「that」查詢 – MrTechie

回答

0

@Maximus & @Eko Junaidi Salam,雖然您可能是對的,但我沒有看到任何證據證明前端/表單存在問題。

@ jeroen,你是完全正確的。

  1. CarR處理單個連接的查詢,所以mysqli_query是適合的。
  2. 我建議在mysqli_real_escape_string()中包裝用戶提供的變量來覆蓋查詢漏洞。
  3. mysqli_store_result()用於返回結果集的查詢; mysqli_affected_rows()是用INSERT/UPDATE/DELETE類型查詢產生成功度量的函數。
  4. 最後,你糾正MrTechie是正確的。我不認爲他實現了查詢連接。

假設的形式提供必要的值,我會建議一個新的查詢構建部分:

$schoolQuery=""; 
foreach($school as $value){ 
    if(!$schoolQuery) { 
     $schoolQuery="INSERT INTO schoolReunion (graduate_id,schoolName) VALUES "; 
    }else{ 
     $schoolQuery.=","; 
    } 
    $schoolQuery.="('$graduateID','".mysqli_real_escape_string($dbc,$value)."')"; 
} 
$schoolQuery.=";"; 

$ graduateID尚未逸出,因爲我假設它來自一個安全的地方; $值被轉義,因爲它來自用戶輸入。

現在提供構建的查詢。您的代碼的語法和邏輯錯誤,那麼試試這個:

if($schoolResult=mysqli_query($dbc,$schoolQuery)){ 
    $total_rows=mysqli_affected_rows($dbc); 
    echo $total_rows," file",($total_rows!=1?"s have":" has")," been added."; 
    // if($total_rows<1){echo "Query Logic Error, @ $schoolQuery";} 
}else{ 
    // echo "Query Syntax Error @ $schoolQuery<br>".mysqli_error($dbc); 
} 

取消對錯誤線,而你正在測試,然後重新註釋或刪除生產。 這應該能夠充分解決您的代碼段中顯而易見的所有問題。除此之外,假設的問題...

既然你提到你正在使用以前的查詢來申報$ graduateID,我會假設你已經通過SELECT查詢獲得了該值。請務必檢查您是否已使用

mysqli_free_result($graduateResult); // I assumed this variable name 

以避免與後續查詢發生衝突。這有時被忽視。

當您處理依賴於先決條件查詢的查詢時,最好使用mysqli_multi_query()。看來你的$ schoolQuery依賴於我稱之爲「$ graduateQuery」的成功。如果你願意,你可以使用mysqli_multi_query()來運行$ graduateQuery然後$ schoolQuery。爲了幫助你實現這個實現,我需要看到更多你的代碼。如果你希望走這條道路,這可能是最好的消息,我直接或啓動一個新的職位這裏是你的工作完成了一半(你在它自己進行了嘗試後):Strict Standards: mysqli_next_result() error with mysqli_multi_query

相關問題