php
  • jquery
  • ajax
  • pdo
  • 2012-03-13 71 views 0 likes 
    0

    有人能請建議我可能會在下面的代碼中出錯嗎?我正在嘗試使用Ajax和JQuery來編輯html表中的某些字段。編輯工作在前端,但當我刷新頁面時,編輯會消失,因爲它們沒有寫入數據庫。到目前爲止我的代碼有云:在Jquery中使用Ajax進行內聯編輯

    的index.php - 我試圖使name字段編輯

    echo "<table cellpadding='0' cellspacing='0' border='0' class='table table-striped' id='datatable'> 
         <thead> 
         <tr> 
          <th>Name</th> 
          <th>Address</th> 
          <th>City</th> 
          <th>County</th> 
          <th>Phone</th> 
          <th>Mobile</th> 
          <th>Admin</th> 
         </tr> 
         </thead><tbody>"; 
         while($row = $sth->fetchObject()){ 
          echo '<tr> 
           <td class="edit name '.$row->customer_id.'">'.$row->name.'</td> 
           <td>'.$row->address_line_1.',<br />'.$row->address_line_2.',<br />'.$row->address_line_3.'</td> 
           <td>'.$row->city.'</td> 
           <td>'.$row->county.'</td> 
           <td>'.$row->phone.'</td> 
           <td>'.$row->mobile.'</td> 
           <td><div class="btn-group"> 
           <a class="btn btn-primary" href="#">Admin</a> 
           <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span> 
           </a><ul class="dropdown-menu"> 
           <li><a href="mailto:'.$row->email.'"><i class="icon-envelope"></i>Email</a></li><li><a href="#"><i class="icon-pencil"></i>Edit</a></li><li><a id="'.$row->customer_id.'" class="delete"/><i class="icon-trash"></i>Delete</a></li> 
           </td></tr>'; 
            } 
          echo "</tbody></table>"; 
    

    jQuery的

    <script> 
          $(document).ready(function(){       
           $('td.edit').click(function(){ 
            $('.ajax').html($('.ajax input').val()); 
            $('.ajax').removeClass('ajax'); 
    
            $(this).addClass('ajax'); 
            $(this).html('<input id="editbox" size="'+$(this).text().length+'" type="text" value="' + $(this).text() + '">'); 
    
            $('#editbox').focus(); 
    
           } 
          ); 
           $('td.edit').keydown(function(event){ 
            arr = $(this).attr('class').split(" "); 
             if(event.which == 13) 
              { 
              $.ajax({ type: "POST", 
                 url:"includes/edit-customer.php", 
                 data: "value="+$('.ajax input').val()+"&rownum="+arr[2]+"&field="+arr[1], 
                 success: function(data){ 
                  $('.ajax').html($('.ajax input').val()); 
                  $('.ajax').removeClass('ajax'); 
                 }}); 
             } 
    
            } 
           ); 
            $('#editbox').live('blur',function(){ 
            $('.ajax').html($('.ajax input').val()); 
            $('.ajax').removeClass('ajax'); 
           }); 
          }); 
        </script> 
    

    編輯customer.php

    <?php 
    
        //MySQL Database Connect 
        require 'config.php'; 
    
        if(isset($_POST['rownum'])) 
        { 
         update_data($_POST['field'],$_POST['value'],$_POST['rownum']); 
        } 
    
        print_r($_POST); 
    
        function get_data() 
        { 
         $query = $dbh->prepare("SELECT * FROM customer"); 
         $query->execute(); 
         return $query; 
        } 
    
        function update_data($field, $data, $rownum) 
        { 
         $query = $dbh->prepare("UPDATE customer SET ".$field." = '".$data."' WHERE customer_id = ".$rownum;); 
         $query->execute();  
        } 
    ?> 
    

    我的數據庫中的客戶表中的列CUSTOMER_ID,名稱,地址行,address_line_2,address_line_3,市,縣,電話,手機,電子郵件

    回答

    1

    有分號在您的UPDATE語句:

    $query = $dbh->prepare("UPDATE customer SET ".$field." = '".$data."' WHERE customer_id = ".$rownum;); 
    

    應該

    $query = $dbh->prepare("UPDATE customer SET ".$field." = '".$data."' WHERE customer_id = ".$rownum); 
    

    另一個問題是,你的rownumberarr[]field很容易搞混,因爲你只是分裂和假設一個先到。

    +0

    嗨@Tim Withers謝謝你,我已經修復了這個聲明,但我似乎遇到了致命錯誤:調用該行的成員函數prepare() – 2012-03-13 22:55:22

    +1

    你需要聲明數據庫處理程序('$ dbh ')作爲全局或將其傳遞給函數本身。 '$ dbh'未初始化,否則不是PDO對象。 – 2012-03-13 22:58:30

    +0

    非常好,修復了錯誤,我在這個過程中學到了新東西,非常感謝! – 2012-03-13 23:08:18

    1

    我認爲你需要簡化問題。首先,似乎數據並未保存在服務器端。在執行查詢期間,您不檢查是否有錯誤。修改它像這樣以查找錯誤/消除誤差向量:

    $result = $query->execute();  
    // execute() can fail for various reasons. 
    if (false===$result) { 
        die('execute() failed: ' . htmlspecialchars($query->error)); 
    }' 
    

    並修改成功,看到任何返回的錯誤消息:

    success: function(data){ 
    
    alert(data); 
    }}); 
    

    如果這是空的,那麼我們可以排除錯誤在你的查詢中。

    +0

    嗨,感謝您的評論我似乎得到以下錯誤 - 致命錯誤:調用成員函數prepare()在非對象..第20行我修正了@Tim Withers上面貼出的行,但似乎給出一個錯誤。 – 2012-03-13 22:54:18

    +0

    感謝您處理錯誤,我已經解決了您和Tim的幫助問題:)非常感謝 – 2012-03-13 23:09:40

    相關問題