В течение долгого времени я пытаюсь сделать x-editable datatable. Я хочу редактировать все поля, примеры показывались только для редактирования полей:
x1
x2
x3
а не другой.
Вот пример jsfiddle http://jsfiddle.net/xBB5x/3485/
Я также задаюсь вопросом, как настроить выбор для получения данных, а затем как их обновить (возможно, сначала это функция onload), а затем ajax update.php, если im right.), Но кроме этого я получаю ошибки на data.php файл, пока я не обновляю поле whwho. Очень благодарен в расследовании этого досадного дела. В ожидании подсказок.
data.php
//delay (for debug only)
sleep(1);
require_once("../checklogin.php");
require_once("../lib/functions.php");
require_once("../lib/Db.class.php");
// Creates the instance || preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,12}$/', $_POST['password'])
$db = new Db();
$user = new users();
$error = array();
/*
You will get 'pk', 'name' and 'value' in $_POST array.
*/
$pk = $_REQUIRE['pk'];
$name = $_REQUIRE['name'];
$value = $_REQUIRE['value'];
/*
Check submitted value
*/
if(!empty($value)) {
/*
If value is correct you process it (for example, save to db).
In case of success your script should not return anything, standard HTTP response '200 OK' is enough.
for example:
$result = mysql_query('update users set '.mysql_escape_string($name).'="'.mysql_escape_string($value).'" where user_id = "'.mysql_escape_string($pk).'"');
*/
$update = $db->query("UPDATE tbl_ticket SET ".$name." = :fvalue WHERE id = :id", array(
"fvalue" => $value,
"id" => $pk
));
//here, for debug reason we just return dump of $_POST, you will see result in browser console
echo "ok";
} else {
/*
In case of incorrect value or error you should return HTTP status != 200.
Response body will be shown as error message in editable form.
*/
header('HTTP 400 Bad Request', true, 400);
}
Отладка data.php: по изменению ввода bywho
<br />
<b>Notice</b>: Undefined variable: _REQUIRE in <b>C:\xampp\htdocs\platform\admin\data.php</b> on line <b>20</b><br />
<br />
<b>Notice</b>: Undefined variable: _REQUIRE in <b>C:\xampp\htdocs\platform\admin\data.php</b> on line <b>21</b><br />
<br />
<b>Notice</b>: Undefined variable: _REQUIRE in <b>C:\xampp\htdocs\platform\admin\data.php</b> on line <b>22</b><br />
Моя функция для рисования данных
function drawticket()
{
global $db;
$drawUserstb = $db->query("SELECT * FROM tbl_ticket");
foreach ($drawUserstb as &$rows) {
echo '<tr>
<td>'.$rows['id'].'</td>
<td class="edit bywho '.$rows['id'].'"><a href="#" id="bywho" data-type="text" data-title="Bywho Id" data-pk= "'.$rows['id'].'" data-value="'.$rows['bywho'].'">'.$rows['bywho'].'</a></td>
<td class="edit message '.$rows['id'].'">'.$rows['message'].'</td>
<td class="edit prority '.$rows['id'].'">
<a href="#" id="prority" data-title="Prority" data-type="select" data-pk= "'.$rows['id'].'" data-value="'.$rows['prority'].'" data-param="XXX">'.$rows['prority'].'</a>
</td>
</tr>';
}
}
Скрипт, выполняющий действия редактирования
$(document).ready(function () {
$('td.edit a').editable({
type: 'text',
url: 'data.php',
ajaxOptions: {
type: 'put'
}
});
$('.td.e
dit a[id=prority]').editable({
loadurl : 'include/json.php',
submit : 'OK'
});
//ajax emulation
$.mockjax({
url: '/post',
responseTime: 200,
response: function(settings) {
console.log(settings);
}
});
});
Json для выбора редактирования (временная настройка)
<?PHP
header('Content-Type: application/json');
require_once("../../../checklogin.php");
require_once("../../../lib/functions.php");
require_once("../../../lib/Db.class.php");
$db = new Db();
$user = new users();
$error = array();
$array['1'] = 'No prority';
$array['2'] = 'Important';
$array['0'] = 'V important';
$array['selected'] = '1';
print json_encode($array);
?>
Я не уверен, полностью ли я соблюдаю ваши вопросы.
Я верю, что в первой части вы говорите, что хотите, чтобы все поля в таблице были доступны для редактирования?
Предполагая, что в этом случае это похоже на некоторые проблемы с вашими селекторами. Селектор "td.edit a" выбирает все элементы под элементом с редактированием класса. На самом деле это выбор как столбца "bywho", так и столбца "proraty". Он не выбирает элементы в столбце сообщения, потому что там нет привязанного тега (т.е.).
Селектор ".td.edit a [id = prority]" фактически не выбирает ничего из-за. перед td.. означает класс. поэтому он пытается найти элементы с классом "td" и класс "edit", которых нет в вашем документе. Если вы удалите. он выберет тег привязки в столбце "пропорциональность", но уже выбранный этим селектором.
Если вы хотите, чтобы все элементы в таблице были доступны для редактирования, вы можете вместо этого сделать что-то вроде: $('td.edit').children().editable({ type: 'text', url: 'data.php',
ajaxOptions: { type: 'put' }
});$('td.edit').children().editable({ type: 'text', url: 'data.php',
ajaxOptions: { type: 'put' }
});
Обратите внимание, что для этого требуется, чтобы в каждом элементе был элемент, а не только текст. Поэтому вам нужно будет обернуть суперпользователей в тег. http://jsfiddle.net/xBB5x/4230/
Кроме того, в отношении ошибок, которые вы видите в php. Я думаю, что ошибка означает, что переменная, которую вы используете _REQUIRE, не определена. Я считаю, что вы должны использовать $ _POST. (т.е. $ pk = $ _POST ['pk'];)
В любом случае кажется, что вы на правильном пути.