Связывание Editablegrid MySQL не обновляется
Я использую editablegrid с MySQL. Он привязывает и отображает данные в моей сетке. Однако, когда я пытаюсь отредактировать или обновить сетку, это не удается.
Ниже приведен код моего 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');
Ниже приведен код для скрипта обновления:
// 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();
Ниже приведена часть 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
});
Этот шаблон поставляется с javascript editablegrid-2.0.1. Я заметил, что проблема связана с первичным ключом. В демонстрации, которую можно найти на сайте www.editablegrid.net, таблица имеет идентификатор первичного ключа, тогда как у моей есть CertificateNo, но идентификатор в моей таблице не является первичным ключом.
Так что я изменил
$grid->addColumn('ID', 'ID', 'integer', NULL, false);
в
$grid->addColumn('CertificateNo', 'CertificateNo', 'integer', NULL, false);
Теперь не могу обновить сетку.
3 ответа
У меня была такая же проблема, вы могли видеть этот код в loaddata.php
$grid->addColumn('action', 'Action', 'html', NULL, false, 'id');
замените 'id' в последнем столбце на 'CertificateNo', и это будет так
$grid->addColumn('action', 'Action', 'html', NULL, false, 'CertificateNo');
А затем перезагрузите страницу, чтобы увидеть изменения.
update.php использует $_POST['id'], возможно, вам следует изменить его на $_POST['CertificateNo'] и обработать идентификатор как просто еще один столбец, поскольку он больше не является первичным ключом.
У меня такая же проблема. Вы должны изменить в js/demo.js в
function DatabaseGrid()
{
this.editableGrid = new EditableGrid("HERE!!! Chage to name of your sql table", {...
а также переименуйте свой CertificateNo
"идентифицировать" или сделать новое перед ним, потому что сетка работает с ним во многих местах, поэтому трудно изменить везде.