2013-12-13 28 views
0

我有具有以下結構的一種形式:MSSQL:多個插入用PHP陣列和回顯數據

<input type="text" name="projNo[1]" id="projNo[1]" value="<?php echo $row['ProjNo' 
[1];>" 
/> 
<input type="text" name="projBudget[1]" id="projBudget[1]" value="<?php echo 
$row['ProjBudget'][1]; ?>" /> 
<input type="text" name="projDateFrom[1]" id="projDateFrom[1]" value="<?php echo 
$row['ProjDateFrom'][1]; ?>" /> 
<input type="text" name="projDateTo[1]" id="projDateTo[1]" value="<?php echo 
$row['ProjDateTo'][1]; ?>" /> 

<input type="text" name="projNo[2]" id="projNo[2]" value="<?php echo $row['ProjNo' 
[2];>" 
/> 
<input type="text" name="projBudget[2]" id="projBudget[2]" value="<?php echo 
$row['ProjBudget'][2]; ?>" /> 
<input type="text" name="projDateFrom[2]" id="projDateFrom[2]" value="<?php echo 
$row['ProjDateFrom'][2]; ?>" /> 
<input type="text" name="projDateTo[2]" id="projDateTo[2]" value="<?php echo 
$row['ProjDateTo'][2]; ?>" /> 

有兩個以上羣組這樣具有索引3和4一旦提交,四個單獨的記錄必須在數據庫中創建,如果用戶填寫了全部四行。我的問題是雙重的:我如何構建我的查詢來完成此任務?並且:我是否正確設置了我的代碼?當表單被加載時,我想要顯示正確的輸出。我從來沒有遇到這樣的要求,所以我有點盲目。

回答

1

使用PDO和準備好的語句。準備語句是這樣的:

$s = $db->prepare('INSERT INTO PROJECT (no, budget, from, to) VALUES (?,?,?,?)') 

執行該語句爲每個這樣設置:

for ($i = 1; $i<=4; $i++) { 
    $s->execute(array($projNo[$i], $projBudget[$i], $projDateFrom[$i], $projDateTo[$i])); 
} 

(您需要添加錯誤檢查和驗證這包括一些加載的東西從$ _ POST到我在上面的例子中使用了陣列。)

當前,您的代碼中存在XSS安全問題。你不能只是echo來自用戶的東西 - 你需要逃避它。如果您將它放入HTML中,包括雙引號屬性值(如您的情況),請使用echo htmlspecialchars($_GET[...]);

您可能希望創建一個「htmlout」函數,該函數除echo htmlspecialchars之外別無其他,只是爲了獲得更好,更易於使用的名稱,並在任何地方使用它。這樣,您可以搜索代碼中的「echo」實例,除非您保護它們,否則這表示您可能需要添加一些轉義。

+0

謝謝。我一回到辦公室就會嘗試。我已經使用PDO和參數化語句,所以這對我來說都是有意義的。如果它有效,我會標記它是正確的。 – Chris