可编辑数据表PHP MySQL jQuery
我有一个从数据库中动态输入的表,它正常工作,然后我将datatables功能放在顶部,它工作得很好,排序、搜索和分页再次正常工作 我现在正在考虑是否能够编辑一行并将数据更新回数据库并刷新表 我的桌子结构可编辑数据表PHP MySQL jQuery,php,jquery,jquery-datatables,Php,Jquery,Jquery Datatables,我有一个从数据库中动态输入的表,它正常工作,然后我将datatables功能放在顶部,它工作得很好,排序、搜索和分页再次正常工作 我现在正在考虑是否能够编辑一行并将数据更新回数据库并刷新表 我的桌子结构 <table class="table table-striped table-hover table-bordered" id="tobebookedtable"> <thead> <tr> <th style="display
<table class="table table-striped table-hover table-bordered" id="tobebookedtable">
<thead>
<tr>
<th style="display:none;">PropID</th>
<th>ProjectNo</th>
<th>Householder</th>
<th>HouseNoName</th>
<th>Street Name</th>
<th>Postcode</th>
<th>Telephone</th>
<th>EPCPlanned</th>
<th>TAM</th>
</tr>
</thead>
<tbody>
<tr>
<?php
$planning = db::getInstance()->query('CALL sp_tobebooked()');
foreach ($planning->results() as $planning) {
?>
<td style="display:none;"><?php echo $planning->PropID; ?></td>
<td><?php echo $planning->ProjectNo; ?></td>
<td><?php echo $planning->Householder; ?></td>
<td><?php echo $planning->HouseNoName; ?></td>
<td><?php echo $planning->StreetName; ?></td>
<td><?php echo $planning->Postcode; ?></td>
<td><?php echo $planning->Telephone; ?></td>
<td><?php echo $planning->EPCPlanned; ?></td>
<td><?php echo $planning->TAM; ?></td>
</tr>
<?php }; ?>
</tbody>
</table>
EPCPlaned是我想要更新的唯一字段
这是我的jQuery端代码,编辑功能有效,我可以点击单元格编辑记录
<script type="text/javascript">
$(document).ready(function() {
$('#tobebookedtable').dataTable( {
//"bProcessing": true,
//"bServerSide": true,
//"bJQueryUI": true,
"bPaginate": true,
"bStateSave": true
} );
/* Init DataTables */
var oTable = $('#tobebookedtable').dataTable();
/* Apply the jEditable handlers to the table */
oTable.$('td').editable( 'tobebooked_edit.php', {
"callback": function( sValue, y ) {
var aPos = oTable.fnGetPosition( this );
oTable.fnUpdate( sValue, aPos[0], aPos[1] );
//window.location.reload();
},
"submitdata": function ( value, settings ) {
console.log(value);
console.log(settings);
return {
"row_id": this.parentNode.getAttribute('id'),
"column": oTable.fnGetPosition( this )[2]
};
},
"height": "26px",
"width": "100%"
} );
} );
</script>
这是tobebooked_edit.php
<?php
require 'core/init.php';
$table="temp_tobebooked";
$rawdata = $_POST;
$query = "show columns from $table";
$result= mysql_query($query) or die(mysql_error());
$fields = array();
while ( $row = mysql_fetch_assoc($result) )
{
$fieldname = $row['Field'];
array_push($fields, $fieldname);
}
$id = $rawdata['row_id'];
$value = $rawdata['value'];
$column = $rawdata['column'];
$column = $column + 1;
$fieldname = $fields[$column];
$value = utf8_decode($value);
$query = "update $table set $fieldname = '$value' where PropID = '$id'";
$result = mysql_query($query);
if (!$result) { echo "Update failed"; }
else { echo "UPD: $value"; }
?>
当它全部运行并且我更新了一条记录时,该字段在屏幕上更新并显示UPD:和输入的值
但当我检查数据库时,没有更新记录。也没有显示错误
如何在数据库中更新数据?首先,我认为
<tr>
<?php
$planning = db::getInstance()->query('CALL sp_tobebooked()');
foreach ($planning->results() as $planning) {
?>
对于每个td元素,您选择tr元素并搜索id属性,该属性不存在首先根据rsella的注释,您需要在循环中移动行。 其次,正如所怀疑的那样,您将ID保存在一个隐藏单元中,该单元实际上是可编辑元素的同级元素,而不是父元素。尝试将表结构更改为以下内容
<tbody>
<?php
$planning = db::getInstance()->query('CALL sp_tobebooked()');
foreach ($planning->results() as $planning) {
?>
<tr id="<?php echo $planning->PropID; ?>" >
<td><?php echo $planning->ProjectNo; ?></td>
<td><?php echo $planning->Householder; ?></td>
<td><?php echo $planning->HouseNoName; ?></td>
<td><?php echo $planning->StreetName; ?></td>
<td><?php echo $planning->Postcode; ?></td>
<td><?php echo $planning->Telephone; ?></td>
<td><?php echo $planning->EPCPlanned; ?></td>
<td><?php echo $planning->TAM; ?></td>
</tr>
<?php };
?>
</tbody>
在JQuery中将行id:this.parentNode.getAttribute'id'更改为this.getAttribute'id'首先,mysql函数已被弃用,在PHP的未来版本中将停止工作,因此请使用PDO。第二,您需要调用execute函数而不是query。尝试使用mysql_query$query或diemsql_error查看抛出的错误。是的,我知道我应该使用PDO,但我想首先让它与mysql_一起工作,因为这是我测试它工作的最快方法。我的计划是,一旦一切顺利,然后将其转化为PDO@GeoffChapman谢谢,我在中添加了这一点,它显示了一个错误,我忘了对表进行编码,说明数据是从哪里显示的。在添加这个之后,它仍然显示为UPD和我的更新值,但在db表中没有更新。我不知道这个表,但是第一个测试是简单地将post数据转储到tobebooked_edit.php var_dump$\u post中,只要确保在测试后删除它即可。感谢您的回复,使用var_dump$\u post;这是我在EPCPlaned字段array3{[value]=string10 2014年6月14日[id]=string0[row_id]=string0}UPD:2014年6月14日id或row_id没有获得分配给它的Superb内容的id时的输出,这起到了作用。我使用了您的第二个选项,我已经从表头中隐藏了PropID,现在,当我将日期输入到EPCPlaned中时,它也会在var_dump$\u POST中显示PropID;在取出它之后,在数据库上进行测试,它完全按照您所说的做。谢谢你的帮助,我从中学到了很多新东西。
"row_id": this.parentNode.getAttribute('id'),
<tbody>
<?php
$planning = db::getInstance()->query('CALL sp_tobebooked()');
foreach ($planning->results() as $planning) {
?>
<tr id="<?php echo $planning->PropID; ?>" >
<td><?php echo $planning->ProjectNo; ?></td>
<td><?php echo $planning->Householder; ?></td>
<td><?php echo $planning->HouseNoName; ?></td>
<td><?php echo $planning->StreetName; ?></td>
<td><?php echo $planning->Postcode; ?></td>
<td><?php echo $planning->Telephone; ?></td>
<td><?php echo $planning->EPCPlanned; ?></td>
<td><?php echo $planning->TAM; ?></td>
</tr>
<?php };
?>
</tbody>
<tbody>
<?php
$planning = db::getInstance()->query('CALL sp_tobebooked()');
foreach ($planning->results() as $planning) {
?>
<tr>
<td><?php echo $planning->ProjectNo; ?></td>
<td><?php echo $planning->Householder; ?></td>
<td><?php echo $planning->HouseNoName; ?></td>
<td><?php echo $planning->StreetName; ?></td>
<td><?php echo $planning->Postcode; ?></td>
<td><?php echo $planning->Telephone; ?></td>
<td id="<?php echo $planning->PropID; ?>"><?php echo $planning->EPCPlanned; ?></td>
<td><?php echo $planning->TAM; ?></td>
</tr>
<?php };
?>
</tbody>