1

我有一张表,其中的详细信息是从数据库中获取的。

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++;
    }
}

我想在需要时更新表格,我正在使用 Ajax 执行此操作,方法是使用 Jquery 从表单中收集数据并将其保存在按钮单击时。

$("#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;

由于我是新手,因此不确定如何传递行名以更新特定行。请提出解决方案。提前致谢。

4

2 回答 2

0

首先使用 PDO 或一些具有良好 API 的 php 框架与 mysql 一起使用。其次不要在 jquery 中使用成功/错误回调太不推荐使用。即时使用 done/fail.always。我了解您想从服务器更新 html 表数据中的行?在成功回调中,只需使用 jquery 对象的 jquery 文本方法更新表。您不会粘贴所有代码,所以我编写示例:

在 server.php 中

<?php
[...]
$already_available_check = mysql_num_rows(mysql_query("select * from project_allocate_ba where project_id =" . intval($pdid)));
[...]
echo $already_available_check; 
?>

此代码返回整数,因此在 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。

于 2013-10-08T14:08:51.237 回答
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);
于 2013-10-09T17:23:44.640 回答