2016-07-20 57 views
0

在下面的函數中我有兩個post請求。一個用於在數據庫中插入值(submit.php),另一個用於基於businessid(edit.php)編輯數據庫中的現有值。但是,該腳本僅執行第一部分。也就是說,當選擇「keuze」並且點擊提交時,該腳本很好地插入到數據庫中。但是,如果選擇「keuze」以外的其他選項並單擊「提交」,腳本不會編輯數據庫中的記錄。我能做些什麼來解決這個問題?jquery ajax插入和編輯

submitformfunction: function(){ 

    $(document).on('submit', '#form', function(){ 

     var data = $(this).serialize(); 
     var target = $('#busselect option:selected').val(); 
     var businessid = $('#busselect').children(":selected").attr("id"); 

     if(target == 'keuze'){ 

      $.ajax({ 

       type : 'POST', 
       url : 'submit.php', 
       data : data, 
       success : function(data) 
        { 
         alert('Company added'); 
        }, 
       error: function(jqXhr, textStatus, errorThrown){ 
        console.log(errorThrown); 
       } 
      }); 

     } 
     else 
     { 

      $.ajax({ 

       type : 'POST', 
       url : 'edit.php', 
       data : businessid+data, 
       success : function(data) 
        { 
         alert('Company modified'); 
        }, 
       error: function(jqXhr, textStatus, errorThrown){ 
        console.log(errorThrown); 
       } 
      }); 
     } 

    }); 

}, 

submit.php:

<?php 

$mysqli = new mysqli("localhost", "root", "", "brandveiligheid"); 

if ($mysqli->connect_errno) { 
    printf("Connect failed: %s\n", $mysqli->connect_error); 
    exit(); 
} 

if($_POST) 
{ 

    $naam = addslashes(htmlentities($_POST['uitgevoerd_door_naam'])); 


    $mysqli->query("INSERT INTO form (uitgevoerd_door_naam) 
    VALUES ('$naam')"); 

} 

mysqli_close($mysqli); 

?> 

edit.php:

<?php 

$mysqli = new mysqli("localhost", "root", "", "brandveiligheid"); 

if ($mysqli->connect_errno) { 
    printf("Connect failed: %s\n", $mysqli->connect_error); 
    exit(); 
} 

if($_POST) 
{ 

    $naam = addslashes(htmlentities($_POST['uitgevoerd_door_naam'])); 


    $mysqli->query("UPDATE form SET uitgevoerd_door_naam='$naam' WHERE id='$_POST[business_id]'"); 

} 

mysqli_close($mysqli); 

?> 
+0

你說過「不更新」。 'edit.php'文件是否觸發?您是否使用過瀏覽器的開發人員「網絡」選項卡來排除故障? AJAX呼叫會熄滅嗎? –

+0

你很容易受到[sql注入攻擊](http://bobby-tables.com)的影響,並且你的編輯ajax調用失敗,因爲你正在傳遞'test + businessid'。 'test'似乎並不存在於你的代碼中,並且會產生一個數字/字符串,PHP不會將其識別爲'key = value'表單提交,而將$ _POST留空。 –

+0

僅供參考,好的工作格式化您的代碼 - 它看起來不錯!你可能會考慮三件事情:雙線飼料只是創造開放空間,所以刪除雙線飼料 - 讓你的'if(){'格式一致 - 在一些地方它是在同一條線上,在一些地方'''本身就是一行 - 最後,不要在PHP文件的末尾使用'?>'。現在認爲最好的做法是在php文件末尾省略這些。 –

回答

0

似乎有查詢的問題,如 '$ _ POST [business_id]' 可以被假定爲varchar,而id的數據類型必須在數據庫中爲int。在下面嘗試;

"UPDATE form SET uitgevoerd_door_naam='$naam' WHERE id=addslashes(htmlentities($_POST[business_id]))" 

也總是保持您的查詢安全;)。

+0

Thx用於表示addslashes和htmlentities :)的序列化表單數據。但是,我試過你的解決方案,我仍然無法編輯。 – user2237168

+0

addslashes(htmlentites(...))完全不適合逃避這一點。你應該使用準備好的語句,但更快的解決方法是:''更新形式SET uitgevoerd_door_naam ='$ naam'WHERE id ='「。 $ mysqli-> real_escape_string($ _ POST ['business_id'])。「'」'' 或者,如果'id'是一個int列,則使用'intval'而不是'$ mysqli-> real_escape_string'。 – Keiji

-1

做幾步,讓我知道你會得到什麼, 1 edit.php

if($_POST) 
{ 

    $naam = addslashes(htmlentities($_POST['uitgevoerd_door_naam'])); 

echo $query = "UPDATE form SET uitgevoerd_door_naam='$naam' WHERE id='$_POST[business_id]'"; 

    $mysqli->query($query); 

} 
  • 而且在JS: 其他 {

    $.ajax({ 
    
         type : 'POST', 
         url : 'edit.php', 
         data : test+businessid, 
         success : function(test) 
          { 
           alert(test); 
           alert('Company modified'); 
          }, 
         error: function(jqXhr, textStatus, errorThrown){ 
          console.log(errorThrown); 
         } 
        }); 
    } 
    
  • 讓我知道你得到了什麼警報。

    +0

    也許一個非常愚蠢的問題,但我需要做什麼才能看到在一個警報回聲的輸出? – user2237168

    +0

    只需使用上面的代碼並編輯您的條目。 – RahulN