2012-05-17 42 views
0

嗨,我有這個簡單的代碼:阿賈克斯成功,但不發送POST數據

var datastring="123"; 
$.ajax({ 
     url: 'actualizarimagen.php', 
     type: 'post', 
     dataType: 'text', 
     data: datastring, 
     cache: false, 
     success: function(response){ 
      $('.msg1').html(response); 

     }, 
     error: function(response){ 
      $('.msg1').html(response); 
     } 

    }); 

而且在actualizarimagen.php:

$desc_larga = print('<pre>') & print_R($_POST) & print('</pre>'); 
$insertSQL = sprintf("INSERT INTO prueba (texto) VALUES ($desc_larga)"); 

我獲得成功的消息,但在數據庫中總是保存1 。我試着改變一切,dataType,成功,錯誤,完整的功能,但它不起作用。我正在尋找,但任何答案都無法幫助我。

謝謝。

編輯:添加回復

+0

的'datastring'只是一個值,不應該是一個鍵/值對嗎?如果沒有密鑰,'$ _POST'如何包含該值?或者如果只給一把鑰匙,它將包含什麼價值?另外,當'print_R()'給出一個像'$ _POST'這樣的鍵/值對數組時,它會做什麼? – David

+0

如果修復了輸入,那麼輸出到瀏覽器就容易受到XSS的影響,並且輸出到數據庫容易受到SQL注入的影響。 – Quentin

+0

我應該如何改變它來停止sql注入?用PHP或JS?謝謝 –

回答

5

datastring應該包含編碼爲application/x-www-form-urlencoded

數據,例如:var datastring="foo=123";

這是更好不要將字符串傳遞給jQue賴所有。傳遞一個對象並讓它爲你處理編碼。

例如爲:data: { "foo": "123" }

+0

是的,那就是問題所在。謝謝。我需要等待2分鐘才能投票... –

1

發送數據,有格式要遵循。 像

var datastring="var1=123&var2=abcd"; 

var datastring=[{name:'var1',value:123},{name:'var2',value:'abcd'}]; 

第二格式(對象名稱值的陣列)是像<input type="text" name="var1" value="123">其中的HTML輸入元素具有名稱和值被張貼。

然後,您可以得到由值:

$_POST['var1'] 

$_POST['var2'] 
+0

包含JavaScript對象文字的字符串不是合適的格式。 – Quentin

+0

@Quentin但[此鏈接](http://api.jquery.com/serializeArray/)告訴它是格式 –

0

在Ajax調用:

data: my_var : datastring, 
在php

$desc_larga = '<pre>'.$_POST['my_var'].'</pre>'; 
+0

'data:my_var:datastring,'會產生語法錯誤。 – Quentin

1

數據 對象,字符串

要發送到服務器的數據。它被轉換成查詢字符串,如果還不是字符串的話。它附加到GET請求的url。請參閱processData選項以防止此自動處理。對象必須是鍵/值對。如果value是一個數組,則jQuery會根據傳統設置的值(如下所述)使用相同的鍵序列化多個值。

你只是發送了123到服務器。

它應該是這樣的

var datastring="myField=123"; 

var datastring = {"myField" : 123 }; 

,並與PHP,你會讀它

$_POST["myField"] 
0

嘗試更換

type: "post", 

type: "POST", 

和你datastring應該是這樣的:

single=Single&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio1 

如下解釋:

http://api.jquery.com/serialize/

0
var datastring = "123"; 
$.ajax({ 
    url: 'actualizarimagen.php', 
    type: 'post', 
    dataType: 'text', 
    data: {data : datastring}, 
    cache: false 
}).always(function(response) { 
    $('.msg1').html(response); 
}); 

而且在actualizarimagen.php:

$desc_larga = '<pre>'.$_POST['data'].'</pre>'; 
$query = '"INSERT INTO prueba (texto) VALUES ('.$desc_larga.')"'; 
1

一個例子來實現這一點很容易可以是:

JS:

var datastring="123"; 

$.post('actualizarimagen.php', { datastring:datastring }, function(data){ 
    if(data != 0){ 
     $('.msg1').html('correcto'); 
    } else { 
     $('.msg1').html('error'); 
    } 
}); 

在你actualizarimagen.php:

if($_POST() && isset($_POST['datastring'])){ 

/* Connect to DB */ 
$link = mysql_connect('server', 'user', 'pwd'); 
if (!$link) { 
    // No connection 
    print(0); 
    exit(); 
} 

$db = mysql_select_db('db', $link); 
if (!$db) { 
    // DB selection error 
    print(0); 
    exit(); 
} 

/* Sanitize the value */ 
$datastring = mysql_real_escape_string($_POST['datastring']); 

// I don't understand here what you tried to do with $dec_larga but this is what I thought 
$desc_larga = "<pre>".$datastring."</pre>"; 

/* Insert to DB */ 
$sql = "INSERT INTO prueba (texto) VALUES ('$desc_larga')"; 

if(mysql_query($sql,$link)){ 
    // Everything is Ok at this point 
    print(1); 
} else { 
    // Error happened in your SQL query 
    print(0); 
} 

}