Выберите несколько не помещает какие-либо значения в базу данных или вставляет только последний выбранный - PullRequest
0 голосов
/ 30 апреля 2018

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

Я пытался использовать такие выражения, как $_GET, foreach, if else, implode и т. Д., Но я не должен понимать синтаксис правильно, потому что кажется, что ничего не работает. Я также пытался извлечь скобки [ ] из строк: name='genretype[] и $genretype = mysqli_real_escape_string($dbc, $_POST['genretype[]']);, но при этом я получаю эту ошибку:

mysqli_real_escape_string () ожидает, что параметр 2 будет строкой, а массив задан

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

Верхняя часть кода php:

// Check for a genre.
    if (empty($_POST['genretype'])) {
        $errors[] = 'You forgot to enter a genre.';
    } else {
        $genretype = mysqli_real_escape_string($dbc, $_POST['genretype[]']);
    }

    if (empty($errors)) { // If everything's OK.
        // Add the movie to the database.
        // Check for existing record.
        $query = "SELECT id FROM dvd WHERE title='$title'";
        $result = mysqli_query($dbc, $query);
        if (mysqli_num_rows($result) == 0) { // if there is no such movie title
        $query = "INSERT INTO dvd (title, numavail, categoryname, genretype)
            VALUES ('$title', '$numavail', '$categoryname', '$genretype')";
            // Make the query.
            $result = mysqli_query($dbc, $query);
            if ($result) { // If it ran OK.
                echo "<p><b>Success! The new movie has been added.</b></p>";
                echo ('<p><div style="margin-top:30px;">');
                echo ('<span style="float:left;">');
                echo ('<FORM METHOD="LINK" ACTION="../dvd/index.php"><INPUT TYPE="submit" VALUE="Back to DVDs" STYLE="margin:0px 15px 0px 0px;"></form></span></div></p>');
                echo ('<br style="clear:both;"></br>');

                exit();
            } else { // If it did not run OK.
                $errors[] = 'The movie could not be added due to a system error. We apologize for any inconvenience.'; // Public message.
                $errors[] = mysqli_error($dbc); // MySQL error message.
            }

Форма части кода:

<?php
            $ddlquery2 = "SELECT genretype FROM genre ORDER BY genretype ASC";
            $ddlresult2 = mysqli_query($dbc, $ddlquery2) or die("Bad SQL: $ddlquery");

            echo 'Genre (select all that apply): <select type="text" class="dropdown" name="genretype[]" multiple="multiple" size="5">';
            while($ddlrow2=mysqli_fetch_array($ddlresult2, MYSQLI_ASSOC)){
            echo "<option value='".$ddlrow2['genretype']."'>" . $ddlrow2['genretype'] . "</option>";
        }
            echo "</select>";
        ?>

1 Ответ

0 голосов
/ 06 мая 2018

Я не получил никаких ответов на свой вопрос, но я смог сам разобраться в нем методом проб и ошибок, поэтому я решил поделиться тем, что исправило.

Мне просто нужно было изменить код на следующий.

Верхняя часть кода php (я изменил строку после $genretype = и снял скобки после 'genretype' в конце этой строки).

НОВЫЙ «РАБОЧИЙ» КОД:

// Check for a genre.
if (empty($_POST['genretype'])) {
    $errors[] = 'You forgot to enter a genre.';
} else {
    $genretype = implode(', ', (array)$_POST['genretype']);
}

Сформировать часть кода (я изменил большинство строк после строки соединения и запроса):

<?php
    $ddlquery2 = "SELECT genretype FROM genre ORDER BY genretype ASC";
    $ddlresult2 = mysqli_query($dbc, $ddlquery2) or die("Bad SQL: $ddlquery2");
    $match = "SELECT genretype FROM dvd WHERE id=$id";

    $numOpts = count($match);
    if ($numOpts>1){
    $matches=implode('","',$match);
    }elseif ($numOpts==1){
    $matches=$match;
    }else{
    $matches="";
    }

    echo 'Genre (select all that apply): <select name="genretype[]" multiple="multiple" size="5" class="multilist"';
    while($ddlrow2=mysqli_fetch_array($ddlresult2, MYSQLI_ASSOC)){
    echo "<option value='".$ddlrow2['genretype']."'>" . $ddlrow2['genretype'] . "</option>";
    }   
    echo "</select>";
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...