【问题标题】:Dropdown box to insert value to MYSQL db OnChange using AJAX and PHP使用 AJAX 和 PHP 向 MYSQL db OnChange 插入值的下拉框
【发布时间】:2016-08-06 13:16:53
【问题描述】:

当下拉框发生更改时,我在通过 AJAX 执行 SQL 时遇到问题,如果可能,我希望得到一些帮助。

背景信息 我的任务是创建一个每日日历,显示在健身房运行的所有课程,最多 5 节课,每小时 6 (30) 人,持续 14 小时。我不是专业人士,我可能已经创建了一个解决这个问题的方式很复杂,如果我有,请告诉我。

我设法创建了由 14 列 30 个下拉框组成的视图(5 x 类,每小时 6 个,持续 14 小时)。每个下拉框都会轮询数据库,如果存在条目,它将使用 bookinguser 的名称填充框。如果没有找到预订,它将创建一个下拉框,轮询成员表并显示健身房的所有成员,当更改时,希望能预订那个人。 - 这就是我当前的问题!

每个下拉框的名称对应于我打算传递给 javascript 函数并最终传递给 SQL 语句的时间、组和人数。每个选项的值都对应于 memberid,该 memberid 也将被传递,提供构造 SQL 所需的所有信息。

目前为止的代码

HTML - 由 php 循环生成的片段

    <div id="results">
<div id="07" class="column">07:00<br/>
<div id="group1">
<select name="07:00-1-0" onchange="getda(this.value,this)">
    <option value="none">---------------</option>
    <option value="2">John Doe</option>
    <option value="1">Joe Bloggs</option>
</select>
<select name="07:00-1-1" onchange="getda(this.value,this)">
    <option value="none">---------------</option>
    <option value="2">John Doe</option>
    <option value="1">Joe Bloggs</option>
</select>

PHP

<?php
$mysqli = new mysqli("localhost", "root", "", "gym");

/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
function hyphenate($str) {
return implode("-", str_split($str, 2));
}
function getmembers($time,$group,$iteration)
{
$date=$_GET["date"];

$date=hyphenate($date);
$date = explode('-', $date);
$new_date = $date[2].'-'.$date[1].'-'.$date[0];

$mysqli = new mysqli("localhost", "root", "", "gym");
if ($iteration == 0){
$result = $mysqli->query("select members.memberid, members.firstname, members.lastname from bookings inner join members on bookings.memberid = members.memberid where bookings.date = '$new_date' and time = '$time' and bookings.groupnumber = '$group' order by bookings.bookingid ASC limit 1");
}
else {$result = $mysqli->query("select members.memberid, members.firstname, members.lastname from bookings inner join members on bookings.memberid = members.memberid where bookings.date = '$new_date' and time = '$time' and bookings.groupnumber = '$group' order by bookings.bookingid ASC limit 1,$iteration");
}
$rowcount=mysqli_num_rows($result);
if ($rowcount==$iteration && $iteration == 0)
{
 $result = $mysqli->query("select firstname, lastname,memberid from members order by firstname ASC");


echo '<select name="'.$time.'-'.$group.'-'.$iteration.'" onchange="getda(this.value,this)"><option value="---------------">---------------</option>';

while ($row = $result->fetch_assoc()) {

              unset($firstname, $lastname);
              $firstname = $row['firstname'];
              $lastname = $row['lastname']; 
              $memberid = $row['memberid'];
              echo '<option value="'.$memberid.'">'.$firstname . ' ' . $lastname .'</option>';

}

echo "</select>";
}
else if ($rowcount>=$iteration){
echo '<select name="'.$time.'-'.$group.'-'.$iteration.'" onchange="getda(this.value,this)">';

while ($row = $result->fetch_assoc()) {

              unset($firstname, $lastname);
              $firstname = $row['firstname'];
              $lastname = $row['lastname']; 
              $memberid = $row['memberid'];
              echo '<option value="'.$memberid.'">'.$firstname . ' ' . $lastname .'</option><option value="cancel">Cancel</option>';
}
echo "</select>";
}
else{
     $result = $mysqli->query("select firstname, lastname, memberid from members order by firstname ASC");


echo '<select name="'.$time.'-'.$group.'-'.$iteration.'" onchange="getda(this.value,this)"><option value="---------------">---------------</option>';

while ($row = $result->fetch_assoc()) {

              unset($firstname, $lastname);
              $firstname = $row['firstname'];
              $lastname = $row['lastname']; 
              $memberid = $row['memberid'];
              echo '<option value="'.$memberid.'">'.$firstname . ' ' . $lastname .'</option>';

}

echo "</select>";

 }
}

 ?> 

