javascript - Ajax 发布多个查询不起作用

标签 javascript php jquery mysql ajax

我有带有ajax 的html 和php 文件。我使用本地 php 和 mysqli 作为数据库。与此相关,我有一个名为 config.php 的脚本。这个脚本:

<?php
$db = new mysqli('localhost', 'root', '', 'student');
?>

然后我有像这样的带有ajax的html:

$("form#form").submit(function(event) {
    event.preventDefault();
    var formData = new FormData($(this)[0]);
    $.ajax({
        url: 'student/action.php',
        type: 'POST',
        data: formData,
        async: false,
        cache: false,
        contentType: false,
        processData: false,
        success: function(data) {
            console.log(data);
            if (data == 0) {
                alert('all data updated');
            } else {
                alert('failed');
            }
        }
    });
    return false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body>
    <form id='form'>
        <input type='hidden' name='type' value='new-data'>
        <input name='name' type='text'>
        <input name='class' type='text'>
        <input name='hobbies' type='text'>
        <button type='submit' name='submit'>Submit</button>
    </form>
</body>

在这样的student/action.php脚本中,

<?
php require_once '../config/config.php'; 
switch ($_POST[ 'type']) {
    case "new-data": 
    $qry1=$db->query("INSERT INTO tableA SET id=NULL, name='$_POST[name]' "); 

    $qry2=$db->query("INSERT INTO tableB SET id=NULL, name='$_POST[class]' ");

    $qry3=$db->query("INSERT INTO tableC SET id=NULL, name='$_POST[hobbies]' ");

    if($qry1 && $qry2 && $qry3) {
        echo '1';
    } else {
        echo '2';
    }
    break;
} 
?>

不,这个应用程序在托管上,但这里的连接不稳定。所以当我点击submit提交时,它会将数据发布到student/action.php。它必须插入所有查询($qry1、$qry2 和 $qry3),但如果我的连接不好,它只会插入一些查询,而不是全部。怎么解决呢。谢谢

最佳答案

首先,永远不要在查询中直接使用 $_POST、$_GET、$_REQUEST(因为 SQL 注入(inject)),始终使用 mysqli_real_escape_string :

$name=$db->mysqli_real_escape_string($_POST['name']);
$class=$db->mysqli_real_escape_string($_POST['class']);
$hobbies=$db->mysqli_real_escape_string($_POST['hobbies']);

不要忘记引号

如果你想确保所有请求都被执行或者全部失败使用事务(你需要innodb存储引擎);

$db->begin_transaction();

//Your queries…

$db->commit();

如果一个请求失败,所有先前的请求都会回滚。您可以使用 $db->rollback();在提交之前取消所有查询。请参阅 php 文档以获取更多信息。

关于javascript - Ajax 发布多个查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42084738/

相关文章:

javascript - 启用 JS 时使用 onclick 事件,未启用时导航到 URL

php - 从 mysql 输出高效创建 json - 在唯一值中分组

javascript - Access-Control-Allow-Origin 不允许 Origin http ://127. 0.0.1

javascript - 无法从 XMLHttpRequest 触发单击

javascript - jQuery - 图像路径替换文件夹错误

javascript - Flow.js map 是不可写的吗?

javascript - 将字符串转换为字符串化 JSON

php - 如何将输出作为文件提供而不将其保存在服务器上

php - fastcgi_finish_request() 未定义?

javascript - checkValidity() 在 IE9 及以下版本中导致错误