2010-05-14 68 views
1

讓我開始說我是PHP的新手,但我在這裏學習並非常感謝您的幫助。從循環創建的表格中檢索多個行...卡住

我使用下面的代碼來拉入數據並創建一個表單。這將創建最多40行用戶填寫。每行包含相同的信息:描述,金額和頻率。所需信息的其餘部分由數據庫生成。 (查看隱藏字段)

<?php 
$row = 0; 
do { 
$optid = $row_options['option_id']; 
echo "<tr>\n\t<td>" . htmlentities($row_options['option']) . "</td>\n"; 
echo "\t<td>" . "<input name='description' type='text' size='40' maxlength='120'/>" . "</td>\n"; 
echo "\t<td>" . "<input name='option_id' type='hidden' value='$optid' />$<input name='amount' type='text' size='10' maxlength='7'/>" . "</td>\n"; 
echo "\t<td>" . "<select name='assisted_frequency'> 
      <option value='Monthly'>Monthly</option> 
    <option value='Weekly'>Weekly</option> 
    <option value='Daily'>Daily</option> 
    <option value='Hourly'>Hourly</option> 
    <option value='One-Time'>One-Time</option> 
      </select>" . "</td>\n</tr>\n"; 

$array[$row] = array(
$arraydesc[$row] = $_POST['description'], 
$arrayamto[$row] = $_POST['amount'], 
$arrayoptid[$row] = $optid, 
$arrayfreq[$row] = $_POST['frequency'], 
); 
$row ++; 
} while ($row_options = mysql_fetch_assoc($options)); 
$counter = $row - 1; 
?> 

我有麻煩檢索用戶輸入的信息。我的意圖是在用戶輸入信息後遍歷每一行,然後將我的數據庫信息和用戶信息混合到另一個數據庫中。例如,用戶將看到,儘管更漂亮:

form1 

Option 1: description [input box]  amount [input box]  frequency [option box] 
Option 2: description [input box]  amount [input box]  frequency [option box] 
Option 3: description [input box]  amount [input box]  frequency [option box] 
Option 4: description [input box]  amount [input box]  frequency [option box] 

submit 

在提交上面的形式中,我使用類似於以下輸入數據到數據庫中的查詢:

for($row=0; $row<=$counter; $row++){ 
$insertSQL2 = sprintf("INSERT INTO table (option_id, amount, description, frequency) VALUES (%s, %s, %s, %s)", 
GetSQLValueString($arrayoptid[$row], "int"), 
GetSQLValueString($arrayamto[$row], "int"), 
GetSQLValueString($arraydesc[$row], "text"), 
GetSQLValueString($arrayfreq[$row], "text")); 

// code to submit query 
} 

我已經嘗試過,foreach,數組(感覺就像我所知道的每件事)將每行(逐行)發佈到數據庫中。我要麼只是得到最後一行數據,要麼根本就沒有數據。我還擔心[$ row]技術正在爲我的數據添加字符。

什麼是檢索用戶輸入的每一行的最佳方法,然後將這些數據(逐行)上傳到數據庫中?此外,我會非常感謝您提出改進我的編碼技術和我正在採取的方法的建議。

回答

1

試過嗎?

<input name="description[]" type="text" ... /> 
<input name="option_id[]" type="text" ... /> 
<select name="assisted_frequency[]">...</select> 

然後

$expectNumRows = ...; 
function is_good_subm_data($name, $num) { 
    return (array_key_exists($name, $_POST) && 
     is_array($_POST[$name]) && count($_POST[$name]) == $num); 
} 
if (!is_good_subm_data('description', $expectNumRows) || 
    !is_good_subm_data('option_id', $expectNumRows) || 
    !is_good_subm_data('assisted_frequency', $expectNumRows)) { 
    //error handling 
} 

for ($i = 0; $i < $expectNumRows; $i++) { 
    //read $_POST['description'][$i] etc. 
} 

非常基本的(無確認)PHP文件:

<?php 
if ($_SERVER['REQUEST_METHOD'] == "GET") { 
?> 
<form method="post"> 
Description 1: <input name="description[]" type="text" /><br /> 
Option Id 1: <input name="option_id[]" type="text" /><br /> 
<br /> 
Description 2: <input name="description[]" type="text" /><br /> 
Option Id 2: <input name="option_id[]" type="text" /><br /> 
<input type="submit" /> 
</form> 
<?php } else { 
    $expectNumRows = 2; 
    for ($i = 0; $i < $expectNumRows; $i++) { 
     echo "description $i:" . 
      htmlentities($_POST["description"][$i]) . "<br />"; 
     echo "option id $i:" . 
      htmlentities($_POST["option_id"][$i]) . "<br />"; 
     echo "<br />"; 
    } 
} 
+0

嗨Artefacto。感謝您的建議。但是,我似乎無法得到這個工作。你能解釋一下這個功能發生了什麼嗎?這將幫助我更清楚地瞭解代碼的功能。另外,由於這是將新行插入到數據庫中,是否還有其他步驟需要編碼? (數據庫存在,當我有它運行1行,它是成功的)。問題是讓代碼將表單中的所有行更新到數據庫中。 謝謝 Hangston – hangston 2010-05-15 02:41:07

+0

該函數僅用於驗證。它檢查提交的值的正確數量。我已經使用可以使用的示例PHP文件更新POST。 – Artefacto 2010-05-15 03:43:01

+0

謝謝你幫我解決了.. – 2013-02-22 07:03:18