2017-09-18 23 views
0

我的问题是update.php只获取发布的表单数据(post_edit)。通过AJAX早些时候发布的变量不经过如何将AJAX调用与通过表单发布数据到同一文件的php文件同步?

Notice: Undefined index: id_to_edit in ...\update.php on line 5 

Notice: Undefined index: column_to_edit in ...\update.php on line 6 

我想要做的事:

我有痕迹鼠标放在桌子上的身体位置的回调函数。这样做是为了检测用户想要编辑的单元格的列和id - id整数和列字符串通过AJAX发布到一个php文件中,并在SQL查询中使用这两个值(对于坐标)在顶部用户想要更新的数据(通过表单发布,稍后更多)。

编辑按照这种方式完成:当用户将鼠标放在单元格上时,表单将在内部创建,并填充该表单应该发布数据以更新SQL表中的对应条目(通过使用坐标回调函数)。移出将删除表单。

套用有点

如何发布坐标和表单数据的PHP文件,使所有这些值可以在SQL查询中使用?如果我一直在做的是从根本上打破了,那么还有另一种方法吗?

$(function(){ 

    $("td") 
    .hoverIntent(
     function(e){    
     var id_of_edit = $(e.target).siblings('th').text(); 
     var $clicked_column_i = $(e.target).index() + 1; 
     var column_of_edit = $("#tableheader").children("th:nth-child(" + $clicked_column_i + ")").text(); 

     $.ajax({ 
      type: 'POST', 
      dataType: 'text', 
      url: 'update.php', 
      data: { 
       'id_of_edit': id_of_edit, 
       'column_of_edit': column_of_edit 
       }, 

     }); 

     var $edit_button = $('<form action="update.php" method="post"><input type="text" name="post_edit"/></form>'); 

     $(e.target).append($edit_button); 

     console.log(e.target.innerText + " was clicked"); 
     console.log(id_of_edit + " is the ID"); 
     console.log(column_of_edit + " is the column name");  
     //just to check the tracer function is working correctly 
     }, 

     function(e){    
     $id_of_edit = $(e.target).siblings('th').text(); 
     $clicked_column_i = $(e.target).index() + 1; 
     $column_of_edit = $("#tableheader").children("th:nth-child(" + $clicked_column_i + ")").text(); 

     $(e.target).children('form').remove(); 
     }); 

}); 

update.php:

<?php 

include 'config.php'; 

echo $_POST['id_to_edit']; 
echo $_POST['column_to_edit']; 
echo $_POST['post_edit']; 


$stmt = $pdo->prepare('UPDATE food SET :column = :edit WHERE id = :id'); 
$stmt->execute([ 
    'id' => $_POST['id_to_edit'], 
    'column' => $_POST['column_to_edit'], 
    'edit' => $_POST['post_edit'] 
]); 

?> 
+0

代码中也有拼写错误:** _编辑的id _ **与id _ **到** _edit(其他变量对中的同一个拼写错误) – Shadow

回答

0

AJAX请求并使用标准的回发一个表单提交是两个单独的 HTTP请求。您的“update.php”脚本将执行两次 - 对于每个单独的请求都会执行一次,并且每个请求将根据您在该请求上发送的内容设置单独的POST变量集。变量不会在请求之间持续存在 - 仅仅因为您将它们发送到同一个端点脚本并不重要。

总结:HTTP请求是无状态 - 它们是孤立存在的,任何给定的请求对先前或将来的请求都一无所知。每一个都会导致命名的PHP脚本从头到尾运行,就好像它从未运行过一样,并且可能永远不会再运行。它不会记住过去,也不会对未来一无所知,除非你明确地做了些什么。

如果您希望值在请求之间持续存在,您必须自己存储它们 - 在数据库,会话,Cookie中,无论如何(取决于您) - 然后在需要时再检索它们。


说了这么多,看你的服务器代码,目前还不清楚为什么你会想要两个单独的请求无论如何 - 你在SQL做一个UPDATE语句,所以它会更有意义使用一个HTTP请求将所有数据传输到服务器,然后执行运行UPDATE的脚本。除非UI中存在某些原因,否则无法完成,在这种情况下,您需要在请求之间的某处保留值。从您的描述中,您可能会将单元格/列ID捕获到您生成的表单内的隐藏字段,而不是通过ajax立即将它们发送到服务器。当提交主表单时,隐藏的字段值将与用户生成的值一起发布到服务器。另外,如果你真的使用鼠标的位置来确定单元格,这听起来很不可靠 - 浏览器窗口可以调整大小。当然,将一个ID放在单元格的HTML标记中(例如作为一个数据属性),当单击单元格/单击时可以读取该标识符会更可靠吗?

相关问题