2016-12-20 10 views
-3

PHPスクリプトに変数を渡すときは、最初にissetかどうかを確認して空白ではないことを確認してください。文字列で、長さが1より大きく、 255(DBのVARCHARフィールド限界)、私はこれを介してそれを実行する:PDOとアポストロフィ=いいえmysql_real_escape_stringですが、ページが壊れます

$f_name= stripslashes(htmlentities($_POST["f_name"], ENT_QUOTES)); 

Iは、次にPDOはf_nameフィールドを更新するための準備使用。私は、ページの上に置くためにそれをフェッチするとき、私はそれが好きデコード:フェッチして、入力フィールドにそれを解析開始AJAX呼び出しにJSON配列で

html_entity_decode($row["f_name"], ENT_QUOTES); 

戻り、それを。

アポストロフィでf_nameフィールドが保存されていれば、私は試したポイントまですべて機能し、JavaScriptを使用して入力フィールドに入力してください。それはアポストロフィとその後ろのものを切り捨てるだけです。これをどうやって止めることができますか?

var response = "<input type='text' id='f_name' value='"+rdata.patient[0].f_name+"' onkeydown='onedit(1)' maxlength='255' />"; 
+2

"すべてが正しく機能しているので、入力欄にjavascriptで入力してください" - そのビットのコードを表示してください。 – Quentin

+1

"htmlentities/html_entity_decode" - データベースに入れる前にHTML文書に入れるのが安全です(なぜデータベースはHTML文書ではないのですか?)そして、あなたは安全でない*文書をHTML文書に入れる前にあなたはそれをHTML文書に入れます。これは意味をなさない。 – Quentin

+0

"stripslashes" - マジッククォートがオンになっていない限り、これは有害です(マジッククォートがひどいので、そうしないでください)。 – Quentin

答えて

0
value='"+rdata.patient[0].f_name+"' 

あなたは各属性の値を区切るために'文字を使用しています。データに'文字がある場合、属性値は終了します。代わりに&apos;と表現する必要があります。

ストリングを一緒に叩くのではなく、標準のDOMを使用してHTMLを生成する方が良い(より安全で読みやすい)アプローチです。

var input = document.createElement("input"); 
    input.id = "f_name"; 
    input.value = rdata.patient[0].f_name; 
    input.addEventListener("keydown", function() { onedit(1); }); 
    input.maxlength = 255; 
関連する問題