首页 > 解决方案 > 更新行而不是添加新行

问题描述

我的问题是我想更新该行但是当我编辑该行时,它会添加新行并且一些数据不会检索回数据库。有人知道我错过了什么吗?我应该添加一些循环吗?我正在使用按钮提交,并且在按钮提交中我只想要同一行的功能editGroup(更新)。这意味着,用户可以编辑行并单击按钮提交和更新行。

PHP 更新

function editGroup(){
global $ehorsObj;
$employeeID = $_SESSION['employeeID'];
$propertyID = $_SESSION['propertyID'];
$accountID        = (isset($_POST['accountID']) ? $_POST['accountID'] : '');
$accountLedgerID  = (isset($_POST['accountLedgerID']) ? $_POST['accountLedgerID'] : '');
$accountNo        = (isset($_POST['accountNo']) ? $_POST['accountNo'] : '');
$accountName      = (isset($_POST['accountName']) ? $_POST['accountName'] : '');
//$accountMain    = (isset($_POST['accountMain']) ? $_POST['accountMain'] : '');
$openingBalance   = (isset($_POST['openingBalance']) ? $_POST['openingBalance'] : '');
$openingBalanceDate = (isset($_POST['openingBalanceDate']) ? $_POST['openingBalanceDate'] : '');
$selectable       = (isset($_POST['selectable']) ? $_POST['selectable'] : '');
$popUp            = (isset($_POST['popUp']) ? $_POST['popUp'] : '');
$accountChar      = (isset($_POST['accountChar']) ? $_POST['accountChar'] : '');
$active           = (isset($_POST['active']) ? $_POST['active'] : '');

$sqlCount   =   "SELECT COUNT(*) AS TOTAL FROM tblAccAccounts
                 WHERE accountID = '" . $accountID . "'";
$GetResult = $ehorsObj->FetchData($sqlCount, $ehorsObj->DEFAULT_PDO_CONNECTIONS);
while ($row = $GetResult->fetch()){
    $total = $row ['TOTAL'];
}
if ($total > 0) // table returned some rows
    {
        $sqlUpdate= "UPDATE tblAccAccounts 
            SET accountLedgerID = '" . $accountLedgerID . "',
                accountNo = '" . $accountNo . "',
                accountName = '" . $accountName . "',
                openingBalance = '" . $openingBalance . "',
                openingBalanceDate = '" . $openingBalanceDate . "',
                selectable = '" . $selectable . "',
                popUp = '" . $popUp . "',
                accountChar = '" . $accountChar . "',
                active = '" . $active . "'
            WHERE accountID = '".$accountID."'"; 
        $ehorsObj->ExecuteData($sqlUpdate, $ehorsObj->DEFAULT_PDO_CONNECTIONS);
    } 
    else 
    { // no such row exists.
        $sqlInsert= "INSERT INTO tblAccAccounts
                        SET accountID = '" . $accountID . "',
                        accountLedgerID = '" . $accountLedgerID . "',
                        accountNo = '" . $accountNo . "',
                        accountName = '" . $accountName . "',
                        openingBalance = '" . $openingBalance . "',
                        openingBalanceDate = '" . $openingBalanceDate . "',
                        selectable = '" . $selectable . "',
                        popUp = '" . $popUp . "',
                        accountChar = '" . $accountChar . "', 
                        active = 'y',   
                        employeeID = '" . $employeeID . "',                         
                        propertyID = '" . $propertyID . "',                         
                        dateTimeEmployee = NOW() "; 
        $ehorsObj->ExecuteData($sqlInsert, $ehorsObj->DEFAULT_PDO_CONNECTIONS);
    }}

JavaScript

//AJAX call for button
    $("#btnSave").kendoButton();
    var button = $("#btnSave").data("kendoButton");
    button.bind("click", function(e) {

    //var test = $("#accountLedger").data("kendoDropDownList").value();
    var accountLedgerID = $("#accountLedger").data("kendoDropDownList").value();
    var accountID = $("#accountID").val();
    var accountName = $('#accountName').val();
    var accountNo = $("#accountNo").val();
    var openingBalance = $('#openingBalance').val();
    var openingBalanceDate = $('#openingBalanceDate').val();
    //var selectable = $("input[name=selectable]:checked").val(); 
    var selectable = $('#selectable').val(); 
    var popUp = $('#popUp').val();
    //var popUp = $("input[name=popUp]:checked").val();
    var accountChar = $("#accountChar").val();

    $.ajax({
        url: "../DesignationProgramTemplate/getCoaGroup.php",
        type: "POST",
            data: {
                method: "editGroup",
                accountID: accountID,
                accountLedgerID: accountLedgerID,
                accountName: accountName,
                accountNo: accountNo,
                openingBalance: openingBalance,
                openingBalanceDate: openingBalanceDate,
                selectable: selectable,
                popUp: popUp,
                accountChar: accountChar
                },
                        success: function(){
                            KendoAlert("Data updated");
                        }
        });
    });

有人对此有意见吗?

标签: javascriptphp

解决方案


要只更新表的行,您只需要执行UPDATE查询即可,之后无需使用INSERT

这意味着不需要使用这部分代码

accountID= $ehorsObj->EHORS_PK(tblAccAccounts);
$sqlAdd     =   "INSERT INTO tblAccAccounts
                SET accountID = '" . $accountID . "',
                accountLedgerID = '" . $accountLedgerID . "',
                accountNo = '" . $accountNo . "',
                accountName = '" . $accountName . "',
                openingBalance = '" . $openingBalance . "',
                openingBalanceDate = '" . $openingBalanceDate . "',
                selectable = '" . $selectable . "',
                popUp = '" . $popUp . "',
                accountChar = '" . $accountChar . "', 
                active = 'y',   
                employeeID = '" . $employeeID . "',                         
                propertyID = '" . $propertyID . "',                         
                dateTimeEmployee = NOW() ";     

$ehorsObj->ExecuteData($sqlAdd, $ehorsObj->DEFAULT_PDO_CONNECTIONS);    } 

此外,如果您想要(您应该是)INSERT一个新行,如果表中没有现有行,您应该仅在对 table 执行检查后才这样做。

例如 :

$sql=mysqli_query($conn, "SELECT * FROM tblAccAccounts WHERE AccountID = $accountID");

if (mysqli_num_rows($sql) > 0) // table returned some rows
{
    $sqlUpdate= <YOUR UPDATE COMMAND HERE>;
    mysqli_query($conn,$sqlUpdate);

} 
 else { // no such row exists.
    $sqlInsert=<YOUR INSERT COMMAND HERE>;
    mysqli_query($conn,$sqlInsert);
}

推荐阅读