4

2 つの mysql テーブルからデータを読み取る ajax テーブルがあります。テーブルは次のとおりです。

project_ownerships - id_own、project、code、own_current、own_future
プロジェクト - id、project、location、type、type2、area、transport、stage

結合テーブルのSQLクエリを使用して、データがWebページテーブルに正常に読み込まれます。

$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);

ただし、編集の更新が正しく機能しません。data - id1 つの db テーブルからしか値を取得できません。

projectsしたがって、テーブルの更新に属する更新はすべて正常に更新されますが、更新project_ownershipsは正しい id 値を持たず、間違った db レコードを更新します

ここに更新機能があります。この関数は、「インデックスまたは名前 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.*フィールドのみ

だから...というSQLクエリの列が必要です*.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 を定義するプライベート関数がいくつかあります。したがって、それは editablegrid の質問であり、実際にはここに適した javascript、ajax、または php の質問ではないと思います

4

1 に答える 1

1

競合しないように、SQLクエリの各テーブルの「id」列の名前をAS演算子で変更する必要があります。

例えば ​​:

SELECT B.*,A.name,A.id as author_id FROM BOOKS B
INNER JOIN AUTHORS A ON A.id=B.authorid
于 2012-08-09T11:03:17.727 に答える