简体   繁体   English

EditableGrid MySQL绑定未更新

[英]Editablegrid mysql binding not updating

I am using editablegrid with mysql. 我在MySQL中使用editablegrid。 It binds and display data to my grid. 它绑定并显示数据到我的网格。 However when I try to edit or update the grid it fails to do so. 但是,当我尝试编辑或更新网格时却无法这样做。

Below is the some of the code of my loaddata, 以下是我的loaddata的一些代码,

$grid->addColumn('CertificateNo', 'CertificateNo', 'integer', NULL, false); 
$grid->addColumn('ID', 'ID', 'integer');
$grid->addColumn('QuizNo', 'Test No', 'integer');  
$grid->addColumn('Received', 'Received', 'boolean');  
$grid->addColumn('DateReceived', 'Date Received', 'datetime'); 

Below is code for the update script: 以下是更新脚本的代码:

    // Get all parameters provided by the javascript
$colname = $mysqli->real_escape_string(strip_tags($_POST['colname']));
$id = $mysqli->real_escape_string(strip_tags($_POST['id']));
$coltype = $mysqli->real_escape_string(strip_tags($_POST['coltype']));
$value = $mysqli->real_escape_string(strip_tags($_POST['newvalue']));
$tablename = $mysqli->real_escape_string(strip_tags($_POST['tablename']));
    / This very generic. So this script can be used to update several tables.
$return=false;
if ( $stmt = $mysqli->prepare("UPDATE ".$tablename." SET ".$colname." = ? WHERE id = ?")) {
    $stmt->bind_param("si",$value, $id);
    $return = $stmt->execute();
    $stmt->close();

Below is the part of javascript which passes the value to my update.php script. 以下是javascript的一部分,它将值传递给我的update.php脚本。

    function updateCellValue(editableGrid, rowIndex, columnIndex, oldValue, newValue, row, onResponse)
{      
    $.ajax({
        url: 'update.php',
        type: 'POST',
        dataType: "html",
        data: {
            tablename : editableGrid.name,
            id: editableGrid.getRowId(rowIndex), 
            newvalue: editableGrid.getColumnType(columnIndex) == "boolean" ? (newValue ? 1 : 0) : newValue, 
            colname: editableGrid.getColumnName(columnIndex),
            coltype: editableGrid.getColumnType(columnIndex)            
        },
        success: function (response) 
        { 
            // reset old value if failed then highlight row
            var success = onResponse ? onResponse(response) : (response == "ok" || !isNaN(parseInt(response))); // by default, a sucessfull reponse can be "ok" or a database id 
            if (!success) editableGrid.setValueAt(rowIndex, columnIndex, oldValue);
            highlight(row.id, success ? "ok" : "error"); 
        },
        error: function(XMLHttpRequest, textStatus, exception) { alert("Ajax failure\n" + errortext); },
        async: true
    });

This template came with a javascript editablegrid-2.0.1. 该模板随附了一个javascript editablegrid-2.0.1。 I noticed the problem has to do with primary key. 我注意到问题与主键有关。 In the demo which can be found from www.editablegrid.net the table has primary key ID whereas mine has CertificateNo but ID in my table is not a primary key. 在可以从www.editablegrid.net上找到的演示中,表具有主键ID,而我的具有CertificateNo,但是我表中的ID不是主键。

So I changed the 所以我改变了

$grid->addColumn('ID', 'ID', 'integer', NULL, false);

to

$grid->addColumn('CertificateNo', 'CertificateNo', 'integer', NULL, false); 

Now I can not update the grid. 现在,我无法更新网格。

I had the same problem, you could see this code in loaddata.php 我有同样的问题,您可以在loaddata.php中看到此代码

$grid->addColumn('action', 'Action', 'html', NULL, false, 'id'); 

replace 'id' at the last column with 'CertificateNo' and it will be like this 将最后一列的“ id”替换为“ CertificateNo”,它将像这样

$grid->addColumn('action', 'Action', 'html', NULL, false, 'CertificateNo');

And then reload your page to see the changes. 然后重新加载您的页面以查看更改。

update.php使用$ _POST ['id'],也许您应该将其更改为$ _POST ['CertificateNo']并将该ID作为另一列进行处理,因为它不再是主键。

I had the same problem. 我有同样的问题。 You have to change in js/demo.js in 您必须在js / demo.js中进行更改

function DatabaseGrid() 
{ 
    this.editableGrid = new EditableGrid("HERE!!! Chage to name of your sql table", {...

and also rename your CertificateNo to "id" or make new before it, because the grid works with it on many places, so it's hard to change everywhere. 并将您的CertificateNo重命名为“ id”或在其之前重新命名,因为网格在很多地方都可以使用它,因此很难在任何地方进行更改。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM