Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可编辑数据表PHP MySQL jQuery_Php_Jquery_Jquery Datatables - Fatal编程技术网

可编辑数据表PHP MySQL jQuery

可编辑数据表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

我有一个从数据库中动态输入的表,它正常工作,然后我将datatables功能放在顶部,它工作得很好,排序、搜索和分页再次正常工作

我现在正在考虑是否能够编辑一行并将数据更新回数据库并刷新表

我的桌子结构

<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>