2017-05-03 105 views
0

所以我發送一個字符串與JavaScript到PHP頁面:一個字符串以%fusionning的第一個字符

if(cp.value!=''){ 
    s+=cp.name +" LIKE '%"+ cp.value +"%'"; 
    console.log(s); 

    if(sec.value!=''){ 
     s+=" AND "+sec.name+" LIKE '%"+ sec.value +"%'"; 
     console.log(s); 

    } 
} 
else{ 
    if(sec.value!=''){disappear 
     s+=sec.name+" LIKE '%"+ sec.value +"%'"; 
    } 
} 

console.log(s); 
if(s.length!=0){ 
    var connect = new XMLHttpRequest(); 
    connect.onreadystatechange=function(){ 
     if (connect.readyState==4 && connect.status==200){ 
      var resu=connect.responseText; 
      console.log(resu); 
      var tab=document.getElementById("main_tab"); 
      tab.innerHTML=resu; 


     } 
    }; 
    connect.open("POST","../../Controller/stage.php",false); 
    connect.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
    connect.send("s="+s); 

} 

}

發送的字符串是爲例:

CP_Stage LIKE '%90%' AND secteur_stage LIKE '%AIT%'

但是,當我打印reques t在php頁面我有這樣的:

SELECT * FROM Stage WHERE CP_Stage LIKE' %'AND secteur_stage LIKE'%ait%';

我不知道爲什麼我的第一個數字與第一個%消失。 如果有人有一個想法,這將是可怕的,謝謝!

+1

它正在編碼。爲什麼不發送'sec.value'並在另一頁上構建你的LIKE呢? –

+2

你爲什麼在javascript中構建MySQL查詢?每個人都可以更改查詢並執行sql注入。它不保存。不要這樣做。 – Scriptman

+0

在不在客戶端上的服務器上構建查詢。 –

回答

1

百分號是一個特殊的字符。任何特殊字符,如%,&,?等等需要被編碼。您的「%90」轉換爲Ascii-Value。你必須用encodeURIComponent編碼這些值。

s += cp.name + " LIKE '" + encodeURIComponent("%" + cp.value + "%") + "'"; 

請注意,encodeURIComponent不會轉義'字符。如果您的cp.value有',您必須將其替換爲其編碼值:%27

順便說一句..從客戶端發送mySQL查詢是一個壞主意 - 這是一個主要的安全漏洞。只發送值並在服務器端構建查詢。

+0

謝謝你的解決方案,但是我會在服務器端建立查詢。 –

相關問題