【问题标题】:Store multiple dropdown selected values in mysql db在mysql db中存储多个下拉选择的值
【发布时间】:2013-11-12 05:27:07
【问题描述】:

我有多个下拉框,我试图将选定的值存储在 mysql 数据库中,并且一键单击。下拉框的数量由用户决定。我有一个 jquery 函数,可以生成要显示的所需数量的下拉列表。如前所述,我正在尝试存储每个下拉列表的选定值。每个都有自己的行和唯一的 ID。我的查询根本没有存储任何东西。 SITE

jquery 生成下拉列表的数量

<script>
    $(document).ready(function () {

    $('select').change(function() {
    var option = $(this).val();
    showFields(option);
    return false;
        });


        function showFields(option){ 

            var content = '';
            for (var i = 1; i <= option; i++){
                content += '<div id="course_'+i+'"><label>Course # '+i+'</label><br /><label>Course Name:</label> <select id="coursename_'+i+'" name="coursename_'+i+'"><option value="">--- Select ---</option>"'
                        <?php


                           $mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
                           if (mysqli_connect_errno()) {
                                printf("Connect failed: %s\n", mysqli_connect_error());
                                exit();
                            } 
                            $course_query = "SELECT course_id, course_name FROM courses ";
                                    if($result = mysqli_query($mysqli, $course_query)) {
                                        while ($idresult = mysqli_fetch_row($result))
                                        {
                                            //dropdown values pulled from database
                                            $course_id = $idresult[0];
                                            $course_name = $idresult[1];
                                            echo 'content += \'<option value="' . $course_id . '">' . $course_name . '</option>\';';
                                        }
                                    }
                        ?>
                '"';                   

                content += '</select><br /><div><br />';

            }
            $('#course_catalog').html(content);

        }
    });
</script>

PHP 插入

