4

PHP スクリプトに問題があり、想定よりも多くのレコードが追加されます。人々の給与とその分布を含むいくつかの「サブテーブル」を含む大きなテーブルがあります。

名前 # PayRate # 配布 # 年間

ジョン・スミス # 10,000 # 20.00% # 50,000 # 編集 # 削除
ピーター・パン # 100,000 # 100.00% # 100,000 # 編集 # 削除

新しい人を追加

新しい人をクリックすると、フォームがポップアップし、すべての情報を入力し、人をデータベースに追加すると、ajax が情報を返し、人をリストの最後に追加します。ここに問題があります.1つの「サブテーブル」をクリックして人を追加すると、1人が追加されて正しく印刷されますが、2番目の「サブテーブル」に移動して人を追加すると、人が2回追加されます(2つの同じレコードを挿入します)データベースに)、3 番目の「サブテーブル」に人を追加をクリックすると、1 つのレコードが 3 回追加されます... レコードは 1 回だけ追加されます。これが私のjsスクリプトです:

$('.addbtt').on('click', function(){
    value= "";
    document.getElementById("updform").reset();
    var glnumber = $(this).parent().parent().find('#glno').text();
    var objid = glnumber.substring(7,12);
    value += glnumber.substring(10,12);
    if(objid=='51001'){
        $('.modal-title').html("Add person - Full time");
        $('#glnumber').empty().val(glnumber);
    }else if(objid=='51002'){
        $('.modal-title').html("Add person - Part time");
        $('#glnumber').empty().val(glnumber);
    }else if(objid=='51009'){
        $('.modal-title').html("Add person - GA");
        $('#glnumber').empty().val(glnumber);
    }else if(objid=='51010'){
        $('.modal-title').html("Add person - GE");
        $('#glnumber').empty().val(glnumber);
    };

    $('#updform').submit(function(){
        var formData = $(this).serialize();
        $.post('includes/updatesal.php',formData,processData);
        function processData(data){
            if(value == 01){
                $('#addperson1').before(data);
            }else if(value == 02){
                $('#addperson2').before(data);
            }else if(value == 09){
                $('#addperson3').before(data);
            }else if(value == 10){
                $('#addperson4').before(data);
            }else{
                alert("Your are doing something you shouldn't! :)") 
            };
        }; //end of processData
        return false;
    });
});

データベースに2つのレコードも追加されるため、「人を追加するボタン」に問題があると思います。これが私のphp関数です:

$insertSQL1 = "INSERT INTO salaries (gl_number,name,pay_rate,distribution,annual)
                VALUES ('".$glnumber."','".$name."','".$payRate."','".$dist."','".$annual."')";
        $insertSQL1 .= "; SELECT SCOPE_IDENTITY() AS RECORD_ID";    
        $stmt1 = sqlsrv_query(Database::GetInstance()->databaseConnection, $insertSQL1);
        # IF THERE IS AN ERROR
        if(!$stmt1){
            echo "Error";   
        }else{
            $id = Database::GetInstance()->LastInsertId($stmt1);
        }
        # IF ALL QUERIES WERE SUCCSESSFUL, COMMIT THE TRANSACTION, OTHERWISE ROLLBACK
        if($stmt1 && !$errors){
            sqlsrv_commit(Database::GetInstance()->databaseConnection);
            # FREE THE STATEMENT
            Database::GetInstance()->FreeDBStatement($stmt1);

私は今これを1週間理解しようとしています、誰か助けてもらえますか?

4

2 に答える 2

4

この問題は、.submit()イベント ハンドラーがイベント ハンドラーにある.click()ために発生します。そのため、クリックするたびに新しい同一の.submit()ハンドラーを作成しています。

修正するには、.submit()ハンドラーをそこから取り出します。

$('.addbtt').on('click', function(){
    value= "";
    document.getElementById("updform").reset();
    var glnumber = $(this).parent().parent().find('#glno').text();
    var objid = glnumber.substring(7,12);
    value += glnumber.substring(10,12);
    if(objid=='51001'){
        $('.modal-title').html("Add person - Full time");
        $('#glnumber').empty().val(glnumber);
    }else if(objid=='51002'){
        $('.modal-title').html("Add person - Part time");
        $('#glnumber').empty().val(glnumber);
    }else if(objid=='51009'){
        $('.modal-title').html("Add person - GA");
        $('#glnumber').empty().val(glnumber);
    }else if(objid=='51010'){
        $('.modal-title').html("Add person - GE");
        $('#glnumber').empty().val(glnumber);
    };
});

$('#updform').submit(function(){
    var formData = $(this).serialize();
    $.post('includes/updatesal.php',formData,processData);
    function processData(data){
        if(value == 01){
            $('#addperson1').before(data);
        }else if(value == 02){
            $('#addperson2').before(data);
        }else if(value == 09){
            $('#addperson3').before(data);
        }else if(value == 10){
            $('#addperson4').before(data);
        }else{
            alert("Your are doing something you shouldn't! :)") 
        };
    }; //end of processData
    return false;
});
于 2013-10-09T14:33:03.060 に答える
0

また、フォームクリアスクリプトを「サブミットハンドラーも」内に移動できます

// No need following on click handler, if button is submit
$('.addbtt').on('click', function(){

});

$('#updform').submit(function(){
value= "";
    document.getElementById("updform").reset();
    var glnumber = $(this).parent().parent().find('#glno').text();
    var objid = glnumber.substring(7,12);
    value += glnumber.substring(10,12);
    if(objid=='51001'){
        $('.modal-title').html("Add person - Full time");
        $('#glnumber').empty().val(glnumber);
    }else if(objid=='51002'){
        $('.modal-title').html("Add person - Part time");
        $('#glnumber').empty().val(glnumber);
    }else if(objid=='51009'){
        $('.modal-title').html("Add person - GA");
        $('#glnumber').empty().val(glnumber);
    }else if(objid=='51010'){
        $('.modal-title').html("Add person - GE");
        $('#glnumber').empty().val(glnumber);
    };

    var formData = $(this).serialize();
    $.post('includes/updatesal.php',formData,processData);
    function processData(data){
        if(value == 01){
            $('#addperson1').before(data);
        }else if(value == 02){
            $('#addperson2').before(data);
        }else if(value == 09){
            $('#addperson3').before(data);
        }else if(value == 10){
            $('#addperson4').before(data);
        }else{
            alert("Your are doing something you shouldn't! :)") 
        };
    }; //end of processData
    return false;
});
于 2013-10-09T14:37:13.843 に答える