2014-02-12 100 views
0

這是我第一個'從頭開始構建'的PHP/MySQL項目。我已經建立了與同一行一個非常簡單的HTML表單重複多次:將多個var值插入到相同的mysql表中

<h2 style="margin-top:0">Current Projects</h2>  
    Project: <input name="project1" type="text" size="40" value="1" /> 
    Status: <input name="status1" type="text" size="40" value="1" /> 
    Estimated Completion: <input name="estCompletion1" type="text" size="12" value="1" /><br /> 

    Project: <input name="project2" type="text" size="40" value="2" /> 
    Status: <input name="status2" type="text" size="40" value="2" /> 
    Estimated Completion: <input name="estCompletion2" type="text" size="12" value="2" /><br /> 

    Project: <input name="project3" type="text" size="40" value="3" /> 
    Status: <input name="status3" type="text" size="40" value="3" /> 
    Estimated Completion: <input name="estCompletion3" type="text" size="12" value="3" /><br /> 

我試圖在同一時間所有的這些寫入同一個數據庫表,但在不同的行。

$sql = "INSERT INTO current_project (date, est_completion, project_name, status) 
VALUES (NOW(), '$estCompletion1', '$project1', '$status1'), 
     (NOW(), '$estCompletion2', '$project2', '$status2'), 
     (NOW(), '$estCompletion3', '$project3', '$status3')"; 

這樣做的問題是它插入變量的數據,即使它是空的。因此,如果用戶只在第一行字段(project1,status1等)中輸入數據,另一個2將插入一個空行。

有沒有辦法,也許使用'if isset()',以便我的數據庫中沒有任何空白字段?

+0

你試圖構建動態SQL查詢 - 字符串串聯到休息之前檢查值?編輯說 - 是的,如果isset()我會檢查每個條目,然後再將一行添加到sql查詢 – wribit

+0

似乎更容易一次插入一行,所以你不必擔心自己與其他行,如果他們沒有填寫。 有人可以填寫第1行和第3行,並將第2行留空也會導致問題。 –

+0

r我 - 我試着單獨做每一個,但它只寫最後一個到數據庫,忽略了以前的。 – danzo

回答

0

動態構建SQL。

事情是這樣的:

$inserts = Array(); 
for($i=1; $i<=3; $i++) { 
    if (!$_POST["project".$i] && !$_POST["status".$i] && !$_POST["estCompletion".$i]) continue; 
    $inserts[] = "(NOW(), '".$_POST["estCompletion".$i]."', '".$_POST["project".$i]."', '".$_POST["status".$i]."')"; 
} 
if (Count($inserts)>0) { 
    $sql = "INSERT INTO current_project (date, est_completion, project_name, status) 
    VALUES (" . implode("), (", $inserts) . ")"; 
} 

此時$ sql中應該有完整的SQL查詢只與所有三個領域提交的行。

+0

不幸的是,這對我不起作用。我沒有得到一個PHP錯誤,但沒有發佈到數據庫,它不會去thankyou.php。 – danzo

+0

輸出'$ sql'並檢查您試圖插入多少個值。值是什麼。可能是你需要'addslashes()' – cyadvert

0

如果要檢查發佈變量的值爲null,則始終使用爲空()方法。

欲瞭解更多信息,請訪問php.net

for($i=1; $i<=3; $i++) { 
     $estCompletion= $_POST["estCompletion".$i]; 
     $project= $_POST["project".$i]; 
     $status= $_POST["status".$i]; 

     if (!empty($estCompletion) && !empty($project) && !empty($status)) 
     {  
      $sql = "INSERT INTO current_project (date, est_completion, project_name, status) VALUES (NOW(), '".$estCompletion."', '".$project."', '".$status."')"; 
     } 

    unset($estCompletion, $project, $status); 
    } 
+0

謝謝Pankaj!我明白你在做什麼,我喜歡它!唯一的問題是,它仍然只是將最後一行插入到數據庫中,而不是全部3行(如果它們不是空的,或者當然)。此外,我得到一個錯誤,因爲代碼缺少一個結束大括號。 – danzo

+0

@danzo根據你的建議,我編寫了腳本。 – Pank

+0

感謝您的編輯。現在的問題是腳本只能插入最後一行。它應該寫3行(如果所有三行都不是空的)如果所有三行都被填入,它只會插入最後一行。我們如何通過腳本來循環插入每一行? – danzo