<?php
if(isset($_POST['submit'])){

        $coursename = $_POST["coursename"];
        $courseid = $_POST["courseid"];

        $db_con = new mysqli(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
        $db_insert4 = "INSERT INTO courses_bridge (course_name, course_id) VALUES ('$coursename', '$courseid')";
        mysqli_query($db_con, $db_insert4);

}

?>

HTML

<form action="index.php" method="post">
    Courses being offered?
        <select>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
        </select>

    <div id="course_catalog"></div>

    </br>
    <input value="SAVE" type="submit">
</form>

【问题讨论】:

  • 在插入语句中,您是否尝试过在变量周围使用"'. 而不是'
  • 首先,您的表单永远不会提交,因为您使用的是if(isset($_POST['submit'])),它会寻找named 提交按钮,而您的尚未命名。
  • @Fred-ii 哇,我犯了一个非常愚蠢的错误,我浪费了好几个小时来弄清楚这一点

标签: php


【解决方案1】:

这应该可行。

HTML:

    <form action="" method="post">
    Courses being offered?
     <select name="coursesOffered">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
       </select>

  <div id="course_catalog"></div>

  </br>
  <input value="SAVE" type="submit" name="submit">
</form>

JS:

   <script>
   $(document).ready(function () {

   $('select').change(function() {
var option = $(this).val();
showFields(option);
return false;
    });


    function showFields(option){ 

        var content = '';
        for (var i = 1; i <= option; i++){
            content += '<div id="course_'+i+'"><label>Course # '+i+'</label><br /><label>Course Name:</label> <select id="coursename_'+i+'" name="coursename_'+i+'"><option value="">--- Select ---</option>"'
                    <?php


                       $mysqli = new mysqli('localhost', 'root', '123456', 'test');
                       if (mysqli_connect_errno()) {
                            printf("Connect failed: %s\n", mysqli_connect_error());
                            exit();
                        } 
                        $course_query = "SELECT id, tags FROM tags ";
                                if($result = mysqli_query($mysqli, $course_query)) {
                                    while ($idresult = mysqli_fetch_row($result))
                                    {
                                        //dropdown values pulled from database
                                        $course_id = $idresult[0];
                                        $course_name = $idresult[1];
                                        echo 'content += \'<option value="' . $course_id . ':'.$course_name.'">' . $course_name . '</option>\';';
                                    }
                                }
                    ?>
            '"';                   

            content += '</select><br /><div><br />';

        }
        $('#course_catalog').html(content);

    }
});
 </script>

PHP:

   <?php
if(isset($_POST['submit'])){
$coursesOffered=$_POST['coursesOffered'];
$db_con = new mysqli(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
    for($i=1;$i<=$coursesOffered;$i++)
    {
    $courseVals=explode(':',$_POST["coursename_".$i]);

    $db_insert4 = "INSERT INTO courses_bridge (course_name, course_id) VALUES ('".$courseVals[1]."', '".$courseVals[0]."')";
    mysqli_query($db_con, $db_insert4);
    }     
}

 ?>

【讨论】:

  • 抱歉,我目前正在检查您的答案
  • 没关系。请更换数据库连接并检查一下。
  • 差不多了,谢谢。我放置了print_r($_POST);,并且发布了正确的值,但数据库中没有显示任何内容。值的顺序重要吗?我在我的数据库中有course_idcourse_name
  • academy_id 是自动增量字段吗?尝试显示查询的错误消息..因为似乎只查询错误..
【解决方案2】:

首先,每个选择都必须是一个数组的一部分

'<select name="coursename['+i+']">...</select>'//no need for an underscore

然后在你的 php 中使用 foreach 循环,因为 $_POST['coursename'] 现在是一个数组

[coursename] => array(
[0] => 3
[1] => 2
)

您可以轻松浏览此数组并从您的选择中插入两个值

$db_con = new mysqli(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);

foreach($_POST['coursename'] as $key=>$val){
    $db_insert4 = "INSERT INTO courses_bridge (course_name, course_id) VALUES ('$key', '$val')";
    mysqli_query($db_con, $db_insert4);
}

【讨论】:

  • 好吧,现在说得通了。但仍然没有插入值。我检查了连接和其他一切,但没有结果。
  • 我没有回答你的 $db_con 。这应该在循环之外。只需仔细检查以确保您拥有它。
  • 在 method="POST" 中大写 POST。此外,您可以执行 print_r($_POST) 以确保您的数组在 php 脚本中不为空。
  • 是的,我添加了 $db_con 并且我也进行了其他更改。有趣的是,这个print_r($_POST) 只显示课程id,但课程名称不见了。
  • 嘿,看看下面的答案
【解决方案3】:

使用 php 中的序列化和反序列化将下拉列表中的多个值存储到数据库中

HTML 代码:

                    <option value="" selected>Any</option>
                    <option value="Hindu">Hindu</option>
                    <option value="Muslim-Shia">Muslim - Shia</option>
                    <option value="Muslim-Sunni">Muslim - Sunni</option>
                    <option value="Muslim-Others">Muslim - Others</option>
                    <option value="Christian-Catholic">Christian - Catholic</option>
                    <option value="Christian-Orthodox">Christian - Orthodox</option>
                    <option value="Christian-Protestant">Christian - Protestant</option>
                    <option value="Christian-Others">Christian - Others</option>
                    <option value="Sikh">Sikh</option>
                    </select>

PHP 代码:

$religion=$_POST['religion'];

if(isset($religion)){

//$rel=explode(':',$_POST["religion_".$i]);
//$rel=implode(',',$religion);
$serializedoptions1 = serialize($religion);
$serializedoptions123 = unserialize($serializedoptions1);
//print_r($serializedoptions123); 
foreach($religion as $key=>$val){
echo $val;
}

}

$qry1="insert into preference(id,email,toage,fromage,maritalstatus,toheight,fromheight,phc,religion,star,caste, mangalik,mothertongue,qualification,occupation,income,country,state,city,citizenship,food, smoking,drinking,partner_desc)
VALUES('','" . $_SESSION['user'] . "','$toage','$fromage','$maritalstatus','$toheight',     '$fromheight','$phc','".implode(',',$serializedoptions123)."','$serializedoptions2','$serializedoptions','$mangalik','$serializedoptions3',          '$serializedoptions8','$serializedoptions9','$income','$serializedoptions4','$serializedoptions5','$serializedoptions6','$serializedoptions7','$food','$smoking','$drinking','$description')";

mysql_query($qry1) or die(mysql_error());

【讨论】:

    【解决方案4】:
    <?php                                       
    $pid=$row['pid'];
    //echo $pid;die;
    {
    ?>                        
        <form name="my_form" id="my_form" method="POST">                                            
        <label>Pid</label>
        <select  id="pid" name="Pid">
        <option value="1" <?php if($pid==1) { ?> selected="selected" <?php } ?>> Factory</option>
        <option value="2" <?php if($pid==2) { ?> selected="selected" <?php } ?> >Plant</option>
        <option value="3" <?php if($pid==3) { ?> selected="selected" <?php } ?> >Sugar Firm</option>
        <option value="4" <?php if($pid==4) { ?> selected="selected" <?php } ?> >Warehouse</option>
        <option value="5" <?php if($pid==5) { ?> selected="selected" <?php } ?> >Machinery</option>
        </select>
    

    【讨论】:

    • 考虑添加一些词来描述这段代码的作用以及它回答问题的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多