PHP Как добавить несколько записей в базу данных с помощью флажка формы? Форма входит только в последнюю запись? - PullRequest
0 голосов
/ 03 января 2011

Вот мой код, не уверен, что я делаю не так здесь ... Сначала я проверяю переданную переменную и добавляю немного о том, как обрабатывать форму ...

// Check for a user id:
if (empty($_POST['user_id'])) {
    $errors[] = 'Oops! You forgot to enter your users.';
} else {
    $user_id = mysqli_real_escape_string($dbc, trim($_POST['user_id']));
}

if (empty($errors)) { // If everything's good.

        // Add the user to the database:
        $q = "INSERT INTO users (user_id, page_id, account_id ) VALUES ('$user_id', '$page_id', '$id' )";
        $r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));

        //CLOSE UP THE SUBMIT CONDITIONAL

Затем я выбираю пользователей и отображаю форму

echo '<form action="addusers.php" method="post">';
        while ($row = mysqli_fetch_array($show, MYSQLI_ASSOC)) {
            echo '<p><label for="learner">Add</label>
                <input type="checkbox" id="user_id" value="' . $row['user_id'] . '" name="user_id" /></p>';
    }

echo '<p><input type="submit" name="submit" value="Submit" /></p>
    <input type="hidden" name="submitted" value="TRUE" />
<input type="hidden" name="account_id" value="$id" />
<input type="hidden" name="course_id" value="$course_id" />
</form>';

Это создает список моих пользователей и позволяет мне выбирать столько, сколько я хочу, но когда я нажимаю кнопку «Отправить», в базу данных попадает только последний пользователь, а не все?

// ОБНОВЛЕНИЕ Хорошо, я отредактировал код так, чтобы значение флажка представляло собой массив, и знаю, что мне нужно использовать цикл foreach для передачи переменных в базу данных, но кто-то может проверить этот код для этой вставки?

    // Add the user to the database:
$q = "INSERT INTO users (user_id) VALUES ('$user_id')";
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));
foreach($_POST as $key => $value){
    if ($r->execute(Array($key, $value))){
        echo "user added <br />";
    }
} // end for each loop

Ответы [ 2 ]

2 голосов
/ 03 января 2011

Использование:

<input type="checkbox" id="user_id" value="' . $row['user_id'] . '" name="user_id[]" />

(обратите внимание на [] после user_id в атрибуте "name").

Это приведет к тому, что $ _POST ['user_id'] будет массивом значений, по одному для каждого флажка.

0 голосов
/ 03 января 2011

попробуйте это заменить

<input type="checkbox" id="user_id" value="' . $row['user_id'] . '" name="user_id" /></p>';

от

<input type="checkbox" id="user_id" value="' . $row['user_id'] . '" name="user_id[]" /></p>';

// попробуйте установить флажок user_id в виде массива, например user_id[]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...