javascript - 同时删除更多表并在使用 ajax.response 文本时出现错误

标签 javascript php mysql ajax response

我有两个问题。

第一个:
我的数据库中有两个表(gmembersgroups),我想检查用户是否从该组退出并且其中没有剩余的 memebrs 删除该组。首先,我收集了每个在名为 junk 的数组中没有成员的组。然后,我使用 for 循环来访问 junk 数组的每个项目并从数据库中删除。但由于我想同时从两个表中删除,我不得不使用JOIN。我不知道为什么,但这只会从 gmembers 表中删除,而 groups 表没有任何反应。

我尝试将其分成两部分,然后从 gmembers 中删除一次,然后从另一个 sql 中的 groups 中删除,但得到的结果与我使用了 JOIN

代码:

<?php 
if(isset($_POST["action"]) && $_POST['action'] == "quit_group"){
    // Empty check
    if($gS == "" || $uS == ""){
        exit();
    }

    // Make sure already member
    $sql = "SELECT id FROM gmembers WHERE gname=? AND mname=? AND approved=? LIMIT 1";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("sss",$gS,$uS,$one);
    $stmt->execute();
    $stmt->store_result();
    $stmt->fetch();
    $numrows = $stmt->num_rows;
    if($numrows < 1){
        exit();
    }

    // Remove from the database
    $sql = "DELETE FROM gmembers WHERE mname=? AND gname=? LIMIT 1";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ss",$uS,$gS);
    $stmt->execute();
    $stmt->close();

    // If the group is empty remove from the database
    $junk = array();
    $sql = "SELECT * FROM gmembers WHERE approved=? AND admin=?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_result($zero,$zero);
    $stmt->execute();
    $result = $stmt->get_result();
    while($row = $result->fetch_assoc()){
        array_push($junk, $row["gname"]);
    }
    $stmt->close();

    for($i=0; $i<count($junk); $i++){
        // Delete from gmembers
        $groupa = $junk[$i];
        $sql = "DELETE * FROM gmembers gm JOIN groups gr ON gm.gname = gr.name WHERE gm.gname=? AND gr.name=?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("ss",$groupa,$groupa);
        $stmt->execute();
        $stmt->close();
    }

    echo "was_removed";
    exit();
}
?>

第二个:
我也遇到了 ajax.responseText 问题。创建组并且没有错误后,我想将用户标题添加到他/她刚刚创建的组中。因此,当一切正常时,我会回显组的名称($name)和已创建标题。然后使用 javascript 检查这些内容并将它们标题添加到组页面。但此时我的代码失败了。它仅在警报框中回显 group_created|example groupwindow.location = "group.php?g="+sid; 不起作用。
< br/> PHP 代码:

<?php
// Create new group
if(isset($_POST["action"]) && $_POST['action'] == "new_group"){

    // GATHER THE POSTED DATA INTO LOCAL VARIABLES
    $name = preg_replace('#[^a-z 0-9]#i', '', $_POST['name']);
    $inv = preg_replace('#[^0-9.]#', '', $_POST['inv']);
    // DUPLICATE DATA CHECKS FOR USERNAME AND EMAIL
    if ($inv == "1"){
        $inv = "0";
    }
    if ($inv == "2"){
        $inv = "1";
    }
    $sql = "SELECT id FROM groups WHERE name=? LIMIT 1";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("s",$name);
    $stmt->execute();
    $stmt->store_result();
    $stmt->fetch();
    $n_check = $stmt->num_rows;
    // FORM DATA ERROR HANDLING
    if($name == "" || $inv == ""){
        echo "The form submission is missing values.";
        exit();
    } else if ($n_check > 0){ 
        echo "The group name you entered is alreay taken";
        exit();
    } else if (strlen($name) < 3 || strlen($name) > 50) {
        echo "Group name must be between 3 and 50 characters";
        exit(); 
    } else if (is_numeric($name[0])) {
        echo 'Group name cannot begin with a number';
        exit();
    } else {
        $stmt->close();
        // END FORM DATA ERROR HANDLING
        // Begin Insertion of data into the database
        // Add group to database
        $gicon = "group_icon.png";
        $sql = "INSERT INTO groups (name, creation, logo, invrule, creator)       
                VALUES(?,NOW(),?,?,?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("ssss",$name,$gicon,$inv,$uS);
        $stmt->execute();
        $stmt->close();
        // Add to group member to database
        $sql = "INSERT INTO gmembers (gname, mname, approved, admin)       
                VALUES(?,?,?,?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("ssss",$name,$uS,$one,$one);
        $stmt->execute();
        $stmt->close();
        if (!file_exists("../groups")) {
            mkdir("../groups", 0755);
        }
        // Create directory(folder) to hold each user's files(pics, MP3s, etc.)
        if (!file_exists("../groups/$name")) {
            mkdir("../groups/$name", 0755);
        }
        $gLogo = '../images/group_icon.png';
        $gLogo2 = "../groups/$name/group_icon.png"; 
        if (!copy($gLogo, $gLogo2)) {
            echo "failed to create logo.";
        }
        echo "group_created|$name";
        exit();
    }
    exit();
}
?>

错误处理、插入、文件夹/文件创建等工作完美,除了这一行:echo "group_created|$name";

JS代码:

function createGroup(){
  var name = _("gname").value;
  var inv = _("invite").value;
  if(name == "" || inv == ""){
    alert("Fill in all fields");
    return false;
  }else{
    status.innerHTML = 'please wait...';
    var ajax = ajaxObj("POST", "php_parsers/group_parser.php");
    ajax.onreadystatechange = function(){
      if(ajaxReturn(ajax) == true){
        var datArray = ajax.responseText.split("|");
        if(datArray[0] == "group_created"){
          var sid = datArray[1];
          window.location = "group.php?g="+sid;
        }else{
          alert(ajax.responseText);
        }
      }
    }
    ajax.send("action=new_group&name="+name+"&inv="+inv);
  }
}

在这里,我检查 ajax 返回的内容,并将 split 分成两部分 echo "group_created|$name";window.location 函数不起作用。

最佳答案

对于第二个
使用:

window.Location.assign("group.php?g="+sid);

或者:

window.Location.replace("group.php?g="+sid);

关于javascript - 同时删除更多表并在使用 ajax.response 文本时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46264599/

相关文章:

javascript - 期望数组相等而忽略顺序

javascript - 使用jquery更新字段不会更新可观察的

javascript - 当 JSON 对象为空时显示适当的消息

PHP PDO,连接持续时无法设置名称?

php - Doctrine QueryBuilder 按字段优先级排序结果

mysql - 按距离排序,你认为我应该怎么做?

javascript - Angular 服务无法识别功能

php - SQLite 在 PHP 的 LIKE 查询中使用变量

c# - 如何将 sql 表中的多列分配给 List<> 中的单列

mysql - SQLSTATE[42000] : Syntax error or access violation: 1055 Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated