2013-04-27 22 views
1

我得到了一個簡單的表單,它使用ajax發送大量數據。我正在創建一個小型CMS,您可以在其中創建博客文章。通過AJAX使用GET發送文本的很多

的JavaScript看起來像這樣的博客:

function SaveBlog() 
    { 
     document.getElementById("txtHint").innerHTML= 'Saving...'; 
     if(window.XMLHttpRequest) 
     { 
      xmlhttp = new XMLHttpRequest(); 
     } 
      else 
     { 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange=function() 
     { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) 
      { 
       document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
      } 
     } 
     var TitleVar = document.getElementById('title').value; 
     var editorText = CKEDITOR.instances.blogcontent.getData(); 
     xmlhttp.open("GET","saveblog.php?id="+<?php echo $_GET['update']; ?> + "&title=" + TitleVar + "&context=" + encodeURIComponent(editorText),true); 
     xmlhttp.send(); 
    } 

這背後

$ID = $_GET['id']; 
$con = mysql_connect("", "", ""); 
mysql_select_db("FP", $con); 
$Title = $_GET['title']; 
$Context = mysql_real_escape_string($_GET['context']); 
mysql_query("UPDATE Blog SET BlogTitle='$Title', Entry='$Context' WHERE Identifier='$ID'"); 
//echo "ID: " . $_GET['id'] . " Title: " . $_GET['title'] . " Context: " . $_GET['context']; 
echo '<b>Last Save: </b>' . date("F j, Y, g:i:s a"); 

一切正常,當我只喜歡送達到約2000個字符後,PHP腳本,它只是說「保存...」,沒有別的。

+0

瀏覽器對URL有內置的長度限制。您不能將它們用於任意長度的數據傳輸。正如你發現的那樣,2000字符是你特定瀏覽器的限制。使用POST代替,這沒有實際的限制。你的SQL也容易受到SQL注入攻擊的影響 - 你逃避了上下文,但是** NOT **'id'或'title'。你已經用塑料布鎖住了你的銀行保險庫。 – 2013-04-27 21:38:51

回答

3

您正在使用GET請求,這意味着您可能在URI長度上在Web服務器上遇到某種限制。 (請參閱:414請求 - URI太大)

您應該使用POST,而您的GET變量'title'容易受到SQL注入攻擊,您應該以與變量'context'相同的方式將其轉義

+0

我會在今天晚些時候嘗試,並回復您的結果,謝謝:D – Jazerix 2013-04-28 08:39:12

3

對於發送大量有效載荷的數據,您應該使用POST請求 - 而不是GET請求。 將其更改爲POST請求