Javascript AJAX调用不会更新数据库
我正在创建一个系统,在其中的一部分,你必须能够将员工从周六的轮班中调离。为此,单击一个图标,该图标调用JavaScript函数“removeEmpFromSaturday”,并提交相应的参数 在该脚本中,它应该通过Ajax请求更新值,该请求应该更新我的数据库,并将该员工从他/她的周六班次中删除Javascript AJAX调用不会更新数据库,javascript,ajax,Javascript,Ajax,我正在创建一个系统,在其中的一部分,你必须能够将员工从周六的轮班中调离。为此,单击一个图标,该图标调用JavaScript函数“removeEmpFromSaturday”,并提交相应的参数 在该脚本中,它应该通过Ajax请求更新值,该请求应该更新我的数据库,并将该员工从他/她的周六班次中删除 然而,我所指的PHP页面实际上从未被调用/请求(“由PHP页面上的警报证明”) 我对AJAX比较陌生,也许我的语法对于这个函数来说是完全错误的,所以任何额外的指针都将非常感谢 作为参考,当我提醒任何值“i
然而,我所指的PHP页面实际上从未被调用/请求(“由PHP页面上的警报证明”) 我对AJAX比较陌生,也许我的语法对于这个函数来说是完全错误的,所以任何额外的指针都将非常感谢 作为参考,当我提醒任何值“id、loc、week、year”时,它们都会给出我期望的正确值,因此这不是问题 以下是我认为问题所在的代码:
<script>
function removeEmpFromSaturday(id, loc, week, year){
xhttp = new XMLHttpRequest();
xhttp.open("GET", "includes/ajax/remove_emp_from_saturday.php?e_id=" + id +
"&location=" + loc + "&week=" + week + "&year=" + year, false);
xhttp.send();
resetPlanner();
}
</script>
从星期六(id、loc、周、年)起移除功能{
xhttp=newXMLHttpRequest();
xhttp.open(“GET”、“includes/ajax/remove_emp_from_saturday.php?e_id=“+id+
“&location=“+loc+”&week=“+week+”&year=“+year,false”);
xhttp.send();
重置计划器();
}
我所指的PHP代码也是:
<?php require_once dirname(__FILE__)."/../admin_header.php" ;?>
<script>alert("STARTED");</script>
<?php
if(isset($_REQUEST['e_id'])){
$emp_id = escape($_REQUEST['e_id']);
$loc = escape($_REQUEST['location']);
$week = escape($_REQUEST['week']);
$year = escape($_REQUEST['year']);
$query = "SELECT e_hp_daily_pat FROM employees WHERE e_id = '{$emp_id}' ";
$get_hp_daily_pat_query = mysqli_query($connection, $query);
$row = mysqli_fetch_assoc($get_hp_daily_pat_query);
$e_hp_daily_pat = escape($row['e_hp_daily_pat']);
$query = "SELECT * FROM slots WHERE s_location = '{$loc}' AND s_day = '6'
AND s_week = '{$week}' AND s_year = '{$year}' ";
$get_emps_query = mysqli_query($connection, $query);
$row = mysqli_fetch_assoc($get_emps_query);
$s_real_sub = escape($row['s_real_sub']);
$s_emps = escape($row['s_emps']);
$s_emps = explode(";", $s_emps);
$process = false;
$e_match = 0;
foreach($s_emps as $emp){
if($emp == $emp_id){
unset($s_emps[$e_match]);
$process = true;
}
$e_match++;
}
if($process == true){
$s_emps = implode(";", $s_emps);
$s_real_sub -= $e_hp_daily_pat;
$query = "UPDATE slots SET s_emps = '{$s_emps}', s_real_sub = '{$s_real_sub}' WHERE s_location = '{$loc}' AND s_day = '6' AND s_week = '{$week} AND s_year = '{$year}' ";
$set_emps_query = mysqli_query($connection, $query);
}
}
?>
<script>alert("COMPLETE");</script>
警报(“启动”);
您的更新查询中有一个错误:
$query = "UPDATE slots SET s_emps = '{$s_emps}', s_real_sub = '{$s_real_sub}' WHERE s_location = '{$loc}' AND s_day = '6' AND s_week = '{$week} AND s_year = '{$year}' ";
您在s_周后缺少一个“'”
$query = "UPDATE slots SET s_emps = '{$s_emps}', s_real_sub = '{$s_real_sub}' WHERE s_location = '{$loc}' AND s_day = '6' AND s_week = '{$week}' AND s_year = '{$year}' ";
一般建议:要调试php代码,请尝试不要使用alert(“”
),而是直接使用php内部的echo
调用
这将确保找到并解析php。“由php页面上的警报证明”——这不是证据。您没有将PHP脚本的输出作为新网页加载到浏览器中。您没有对PHP脚本的输出执行任何操作。除了@Quentin所说的:您检查了您的路径了吗?你确定文件在你说的地方吗?:)调试您遇到问题的地方是,您的服务器调用是否正确执行了put echo语句以进行调试。@Quentin这并不是一个真正有用的注释。我试图通过Ajax调用一个PHP页面来更改数据库中的值。我在我的PHP页面上有一个警报,我显然正在尝试调用它,但它并没有向我表明我在调用中遇到了问题。你明白我在这里发布求救信息吗?@Jordumus我确实检查了路径,它在正确的位置。不仅如此,我还以类似的方式打了另一个电话,路径(相同的文件夹等)也很相似,这个电话没有问题。你完全正确。很好的发现。我以后会接受这个建议,只使用您引用的确切语言进行调试。谢谢我建议使用POST请求(或删除)而不是GET。GET的语义是请求对服务器的状态没有任何副作用。因此,后续GET请求可能会被缓存。删除查询有一个明显的副作用,您不希望它被缓存。