0

次のコードを見てください。関数で「サニタリー」ステップを実行しない場合、コードは文字列値を置き換えません。

誰かが私がこれを理解するのを手伝ってくれる?

完全なコード:

<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>

なぜ私がそれらの衛生的なステップを実行する必要があるのか​​理解するのを手伝ってください??? 試行錯誤の方法で解決策を見つけました。

4

2 に答える 2

1

私のアドバイスは次のとおりです。そのコードをすべて捨ててください。

通常の formsubmit または ajax 呼び出しを介して、クライアントからサーバーにデータを渡します。それらをサーバー側で処理します。

そして、常にルール番号 1 を覚えておいてください。

1) すべてのユーザーが自分の思い通りに振る舞うとは決して信じられません。

これが、決して SQL クライアントサイドを作成しない理由です!

于 2012-07-11T07:43:07.853 に答える
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

于 2012-07-20T07:23:17.537 に答える