带复选框的日历:如何从复选框将信息插入数据库

时间:2011-08-11 13:25:45

标签: php

我正在尝试为每个日期创建一个带有复选框的日历。当用户单击提交按钮时,我希望将那些选定的日期插入到数据库中,如果那些已经存在,那么将从数据库中删除那些未选择的日期。我创建了一个index.php页面,我在其中编写了以下代码来生成日期:

的index.php:

<form name="form1" method="post" action="show.php">
  <?php
    $year="2011";
    $month="8";
    $d=cal_days_in_month(CAL_GREGORIAN,1,2011);

    $i=1;
    while($i<=$d)
    {
  ?>
  <input type="checkbox" name="date[]" value="<? echo  " $year-$month- " . $i . ""."<br>";  ?>"> 
  <? echo  " $year-$month- " . $i . ""."<br>";  ?>
  <?
        $i++;
    }

  ?> 
  <input type="submit" name="Submit" value="Submit">
  </form>

show.php:

<? 
    mysql_connect("localhost", "root", "") or die("Could not connect: " . mysql_error()); 
    mysql_select_db("database"); 
    $media_array = $_POST['date']; 
    foreach ($media_array as $one_media) 
    {
        $source .= $one_media.", "; 
    } 
    $media = substr($source, 0, -2); 
    $query = "INSERT INTO table1 (id,media) VALUES('', '$media')";
    $result = mysql_query($query); } 
?>

然后我创建了另一个名为show.php的页面,我试图编写用于插入信息的代码,但是我失败了。 请你帮我这样做吗?我尽我所能,但我无法做到。提前谢谢。

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用Ajax(使用JQuery库使其更容易)。因此,每次复选框更改值时,会向 updateDatabase.php 触发Ajax请求,并删除或插入记录。

因此,如果您在页面上显示复选框,请执行以下操作:

<script>

$(document).ready(function() {

    //Every time a checkbox changes (gets ticked or unticked) send n Ajax request
    //to updateDatabase.php containing its value and a BOOLEAN checked/unchecked
    $('input[type="checkbox"]').change(function() {
        var checked = $(this).is(':checked'); 
        $.ajax({
             url: "updateDatabase.php",
             type: "POST",
             data: {value : $(this).val(),
                   checked : checked },
             dataType: "html",
             async:false,
             success: function(msg) {
                  //Show the answer from the file in an alertbox.
                  //Use this to debug your code. Leave it out afterwards.
                  alert(msg);
             }
         });
     });

});

</script>

因此,每次选中或取消选中复选框时,它都会将其值和“已检查”布尔值发送到 updateDatabase.php

在此文件中,您可以执行类似以下操作:

<强> updateDatabase.php

<?php
    //Get POST variables
    $value  = mysql_real_escape_string($_POST['value']);
    $checked = $_POST['checked'];

    //If the checkbox was checked, INSERT its value into the database
    //else you remove it.
    if ($checked == true) {
        $query  = "INSERT INTO table (value) VALUES ('" . $value . "')";
    }
    else {
        $query = "DELETE FROM table WHERE value = '" . $value . "'";
    }
    mysql_query($query);
?>

编辑:在单击“提交”

后添加了处理数据的代码

如果您不想在流程上执行此操作 如果您想在用户点击“提交”时更新数据库,只需将表单提交到 show.php

<强> show.php

<?php
    $dates = $_POST["date"];

    echo "Dates chosen: " . count($dates) . "<br /><br />";

    if (count($dates)>0) {
        echo "You picked the following dates:<br />";
    }

    for ($i=0; $i<count($dates); $i++) {
        echo ($i+1) . ") " . $dates[$i] . "<br />";
        mysql_query("INSERT INTO table (value) VALUES ('" . mysql_real_escape_string($dates[$i]) . "')");
    }
?>

希望这能帮到你!

(我没有测试这段代码,所以如果还有一些小错误,我很抱歉。但我相信你会抓住这个漂移!)