JS

function getda(id,booking){
 $.ajax({
 type: 'post',
 url: 'samefile.php',
 data: {
   get_option:id
    },
 success: function (response) {
   document.getElementById("result").innerHTML=response; 
 }
   });
}

samefile.php

<?php 
if(isset($_POST['get_option']))
   {
inlude 'config/config.php';

$name=$_POST["get_option"];
echo "<SCRIPT>
alert('$name');
</SCRIPT>";

$sql = "insert into bookings (memberid,date,time,groupnumber) values (1,'2016-04-14','09:00',3)";
$query = mysqli_query($sql);



$mysqli->close();


  ?>

chrome 中的控制台看起来不错(如下),但没有插入任何记录,也没有显示 php 警报。在我第一次测试查询是否正确执行时,我没有将任何变量传递给 SQL

jquery.min.js:4 XHR 完成加载:POST "http://localhost/gym/samefile.php".send @jquery.min.js:4n.extend.ajax @jquery.min.js:4getda @cal.php?date=140416 :42onchange @ cal.php?date=140416:36ListPicker._handleMouseUp @ about:blank:535

【问题讨论】:

    标签: javascript php mysql ajax


    【解决方案1】:

    可能想查看 jQuery 的 .change()。我认为它适用于您的代码,如下所示。你也可以让它调用你的函数,其中也有 ajax

        $( ".class" ).change(function() { //can use #id here too
             $.ajax({
             type: 'post',
             url: 'samefile.php',
             data: {
                 get_option:this.value
             },
             success: function (response) {
                 document.getElementById("result").innerHTML=response; 
             }
             });
       });
    

    【讨论】:

    • 我已经在所有下拉框中添加了类 .dropdown 并在您提供的代码中更改为类,但我仍然没有运气。我也取消了 on change 参数
    【解决方案2】:

    我在 samefile.php 中看到三个问题 - include 拼写错误、一个额外的分号和一个右括号缺失:

    <?php 
    if(isset($_POST['get_option']))
       {
          include 'config/config.php';
    
          $name = $_POST["get_option"];
    
          //this should be converted to parameterized queries
          $sql = "insert into bookings (memberid,date,time,groupnumber) values (1,'2016-04-14','09:00',3)";
          $query = mysqli_query($sql); 
    
          if(is_object($query)){
              echo 'successfully inserted';
          } else {
             echo 'insert failed';
          }
    
          $mysqli->close();
    
       } else {
           echo 'no data to process!';
       }
    
    ?>
    

    【讨论】:

    • 您好,很遗憾,整改并没有解决问题,有没有办法让我测试一下samefile.php中的代码是否正在运行,我尝试了js警报但没有任何反应跨度>
    • 对,使用 ajax 你不能使用警报,因为这一切都发生在幕后。要返回数据,您只需从 php 文件中回显它。我已经从我的答案中编辑了警报。使用此代码,ajax 可以返回“没有要处理的数据”,这意味着 $_POST['get_option'] 未设置、“插入成功或插入失败”。还要检查你的 html 中是否有一个 id="result" 的元素。我在上面的代码中看到了一个名为 resultS 的元素,但如果 DOM 中没有该元素,则什么也看不到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多