2012-07-11 50 views
0

請看下面的代碼,如果我不在函數中執行「衛生」步驟,代碼不會替換字符串值。字符串替換不能在javascript中使用(使用雙引號)

有人能幫我理解嗎?

完整代碼:

<script type="text/javascript"> 
function replaceString(orgStr,oldStr,newStr){ 

//############# Sanitary Steps #############// 
oldStr = oldStr .replace(/[ ]+/g,"$"); 
oldStr = oldStr .replace(/[$]+/g," "); 
orgStr = orgStr .replace(/[ ]+/g,"$"); 
orgStr = orgStr .replace(/[$]+/g," "); 
newStr = newStr .replace(/[ ]+/g,"$"); 
newStr = newStr .replace(/[$]+/g," "); 
//############# Sanitary Steps #############// 

orgStr = orgStr.replace(oldStr,newStr); 
if(orgStr.indexOf(oldStr) != -1){ 
orgStr = replaceString(orgStr,oldStr,newStr) 
} 
return orgStr; 
} 
var fields = ['"Employee Expense Facts"."Total Expense"','"Expense Amount by Expense Type Facts"."Airfare Expense Amount"']; 
var selectedField = 0; 
var selectedField = 0; 
var qry = 'SELECT rcount(1) s_0, "Employee Expenses"."Time"."Date" s_1, "Employee Expenses"."Employee Expense Facts"."Total Expense" s_2 FROM "Employee Expenses" WHERE ("Employee Expense Facts"."Total Expense" IS NOT NULL) ORDER BY 1, 2 ASC NULLS LAST WHERE ("Employee Expense Facts"."Total Expense" IS NOT NULL) ORDER BY 1, 2 ASC NULLS LAST'; 
qry = qry .replace(/[\n\t\r]+/g," "); 
var qry2 = replaceString(qry,""+fields[0],""+fields[1]); 
console.log(qry2); 

</script> 

幫助我理解了爲什麼我需要執行這些步驟衛浴??? 我通過試錯法找到了解決方案。

+3

呃哦,SQL - Javascript中的查詢... meep meep meep ...您已打開自毀模式。 – Christoph 2012-07-11 07:36:15

+1

你最初想做什麼?另外,您似乎在瀏覽器中構建SQL語句,這可能會在服務器上執行,這是一個巨大的禁忌。 – 2012-07-11 07:36:34

回答

1

我的建議是:扔掉所有的代碼!

現在重新開始,通過正常的formsubmit或ajax調用將數據從客戶端傳遞到服務器。現在處理它們的服務器端。

永遠記住排除一個數字:

1)你永遠不能信任所有用戶的行爲你想要的方式。

這就是爲什麼永遠不會創建您的SQL客戶端!

+0

我正在使用OBIEE webservices來獲取SQL並使用固定的邏輯來更改它們。用戶甚至無法以任何方式查看SQL或進行修改。 – aodz 2012-07-20 07:17:28

+0

這就是你可能會想到的,但每個有經驗的用戶都可以很容易地僞造這些請求,並按照他們想要的方式更改SQL。 – Christoph 2012-07-20 07:27:30

0

的問題是在SQL本身:

SELECT rcount(1) s_0, 
     "Employee Expenses"."Time"."Date" s_1, 
     "Employee Expenses"."Employee Expense Facts"."Total Expense" s_2 
FROM "Employee Expenses" 
WHERE ("Employee Expense Facts"."Total Expense" IS NOT NULL) 
     ORDER BY 1, 2 ASC NULLS LAST 
WHERE ("Employee Expense Facts"."Total Expense" IS NOT NULL) 
     ORDER BY 1, 2 ASC NULLS LAST 

我發現有這甚至使用轉義字符後不會被替換雙引號。我曾嘗試更換(「)有特殊字符,然後執行字符串替換,但沒能做到這一點成功。

請告訴我驚奇的是,如果你創建的本地HTML文件,此作品,未經衛生代碼此功能。但是當我上傳相同的代碼在服務器上它不起作用,因爲我不得不把它放在衛生線

如果有人知道爲什麼造成這種情況請讓我知道:)

謝謝 vx

+0

你可以發佈這個作爲另一個問題,以獲得一些有用的答案。用戶很可能不會用兩個(接受的)答案來訪問一個問題。 – Christoph 2012-07-20 07:29:51