Получение нескольких строк из формы, созданной циклом ... Застрял - PullRequest
1 голос
/ 14 мая 2010

Позвольте мне начать с того, что я новичок в 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
}

Я пытался, для каждого, для массивов (что похоже на все, что я знаю) размещать каждую строку (строка за строкой) в базе данных. Я либо получаю только последний ряд данных, либо вообще никаких данных. Я также беспокоюсь, что метод [$ row] добавляет символы в мои данные.

Каков наилучший способ получить каждую строку ввода пользователя, а затем загрузить эти данные (строка за строкой) в базу данных? Кроме того, я буду очень признателен за ваши предложения по улучшению моей техники кодирования и подхода, который я использую.

1 Ответ

1 голос
/ 14 мая 2010

пробовал это?

<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 />";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...