2016-12-02 3 views
0

Просто начиная с php, datatables и jeditable, я могу заставить свою таблицу загружаться и выглядит нормально, когда я нажимаю на запись в таблице, она позволяет мне редактировать запись, и я получаю данные, когда смотрю на файл dataOut.php в хром-инструментах разработчика, но он не передает идентификатор записи.Datatables и JEditable

<script type="text/javascript"> 
 
    
 
$(document).ready(function() { 
 
    
 
$('#users').dataTable({ 
 
    }); 
 
    
 
    /* Init DataTables */ 
 
    var oTable = $('#users').dataTable(); 
 
     
 
    /* Apply the jEditable handlers to the table */ 
 
    oTable.$('td').editable('dataOut.php', { 
 
     "callback": function(sValue, y) { 
 
      var aPos = oTable.fnGetPosition(this); 
 
      oTable.fnUpdate(sValue, aPos[0], aPos[1]); 
 
      window.location.reload(); 
 
     }, 
 
     "submitdata": function (value, settings) { 
 
      return { 
 
       "row_id": this.parentNode.getAttribute('id_user'), 
 
       "column": oTable.fnGetPosition(this)[2] 
 
      } 
 
     }, 
 
     "height": "14px", 
 
     "width": "100%" 
 
    }); 
 
}); 
 
    
 
    
 
</script>
<table id="users" class="display" cellspacing="0" width="100%"> 
 
     \t \t \t <thead> 
 
      \t \t \t \t <tr> 
 
       \t \t \t \t <th>id</th> 
 
       \t \t \t \t <th>First Name</th> 
 
       \t \t \t <th>Last Name</th> 
 
       \t \t \t <th>Username</th> 
 
       \t \t \t <th>Name</th> 
 
       \t \t \t <th>Role Code</th> 
 
      \t \t \t </tr> 
 
     \t \t \t </thead> 
 
     \t <tbody> 
 
     \t <?php 
 
\t \t \t \t $sql = "SELECT * FROM `users`"; 
 
\t \t \t \t \t foreach ($conn->query($sql)as $row){ 
 
\t \t \t \t \t \t echo '<tr>'; 
 
\t \t \t \t \t \t \t echo '<td>' . $row['id_user'] . '</td>'; 
 
\t \t \t \t \t \t \t echo '<td>' . $row['firstname'] . '</td>'; 
 
\t \t \t \t \t \t \t echo '<td>' . $row['lastname'] . '</td>'; 
 
\t \t \t \t \t \t \t echo '<td>' . $row['username'] . '</td>'; 
 
\t \t \t \t \t \t \t echo '<td>' . $row['realname'] . '</td>'; 
 
\t \t \t \t \t \t \t echo '<td>' . $row['role'] . '</td>'; 
 
\t \t \t \t \t \t echo '</tr>'; 
 
\t \t \t \t \t } 
 
\t \t \t \t ?> 
 
\t \t \t \t \t </tbody> 
 
     \t \t \t <tfoot> 
 
      \t \t \t \t <tr> 
 
\t \t \t \t \t \t \t <td>id</td> 
 
      \t \t \t \t \t <td>iFirstname</td> 
 
      \t \t \t \t \t <td>Lastname</td> 
 
      \t \t \t \t \t <td>Username</td> 
 
      \t \t \t \t \t <td>Name</td> 
 
      \t \t \t \t \t <td>Role Code</td> 
 
      \t \t \t </tr> 
 
     \t \t \t </tfoot> 
 
     \t \t \t 
 
\t \t \t </table>

И когда я изменить фамилию от Льюиса к Lane, вот результат хромированной разработчика

массива (4) {[ "значение"] => строка (4) "Lane" ["id"] => string (0) "" ["row_id"] => string (0) "" ["column"] => string (1) "2"}

ответ

0

I Я не уверен, что понимаю ваш вопрос, но я заметил ошибку, и я подозреваю, что это может быть вашей проблемой.

