我有一个从两个mysql表读取数据的ajax表,表是
project_ownerships - id_own,project,code,own_current,own_future
项目 - id,项目,位置,类型,类型2,区域,运输,阶段
使用连接表sql查询将数据读入网页表。
$query_value = isset($_GET['value']) ? $_GET['value'] : "";
$sql = "SELECT project_ownerships.*, projects.*
FROM project_ownerships, projects
WHERE project_ownerships.project = projects.project
AND project_ownerships.code = $query_value'";
$result = $mysqli->query($sql);
然而,我无法使编辑更新正常工作。我只能从一个db-table获得data - id
值。
所以属于projects
表的任何更新都会更新,但对project_ownerships
的任何更新都没有正确的id值并更新错误的db-record
这是更新功能。此函数返回错误“找不到索引或名称id_own的列”
$.ajax({
url: 'update_multi.php',
type: 'POST',
dataType: "html",
data: {
tablename: editableGrid.getColumnName(columnIndex) == "own_current" ? "project_ownerships" : "projects",
id: editableGrid.getColumnName(columnIndex) == "own_current" ? editableGrid.getValueAt(rowIndex, editableGrid.getColumn("id_own")) : editableGrid.getRowId(rowIndex),
newvalue: editableGrid.getColumnType(columnIndex) == "boolean" ? (newValue ? 1 : 0) : newValue,
colname: editableGrid.getColumnName(columnIndex),
coltype: editableGrid.getColumnType(columnIndex)
},
success: function (...,
error: function(...,
async: true
});
这是php更新
$tablename = $mysqli->real_escape_string(strip_tags($_POST['tablename']));
$id = $mysqli->real_escape_string(strip_tags($_POST['id']));
$value = $mysqli->real_escape_string($_POST['newvalue']);
$colname = $mysqli->real_escape_string(strip_tags($_POST['colname']));
$coltype = $mysqli->real_escape_string(strip_tags($_POST['coltype']));
$id_column = "";
if ($tablename == "projects") {$id_column = "id";} else {$id_column = "id_own";}
if ( $stmt = $mysqli->prepare("UPDATE ".$tablename." SET ".$colname." = ? WHERE ".$id_column." = ?")) {
$stmt->bind_param("si",$value, $id);
$return = $stmt->execute();
$stmt->close();
}
基本上我想做的事情......
如果从sql中删除projects.id
,则更新将无法正常工作
如果project_ownership.id_own
更改为project_ownership.id
且projects.id
已删除,则更新将有效,但仅适用于project_ownership.*
个字段
所以......我需要一个名为*.id
单独发送更新时,可以通过
选择正确的表名tablename: editableGrid.getColumnName(columnIndex) == "own_current" ? "project_ownerships" : "projects",
所以使用相同的逻辑
id: editableGrid.getColumnName(columnIndex) == "own_current" ? editableGrid.getValueAt(rowIndex, editableGrid.getColumn("id_own")) : editableGrid.getRowId(rowIndex),
首先,认识到own_current
存在,并将参数传递给editableGrid.getValueAt(rowIndex, editableGrid.getColumn("id_own"))
,但返回的错误是“找不到id_own
名称的列”......?
我真的很困惑..
它不能存在(从sql中删除)否则更新只会冻结
但是当它在那里时却找不到......
任何帮助都会很棒
如何定义ajax - data - id
列或rowIndex列?
我正在研究
的理论 editableGrid.getRowId(rowIndex)
可能是类似的东西(显然这不会起作用)
editableGrid.getValueAt(rowIndex, editableGrid.getColumn("id_own"))
但我也曾尝试过,
editableGrid.getValueAt(rowIndex, editableGrid.getColumnIndex("id_own"))
返回“无效列索引-1”
和
editableGrid.getValueAt(rowIndex, editableGrid.getColumnName("id_own"))
更新
editablegrid
中有几个私有函数定义了行id。所以我想这使它成为一个可编辑的网格问题而不是真正适合这里的javascript,ajax或php问题
答案 0 :(得分:1)
您应该使用AS运算符重命名SQL查询中每个表的“id”列,这样它们就不会发生冲突。
例如:
SELECT B.*,A.name,A.id as author_id FROM BOOKS B
INNER JOIN AUTHORS A ON A.id=B.authorid