Archive for May, 2010

PHP : การใช้งาน stripslashes เมื่อต้องการ “\”

พอดีเจอปัญหาในการทำ Application ตัวหนึ่้งเวลากรอกข้อมูลจากหน้าเว็บ ที่เป็น ฟอร์ม แล้วมีการกรอกตัวอักษร ดังนี้ (อาจมีมากกว่านี้)

"", '', \ 

เวลารับค่าผ่าน การ $_POST หรือ $_GET ระบบจะใส่เครื่องหมาย “\” มาให้อัตโนมัติ จริงๆ เป็นเรื่องที่ดีัี แต่เวลาบันทึกลงฐานข้อมูลก็จะได้เครื่องหมาย “\” ไปด้วย พอดึงข้อมูลมาแสดง ก็จะแสดงไม่ถูกต้อง เช่นเรากรอกข้อมูล

I'm PHP I don't like "" and '' and \

จะถูกแปลงไปเป็น

I\'m PHP I don\'t like \"\" and \'\' and \\

ซึ่งตอนบันทึกก็จะทำการบันทึกข้อมูลแบบนี้ลงไปเลย แล้วเวลาดึงข้อมูลมาแสดงก็จะได้ ข้อมูลแบบนี้มาแสดง โดยเฉพาะถ้ามีการแก้ไข ข้อมูลก็จะยิ่งเติมเครื่องหมาย “\” เข้าไปอีก ตอนแรกจะแก้ปัญหาด้วย htmlentities หรือ htmlspecialchars แต่ว่าใช้ไม่ได้ผล ก็เลยลงเอยด้วย function stripslashes

ข้อมูลจาก
stripslashes
htmlentities
htmlspecialchars

jQuery Plugin : กรอกเฉพาะตัวเลข

ห่างหายไปนานเนื่องจากสถานการณ์การเมือง การงาน (อ้างเล็กน้อย) พอดีมีงานที่ต้องการให้ User กรอกข้อมูลได้เฉพาะตัวเลข และ จัด รูปแบบหลักพันให้เลย (เรียกไม่ค่อยถูก) ซึ่งมันค่อนข้างยากเหมือนกันในการป้องกัน ก็เลยลองๆดู jQuery พระเอกคนเก่งของเรา ซึ่งก็ลองๆเขียน Plugin ขึ้นมาดังนี้

(function($) {
	/** +++++ function formatCurrency +++++ */
	$.fn.formatCurrency = function(options) { 
		var defaults = {
			splitChar : ',',
			allowChar : '0123456789.-',
			splitLen : 3
		};
		
		var opts = $.extend(defaults, options);
		return this.each(function(){
			//When Press Keyboard
			$(this).keypress(function(e){
				//Allow enter, backspace,delete 
				if(e.which == 13 || e.which == 8 || e.which==0) { 
					return true; 
				}
				//Disable ctrl,alt key 
				if(e.ctrlKey || e.altKey) { 
					return false; 
				} 
				
				var ch = String.fromCharCode(e.which);
				if(ch == "-"){
					var value = $(this).val();
					if(value.lastIndexOf("-") > 0) return false;
				}
				return opts.allowChar.indexOf(ch) > -1; 
			});
			//When Up keyboard
			$(this).keyup (function(e){
				var value = $(this).val();
				var subChar = "";
				value = value.replace(/,/gi,"");
				if(value.indexOf("-") >= 0){
					value = value.replace(/-/gi,"");
					subChar = "-";
				}
				//Split Decimals
				var arrs = value.toString().split(".");
				//Split data and reverse
				var revs = arrs[0].split("").reverse().join("");
				var len = revs.length;
				var tmp = "";
				for(i = 0; i < len; i++){
					if(i > 0 && (i%opts.splitLen) == 0){
						tmp += opts.splitChar + revs.charAt(i);
					}else{
						tmp += revs.charAt(i);
					}
				} 
				
				//Split data and reverse back
				tmp = tmp.split("").reverse().join("");
				if(arrs.length > 1 && arrs[1] != undefined){
					tmp += "."+ arrs[1];
					tmp = subChar+tmp;
				}else{
					tmp = subChar+tmp;
				}
				
				$(this).val(tmp);
			});
		});
	};
})(jQuery);

Read more