【问题标题】:Submitting multiple database updates via PHP & JQuery通过 PHP 和 JQuery 提交多个数据库更新
【发布时间】:2013-12-19 05:58:21
【问题描述】:

我一直在尝试同时处理多个 mySQL 更新。我有 4 个选择/选项框,它们从数据库表中提取条目。我希望能够使用 JQuery 更新数据库 onChange。我已经设法使用一个选择模块来解决这个问题,但只要我添加更多,它就会旋转出来。我知道主要的错误代码在 db_submit.php 中,但真的不知道该怎么写。我知道必须有一种更清洁的方法来做到这一点。

FORM PAGE-INPUT.PHP

<html>
<head>
<script src="../assets/scripts/jquery-2.0.3.min.js"></script>
<script> 
    function updateDb() {
     $.post("db_submit.php", $("#console").serialize());
    }
</script>
<?php
include 'db_connect.php';
?>
</head>

<body>
<form id="console">
    <select id="frame1" name="frame1" onChange="updateDb()">
        <option value="">Select Channel</option>
            <?php
            $result = mysqli_query($con,"SELECT * FROM feedContent");
            while ($row = mysqli_fetch_array($result)) {
                echo "<option value='" . $row['url'] . "'>" . $row['name'] . "</option>";
            }
            ?>
    </select>
    <select id="frame2" name="frame2" onChange="updateDb()">
        <option value="">Select Channel</option>
            <?php
            $result = mysqli_query($con,"SELECT * FROM feedContent");
            while ($row = mysqli_fetch_array($result)) {
                echo "<option value='" . $row['url'] . "'>" . $row['name'] . "</option>";
            }
            ?>
    </select>
    <select id="frame3" name="frame3" onChange="updateDb()">
        <option value="">Select Channel</option>
            <?php
            $result = mysqli_query($con,"SELECT * FROM feedContent");
            while ($row = mysqli_fetch_array($result)) {
                echo "<option value='" . $row['url'] . "'>" . $row['name'] . "</option>";
            }
            ?>
    </select>
    <select id="frame4" name="frame4" onChange="updateDb()">
        <option value="">Select Channel</option>
            <?php
            $result = mysqli_query($con,"SELECT * FROM feedContent");
            while ($row = mysqli_fetch_array($result)) {
                echo "<option value='" . $row['url'] . "'>" . $row['name'] . "</option>";
            }
            ?>
    </select>
</form>
</body>
<?php
mysqli_close($con);
?>
</html>

处理页面-DB_SUBMIT.PHP

<?php
include 'db_connect.php';   
$frame1= mysqli_escape_String($con,$_POST['frame1']);
$frame2= mysqli_escape_String($con,$_POST['frame2']);
$frame3= mysqli_escape_String($con,$_POST['frame3']);
$frame4= mysqli_escape_String($con,$_POST['frame4']);

$query = "UPDATE frameContent SET url='".$frame1."' WHERE name='frame1'";
$query = "UPDATE frameContent SET url='".$frame2."' WHERE name='frame2'";
$query = "UPDATE frameContent SET url='".$frame3."' WHERE name='frame3'";
$query = "UPDATE frameContent SET url='".$frame4."' WHERE name='frame4'";
mysqli_query($con,$query);

mysqli_close($con);
?>

我知道不断设置 $query 变量会导致问题,但我不确定我还能如何在一页中做到这一点。任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: javascript php jquery mysql forms


    【解决方案1】:

    首先确保$queries 已连接,然后用分号终止每个查询。在这些之后,您可以使用mysqli_multi_query 从 php 一次调用中执行所有四个更新。

    $query = "UPDATE frameContent SET url='".$frame1."' WHERE name='frame1';";
    $query .= "UPDATE frameContent SET url='".$frame2."' WHERE name='frame2';";
    $query .= "UPDATE frameContent SET url='".$frame3."' WHERE name='frame3';";
    $query .= "UPDATE frameContent SET url='".$frame4."' WHERE name='frame4';";
    mysqli_multi_query($con,$query);
    

    【讨论】:

    • 谢谢@vinodadhikary - 效果很好! ?非常感谢!
    • 这在 Chrome 中有效,但 Safari 似乎崩溃了。在 Safari 中提交时,它会清除数据库中的所有行。有什么想法吗?
    • 请忽略我最后的评论。我发现了问题。我的代码中有错字。再次感谢! :)
    【解决方案2】:

    我认为这可能会有所帮助 :) 但您的代码中只有一些变化:

    <html>
    <head>
    <script src = "js/jquery-1.10.1.js"></script>
    <script> 
    function updateDb() 
    {
     // this var id will store all your 4 combobox values in an array
      var id = [{val1: $("#frame1").val()},
               {val1: $("#frame2").val()},
               {val1: $("#frame3").val()},
               {val1: $("#frame4").val()}];
    
     //this .post will submit all data to db_submit.php
       $.post("db_submit.php",{id:id}, function(data)
      {
               alert(data);
      });
    </script>
    <?php
      include 'db_connect.php';
    ?>
    </head>
    <body>
    <select id="frame1" name="frame1">
        <option value="">Select Channel</option>
            <?php
            $result = mysqli_query($con,"SELECT * FROM feedContent");
            while ($row = mysqli_fetch_array($result)) {
                echo "<option value='" . $row['url'] . "'>" . $row['name'] . "</option>";
            }
            ?>
    </select>
    <select id="frame2" name="frame2">
        <option value="">Select Channel</option>
            <?php
            $result = mysqli_query($con,"SELECT * FROM feedContent");
            while ($row = mysqli_fetch_array($result)) {
                echo "<option value='" . $row['url'] . "'>" . $row['name'] . "</option>";
            }
            ?>
    </select>
    <select id="frame3" name="frame3">
        <option value="">Select Channel</option>
            <?php
            $result = mysqli_query($con,"SELECT * FROM feedContent");
            while ($row = mysqli_fetch_array($result)) {
                echo "<option value='" . $row['url'] . "'>" . $row['name'] . "</option>";
            }
            ?>
    </select>
    <select id="frame4" name="frame4">
        <option value="">Select Channel</option>
            <?php
            $result = mysqli_query($con,"SELECT * FROM feedContent");
            while ($row = mysqli_fetch_array($result)) {
                echo "<option value='" . $row['url'] . "'>" . $row['name'] . "</option>";
            }
            ?>
    </select>
    
    <input type="button" value="Submit" onClick="updateDb()"/>
    </body>
    <?php
       mysqli_close($con);
    ?>
    </html>
    

    在你的 DB_SUBMIT.PHP 中

     <?php
     include 'db_connect.php';   
     $frame1= mysqli_escape_String($_POST['id'][0]['val1']);
     $frame2= mysqli_escape_String($_POST['id'][1]['val1']);
     $frame3= mysqli_escape_String($_POST['id'][2]['val1']);
     $frame4= mysqli_escape_String($_POST['id'][3]['val1']);
    
     $query = mysqli_query("UPDATE frameContent SET url='$frame1' WHERE name='frame1'");
     $query = mysqli_query("UPDATE frameContent SET url='$frame2' WHERE name='frame2'");
     $query = mysqli_query("UPDATE frameContent SET url='$frame3' WHERE name='frame3'");
     $query = mysqli_query("UPDATE frameContent SET url='$frame4' WHERE name='frame4'");
    
     echo "Data was Successfully updated";
     mysqli_close($con);
     ?>
    

    为了方便起见,我只是在此处添加了一个按钮,但如果您不想要它,只需将其删除并在您拥有的每个组合框上放回 onChange :)

    【讨论】:

    • 感谢您的时间@Aljie :)
    猜你喜欢
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多