В цикле foreach вы перебираете $conn->query(), являющийся объектом mysqli_result. Вам необходимо вызвать метод fetch_assoc. Кроме того, это необходимо сделать через цикл while вместо цикла foreach. Это связано с тем, что fetch_assoc - это функция, которая получает следующую строку, соответствующую вашему запросу, вместо того, чтобы возвращать один большой массив со всеми соответствующими строками. Когда строк больше нет, он возвращает null и поэтому завершает цикл while. Попробуйте это:

<script type="text/javascript"> 
 
    
 
$(document).ready(function() { 
 
    
 
$('#users').dataTable({ 
 
    }); 
 
    
 
    /* Init DataTables */ 
 
    var oTable = $('#users').dataTable(); 
 
     
 
    /* Apply the jEditable handlers to the table */ 
 
    oTable.$('td').editable('dataOut.php', { 
 
     "callback": function(sValue, y) { 
 
      var aPos = oTable.fnGetPosition(this); 
 
      oTable.fnUpdate(sValue, aPos[0], aPos[1]); 
 
      window.location.reload(); 
 
     }, 
 
     "submitdata": function (value, settings) { 
 
      return { 
 
       "row_id": this.parentNode.getAttribute('id_user'), 
 
       "column": oTable.fnGetPosition(this)[2] 
 
      } 
 
     }, 
 
     "height": "14px", 
 
     "width": "100%" 
 
    }); 
 
}); 
 
    
 
    
 
</script>
<table id="users" class="display" cellspacing="0" width="100%"> 
 
     \t \t \t <thead> 
 
      \t \t \t \t <tr> 
 
       \t \t \t \t <th>id</th> 
 
       \t \t \t \t <th>First Name</th> 
 
       \t \t \t <th>Last Name</th> 
 
       \t \t \t <th>Username</th> 
 
       \t \t \t <th>Name</th> 
 
       \t \t \t <th>Role Code</th> 
 
      \t \t \t </tr> 
 
     \t \t \t </thead> 
 
     \t <tbody> 
 
     \t <?php 
 
\t \t \t \t $sql = "SELECT * FROM `users`"; 
 
\t \t \t \t \t while($row = ($conn->query($sql))->fetch_assoc()) { 
 
\t \t \t \t \t \t echo '<tr>'; 
 
\t \t \t \t \t \t \t echo '<td>' . $row['id_user'] . '</td>'; 
 
\t \t \t \t \t \t \t echo '<td>' . $row['firstname'] . '</td>'; 
 
\t \t \t \t \t \t \t echo '<td>' . $row['lastname'] . '</td>'; 
 
\t \t \t \t \t \t \t echo '<td>' . $row['username'] . '</td>'; 
 
\t \t \t \t \t \t \t echo '<td>' . $row['realname'] . '</td>'; 
 
\t \t \t \t \t \t \t echo '<td>' . $row['role'] . '</td>'; 
 
\t \t \t \t \t \t echo '</tr>'; 
 
\t \t \t \t \t } 
 
\t \t \t \t ?> 
 
\t \t \t \t \t </tbody> 
 
     \t \t \t <tfoot> 
 
      \t \t \t \t <tr> 
 
\t \t \t \t \t \t \t <td>id</td> 
 
      \t \t \t \t \t <td>iFirstname</td> 
 
      \t \t \t \t \t <td>Lastname</td> 
 
      \t \t \t \t \t <td>Username</td> 
 
      \t \t \t \t \t <td>Name</td> 
 
      \t \t \t \t \t <td>Role Code</td> 
 
      \t \t \t </tr> 
 
     \t \t \t </tfoot> 
 
     \t \t \t 
 
\t \t \t </table>

http://php.net/manual/en/mysqli-result.fetch-assoc.php

+0

Спасибо, что дает мне больше данных, я думаю, мой вопрос заключается в том, что возвращаемые данные не включают в себя первичный ключ, относящийся к записи базы данных. Возвращаемые данные: array (4) {["value"] => string (10) "Peter.Lane" ["id"] => string (0) "" ["row_id"] => string (0) "" ["column"] => string (1) "3"} – DaveS

+0

Получил это, моя ошибка: Изменена эта строка: "row_id": this.parentNode.getAttribute ('id_user'), на "row_id": this.parentNode. getAttribute ('id') и поместите идентификатор в тег в идентификатор таргетинга таблицы. благодаря – DaveS

Смежные вопросы