selectmultiple不会在数据库中放入任何值,或者只插入最后选择的值

fzwojiic  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(263)

我试图让selectmultiple(下拉列表)接受多个值并将它们插入mysql数据库表中的一个字段中,但是由于某些原因,这些值没有被放入该字段中。我已经研究了几个小时了,但是没有一个问题和我的情况完全相关,因为我在mysql数据库的另一个表中动态地提取值。现在的代码是这样的,我没有收到任何错误,但是没有任何东西被放入数据库。
我试过使用这样的语句 $_GET , foreach , if else , implode ,等等,但我一定是语法不对,因为似乎什么都不管用。我也试过 [ ] 括号外: name='genretype[] 以及 $genretype = mysqli_real_escape_string($dbc, $_POST['genretype[]']); 行,但当我这样做时,我会收到以下错误:
mysqli\u real\u escape\u 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>";
        ?>
5m1hhzi4

5m1hhzi41#

我的问题没有得到任何回答,但我能够通过反复试验自己找出答案,所以我想我应该和大家分享解决问题的方法。
我只需要将代码更改为以下内容。
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>";
?>

相关问题