2013-03-22 83 views
-1

我有一個ajax腳本,它會自動發送數據到php,所以我可以將它存儲在mysql中。除了某些東西以外,腳本工作正常。我可以將數據插入到mysql中,但如果數據包含(和[&] [和]字符,將存儲[&]之前的數據,而不是[&]之後的數據。
這裏是一個例子: 我的數據是:---->'這是一隻貓&一隻狗'。 Mysql將存儲「這是一隻貓」,並忽略'&一隻狗' 這是我的代碼:它不與pdo或mysqli。我會盡快改變!mysql不插入[&](AND)字符

<?php 
//connect to db 
$con = mysql_connect("localhost","root",""); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
//select db 
mysql_select_db("database", $con); 

//get post variables from ajax 
$link = $_POST['var1']; 
$name = $_POST['var2']; 
$size = $_POST['var2']; 
$cat = $_POST['var4']; 




//safe from sql injections 
$link = mysql_real_escape_string($link); 
$name = mysql_real_escape_string($name); 
$size = mysql_real_escape_string($size); 
$cat = mysql_real_escape_string($cat); 




//verify url existance 
if (!preg_match("(^https://example\.com(.*))", $link)) { 
    //not valid url 
    mysql_close($con); 
    exit(); 
} 

//check if result already exist 
$check = mysql_query("SELECT link FROM links WHERE link = '{$link}';"); 

if (mysql_num_rows($check) == 0) { 
    // insert if not exist 

    $sql="INSERT INTO links (link, name, size, category) VALUES ('$link','$name','$size','$cat')"; 
    if (!mysql_query($sql,$con)) 
     { 
     die('Error: ' . mysql_error()); 
     } 

    mysql_close($con); 
} 



?> 
+1

閱讀。學習。 http://en.wikipedia.org/wiki/SQL_injection – SecurityMatt 2013-03-22 22:16:29

+0

您是否輸出了示例查詢並直接在數據庫上運行它,以查看結果如何比較? – 2013-03-22 22:17:42

+1

@SecurityMatt他至少會逃避輸入數據,這比在StackOverflow問題中與MySQL相關的PHP的50%相比要好。 – 2013-03-22 22:19:07

回答

2

這聽起來不像服務器端的任何問題,而是如何在客戶端上發出請求。雖然你沒有告訴我們。您需要在字符串上使用encodeURIComponent,其中&符號是ajax請求的一部分,否則&將被視爲單獨的參數。這在PHP端自動解碼。

+0

謝謝。我會盡力編碼!感謝您的幫助! – user1932820 2013-03-22 22:22:55

+0

@ user1932820不要忘記接受有用的答案 – 2013-03-22 22:52:40