2013-10-08 17 views
1

我有一張表,其中詳細信息從數據庫中獲取。如何使用jquery將行名從php傳遞給ajax

if(mysql_num_rows($sql) > 0) 
{ 
    $row_count_n=1; 
    while($rows=mysql_fetch_assoc($sql)) 
    { 
     extract($rows); 
     $options1 = select_data_as_options("project_resources", "name", $resource_allocated); 
     $options2 = select_data_as_options("project_roles", "name", $role); 
     echo "<tr>"; 
     echo "<td><select name='ra_$row_count_n'><option value=''>-- Select --$options1</option></select></td>"; 
     echo "<td><select name='role_$row_count_n'><option value=''>-- Select --$options2</option></select></td>"; 
     echo "<td><input type='text' name='start_date_tentative_$row_count_n' class='date_one' value=$tentatively_starts_on /></td>"; 
     echo "</tr>"; 
     $row_count_n++; 
    } 
} 

我想在需要時更新表,我通過使用jQuery從表單收集數據,並將其保存在單擊按鈕這樣使​​用Ajax。

$("#save_changes_id").click(function() 
{ 
    // To retrieve the current TAB and assign it to a variable ... 
    var curTab = $('.ui-tabs-active'); // in NEWER jQueryUI, this is now ui-tabs-active 
    var curTabPanelId = curTab.find("a").attr("href"); 

    if(curTabPanelId == "#tab_dia") 
    { 
     var curTab = $('#sub_tabs .ui-tabs-active'); 
     var curTabPanelId = curTab.find("a").attr("href"); 
    } 
    responseData = doAjaxCall($(curTabPanelId + " form")); 

    if(responseData == 1) 
     showMessage('status_msg', 'Project details updated successfully', 'green'); 
    else 
     showMessage('status_msg', 'Error: Please check all the fields', 'red'); 

}); 

function doAjaxCall(objForm) 
{ 
    var values = objForm.serialize(); 
    $.ajax({ 
     url: ajaxURL, 
     type: "post", 
     data: values, 
     async: false, 
     success: function(data) 
     { 
      responseData = data; 
     }, 
     error:function() 
     { 
      alert('Connection error. Please contact administrator. Thanks.'); 
     } 
    }); 

    return responseData; 
} 

Ajax代碼是如下:

case "allocate_ba_details": 

for($i=1; $i<=$row_count; $i++) 
{ 
    $resource = $_REQUEST["ra_$i"]; 
    $role = $_REQUEST["role_$i"]; 
    $start_date_tentative = $_REQUEST["start_date_tentative_$i"]; 
    $already_available_check = mysql_num_rows(mysql_query("select * from project_allocate_ba where project_id = $pdid")); 

    if($already_available_check > 0) 
    { 
     $sql = ("UPDATE project_allocate_ba SET resource_allocated='$resource', role='$role', tentatively_starts_on='$start_date_tentative' WHERE project_id=$pdid"); 
    } 
} 

echo $sql; 
break; 

由於我是新來這個我不知道如何以更新特定行通過行名稱。 請提出解決方案。提前致謝。

+0

'mysql_'函數已被棄用。使用['mysqli'](http://php.net/manual/fr/book.mysqli.php)或['PDO'](http://php.net/manual/fr/book.pdo.php)代替。你也有嚴重的[sql注入](http://en.wikipedia.org/wiki/SQL_injection)問題。 – Brewal

+0

你的意思是通過傳遞行的名字.. ??請你澄清.. ?? – Outlooker

+0

我只是想說一些關於特定行的標識,我可以使用它作爲關鍵字來執行更新 –

回答

0

首先使用PDO或一些php框架,它具有很好的API來與mysql一起工作。其次,不要在jQuery中使用成功/錯誤回調。 Instanted use done/fail.always。 我知道你想在服務器的html表格數據中更新行嗎? 在成功回調簡單地更新表使用jQuery文本方法爲jquery對象。你不粘貼所有的代碼,所以我寫的例子:

在server.php

​​

此代碼返回整數,所以在doAjaxCall:

function doAjaxCall(objForm) 
{ 
    var values = objForm.serialize(); 
    $.ajax({ 
     url: ajaxURL, 
     type: "post", 
     data: values, 
     async: false, 
     success: function(data) 
     { 
      if(typeof data !== 'undefined' && $.isNumeric(data)) {//check that server send correct anserw 
       $('whereIsData').text(data); 
      } 
     }, 
     error:function() 
     { 
      alert('Connection error. Please contact administrator. Thanks.'); 
     } 
    }); 

} 

現在的成功方法,你填充一些使用文本方法的DOM元素。您不能簡單地從ajaxCall方法返回數據,因爲$ .ajax是異步方法,並且responseData僅在ajax請求結束時纔有值,所以在示例中總是返回undefined。您必須以成功回調方法向用戶提供responseData。

+0

非常感謝您的時間.....我'我會嘗試這個。 –

0

一件事......

$sql = ("UPDATE project_allocate_ba SET resource_allocated='$resource', role='$role', tentatively_starts_on='$start_date_tentative' WHERE project_id=$pdid") 

需要單引號括起來$ PDID

也不要呼應$ SQL。相反,請檢查並形成迴應。

$response = array(); 

if(EVERYTHING_IS_GOOD){ 
    $response['status'] = 'good to go'; 
}else{ 
    $response['status'] = 'it went horribly wrong'; 
} 

echo json_encode($response);