bankkungz
สมุนแก๊งเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 948
|
 |
« เมื่อ: 04 ธันวาคม 2007, 23:17:56 » |
|
ขอถามตามนี้เลยนะครับ 1.เวลาผมทำฟอร์มเขียนข้อความ (เหมือนกับที่เขียนตอบกระทู้นี้แหละ) จะทำอย่างไรให้เวลาเรากด Enter แล้วขึ้นบรรทัดใหม่อ่ะครับ มันแสดงผลตอนดึงออกมาจาก sql ด้วยอ่ะครับ จะเขียนคิปไงดี (เพราะเวลาผมลองพิมข้อความแล้ว ลองขึ้นบรรทัดใหม่ ไอ sql มันไม่ขึ้นให้ผมอ่ะ มันเรียงยาวเป็นพรืดๆเลย) 2.ต่อเนื่องมาจากกระทู้ "การแทนคำ" ของผมเองที่เคยตั้งถามไปก่อนหน้านี้ อยากทราบว่าเวลาผมจะทำปุ่มแบบ SMF ที่กดตัว B แล้วมีโค๊ต [b ] กับ [/b ] ขึ้นอ่ะครับ จะให้ไอตัว curcer ที่ไว้พิมอ่ะ มันอยุ่ตรงกลางโค๊ตดังกล่าวอ่ะครับ (เพราะเวลาพิมจะได้สะดวก) ขอบคุนครับ ปล. ข้อ 2 ผมไม่แน่ใจว่าต้องใช้ java มาเกี่ยวหรือป่าว ผมว่าต้องใช้แน่ๆเลย ยังไงๆก้อช่วยทีนะครับ งมมานานแล้ว ฮือๆ 
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
payu
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 125
ออฟไลน์
กระทู้: 1,881
|
 |
« ตอบ #1 เมื่อ: 04 ธันวาคม 2007, 23:32:30 » |
|
1.ตอน post ให้เก็บรหัส \n จาก textarea ลง db ครับ แล้วตอนอ่านจาก db มาแสดงใช้ function nl2br() ครับ 2.ใช้ javascript ครับ แกะมาจาก smf นี่แหละ function surroundText(text1, text2, textarea) { // Can a text range be created? if (typeof(textarea.caretPos) != "undefined" && textarea.createTextRange) { var caretPos = textarea.caretPos, temp_length = caretPos.text.length;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text1 + caretPos.text + text2 + ' ' : text1 + caretPos.text + text2;
if (temp_length == 0) { caretPos.moveStart("character", -text2.length); caretPos.moveEnd("character", -text2.length); caretPos.select(); } else textarea.focus(caretPos); } // Mozilla text range wrap. else if (typeof(textarea.selectionStart) != "undefined") { var begin = textarea.value.substr(0, textarea.selectionStart); var selection = textarea.value.substr(textarea.selectionStart, textarea.selectionEnd - textarea.selectionStart); var end = textarea.value.substr(textarea.selectionEnd); var newCursorPos = textarea.selectionStart; var scrollPos = textarea.scrollTop;
textarea.value = begin + text1 + selection + text2 + end;
if (textarea.setSelectionRange) { if (selection.length == 0) textarea.setSelectionRange(newCursorPos + text1.length, newCursorPos + text1.length); else textarea.setSelectionRange(newCursorPos, newCursorPos + text1.length + selection.length + text2.length); textarea.focus(); } textarea.scrollTop = scrollPos; } // Just put them on the end, then. else { textarea.value += text1 + text2; textarea.focus(textarea.value.length - 1); } }
วิธีใช้ surroundText('[b ]', '[/b ]', textarea_object)
|
|
|
|
« แก้ไขครั้งสุดท้าย: 04 ธันวาคม 2007, 23:35:17 โดย payu »
|
บันทึกการเข้า
|
|
|
|
bankkungz
สมุนแก๊งเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 948
|
 |
« ตอบ #2 เมื่อ: 04 ธันวาคม 2007, 23:37:27 » |
|
เด๋วจะลองดูครับ แง้วๆ 
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
bankkungz
สมุนแก๊งเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 948
|
 |
« ตอบ #3 เมื่อ: 04 ธันวาคม 2007, 23:43:50 » |
|
ข้อ 1 นะครับ จาก $ms=wordwrap($ms,100,"\n",1);
ใช้แบบนี้หรือป่าวครับ การเก็บ \n ลง sql ก้อคือดึงข้อความมาจากฟอร์ม กำหนดเป็น $ms แล้วก้อมาใส่ฟังชั่น wordwrap() เหมือนในโค๊ตป่าว แล้วค่อยใส่ sql อีกที แง้วๆ
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 321
ออฟไลน์
กระทู้: 12,459
|
 |
« ตอบ #4 เมื่อ: 05 ธันวาคม 2007, 11:06:55 » |
|
ข้อ 1 นะครับ จาก $ms=wordwrap($ms,100,"\n",1);
ใช้แบบนี้หรือป่าวครับ การเก็บ \n ลง sql ก้อคือดึงข้อความมาจากฟอร์ม กำหนดเป็น $ms แล้วก้อมาใส่ฟังชั่น wordwrap() เหมือนในโค๊ตป่าว แล้วค่อยใส่ sql อีกที แง้วๆ ไม่ครับ ผมขออธิบายให้ฟังแทนละกัน คือปกติแบบฟอร์มเราจะใช้ <textarea> อยู่แล้วใช่ปะครับ ทีนี้ textarea มันรองรับค่าแบบหลายบรรทัดได้ เมื่อเวลามีการส่งค่าฟอร์ม ค่าที่มันบอกว่าขึ้นบรรทัดใหม่คือ \n ครับ หรือง่ายๆ คือมันมี \n อยู่แล้ว ดังนั้นเวลาเก็บค่าก็เก็บไปปกติแหละครับ \n มันอยู่ในนั้นอยู่แล้ว แต่พอเวลาแสดงผล ค่อยใช้ nl2br ช่วยเปลี่ยน \n เป็น <br/> ครับ ปล. อย่าลืมใช้ mysql_escape_string เพื่อความปลอดภัยด้วยนะครับ
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
thenetxx
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 41
ออฟไลน์
กระทู้: 1,979
|
 |
« ตอบ #5 เมื่อ: 05 ธันวาคม 2007, 12:49:44 » |
|
^___^ ตามด้านบนครับ
$txt = nl2br($txt);
|
|
|
|
|
บันทึกการเข้า
|
Develop site but can't develop life ASIA 
|
|
|
bankkungz
สมุนแก๊งเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 948
|
 |
« ตอบ #6 เมื่อ: 05 ธันวาคม 2007, 22:10:31 » |
|
ก้อหมายความว่า
ดึงข้อความออกมาจาก sql แล้ว กำหนดตัวแปลซะ
แล้วเอามาใส่ฟังชั่น
แล้วก้อค่อย echo ออกมา ใช่มะครับ
แล้ว
mysql_escape_string
คืออารายครับ
(อาจจะโง่ไปหน่อยนะครับ)
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 321
ออฟไลน์
กระทู้: 12,459
|
 |
« ตอบ #7 เมื่อ: 05 ธันวาคม 2007, 22:30:33 » |
|
ผมบอกผิด จริงๆ ควรใช้ mysql_real_escape_string() ส่วนความสามารถก็.. mysql_query("insert into table(id, text) values('".mysql_real_escape_string($id)."', '".mysql_real_escape_string($text)."')");
การเอาค่าจากตัวแปรไปใส่ mysql กรุณาคร่อมด้วย function mysql_real_escape_string ทุกครั้ง 1. รันได้ชัวร์ 2. ป้องกัน sql injection (hack ฐานข้อมูล) ได้ด้วย
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
bankkungz
สมุนแก๊งเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 948
|
 |
« ตอบ #8 เมื่อ: 05 ธันวาคม 2007, 22:34:49 » |
|
ผมบอกผิด จริงๆ ควรใช้ mysql_real_escape_string() ส่วนความสามารถก็.. mysql_query("insert into table(id, text) values('".mysql_real_escape_string($id)."', '".mysql_real_escape_string($text)."')");
การเอาค่าจากตัวแปรไปใส่ mysql กรุณาคร่อมด้วย function mysql_real_escape_string ทุกครั้ง 1. รันได้ชัวร์ 2. ป้องกัน sql injection (hack ฐานข้อมูล) ได้ด้วย
กำหนดตอนเก็บใส่ sql เลยหรอครับ mysql_query("insert into table(id, text) values('".mysql_real_escape_string($id)."', '".mysql_real_escape_string($text)."')");
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
พลังน้ำใจ: 321
ออฟไลน์
กระทู้: 12,459
|
 |
« ตอบ #9 เมื่อ: 05 ธันวาคม 2007, 22:36:39 » |
|
ใช่ครับ มันใช้ช่วยชีวิตได้ ไม่งั้นโดนแน่ๆ 
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
icez
Verified Seller
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 296
ออฟไลน์
กระทู้: 2,876
|
 |
« ตอบ #10 เมื่อ: 06 ธันวาคม 2007, 02:55:01 » |
|
mysql_escape_string ก็ใช้ได้ครับ ความแตกต่างของ 2 function นี้อยู่ที่ mysql_escape นั่น php ทำงานเอง ส่วน mysql real escape ตัว php จะไปเรียก library ของ mysql ให้ทำงานให้ ซึ่ง algorithm ก็ตัวเดียวกันนั่นแหละ
|
|
|
|
|
บันทึกการเข้า
|
THZHost SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ
|
|
|
thenetxx
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 41
ออฟไลน์
กระทู้: 1,979
|
 |
« ตอบ #11 เมื่อ: 12 ธันวาคม 2007, 21:41:54 » |
|
mysql_escape_string ก็ใช้ได้ครับ ความแตกต่างของ 2 function นี้อยู่ที่ mysql_escape นั่น php ทำงานเอง ส่วน mysql real escape ตัว php จะไปเรียก library ของ mysql ให้ทำงานให้ ซึ่ง algorithm ก็ตัวเดียวกันนั่นแหละ
เก็บเกี่ยว ๆ ๆ เพิ่งรู้ครับ : 
|
|
|
|
|
บันทึกการเข้า
|
Develop site but can't develop life ASIA 
|
|
|
bankkungz
สมุนแก๊งเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 948
|
 |
« ตอบ #12 เมื่อ: 13 มกราคม 2008, 16:51:29 » |
|
1.ตอน post ให้เก็บรหัส \n จาก textarea ลง db ครับ แล้วตอนอ่านจาก db มาแสดงใช้ function nl2br() ครับ 2.ใช้ javascript ครับ แกะมาจาก smf นี่แหละ function surroundText(text1, text2, textarea) { // Can a text range be created? if (typeof(textarea.caretPos) != "undefined" && textarea.createTextRange) { var caretPos = textarea.caretPos, temp_length = caretPos.text.length;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text1 + caretPos.text + text2 + ' ' : text1 + caretPos.text + text2;
if (temp_length == 0) { caretPos.moveStart("character", -text2.length); caretPos.moveEnd("character", -text2.length); caretPos.select(); } else textarea.focus(caretPos); } // Mozilla text range wrap. else if (typeof(textarea.selectionStart) != "undefined") { var begin = textarea.value.substr(0, textarea.selectionStart); var selection = textarea.value.substr(textarea.selectionStart, textarea.selectionEnd - textarea.selectionStart); var end = textarea.value.substr(textarea.selectionEnd); var newCursorPos = textarea.selectionStart; var scrollPos = textarea.scrollTop;
textarea.value = begin + text1 + selection + text2 + end;
if (textarea.setSelectionRange) { if (selection.length == 0) textarea.setSelectionRange(newCursorPos + text1.length, newCursorPos + text1.length); else textarea.setSelectionRange(newCursorPos, newCursorPos + text1.length + selection.length + text2.length); textarea.focus(); } textarea.scrollTop = scrollPos; } // Just put them on the end, then. else { textarea.value += text1 + text2; textarea.focus(textarea.value.length - 1); } }
วิธีใช้ surroundText('[b ]', '[/b ]', textarea_object) ไอตรงนี้อ่ะ วิธีใช้ surroundText('[b ]', '[/b ]', textarea_object) ใส่ตรงไหนหรอครับ ตรงลิ้งเลยหรอ ผมลองแล้วไม่ได้ ใส่ javascript: ต่อข้างหน้า surroundText แล้วก้อไม่ได้ครับ ปล.ต้องกำหนดชื่อของ textarea หรือป่าว หรือยังไงบอกทีนะครับ
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
payu
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 125
ออฟไลน์
กระทู้: 1,881
|
 |
« ตอบ #13 เมื่อ: 13 มกราคม 2008, 17:09:34 » |
|
ไอตรงนี้อ่ะ
วิธีใช้ surroundText('[b ]', '[/b ]', textarea_object)
ใส่ตรงไหนหรอครับ
ตรงลิ้งเลยหรอ
ผมลองแล้วไม่ได้
ใส่ javascript: ต่อข้างหน้า surroundText แล้วก้อไม่ได้ครับ
ปล.ต้องกำหนดชื่อของ textarea หรือป่าว
หรือยังไงบอกทีนะครับ
ใช้แบบเดียวกับ smf เลยครับ <a href="javascript:void(0);" onclick="surroundText('[b]', '[/b]', document.forms.postmodify.message); return false;"><img ...></a>
<img > คือ image ปุ่ม B (bold) document.forms.postmodify.message คือ textarea object
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
bankkungz
สมุนแก๊งเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 948
|
 |
« ตอบ #14 เมื่อ: 13 มกราคม 2008, 17:14:31 » |
|
เอ่อ...
ผมลองใส่ลิ้งค์อันนี้ไปแล้ว
ปรากฏว่าก้อไม่มีอะไรเกิดขึ้นอ่ะครับ
โดย textarae ของผม name="a" ครับ
ต้องทำการแก้ตรงไหนหรือป่าวครับ
ไม่งั้นมันจะขึ้นใน textare ของผมหรอครับ
(ชักงงๆ)
อิอิ
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
payu
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 125
ออฟไลน์
กระทู้: 1,881
|
 |
« ตอบ #15 เมื่อ: 13 มกราคม 2008, 17:42:45 » |
|
<script language="javascript"> function surroundText(....) { } </script> <body> <a href="javascript:void(0);" onclick="surroundText('[b]', '[/b]', document.forms.f.a); return false;">bold</a> <form name="f" id="f" ...> <textarea name="a"> ...</textarea> </form>
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
bankkungz
สมุนแก๊งเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 948
|
 |
« ตอบ #16 เมื่อ: 13 มกราคม 2008, 17:59:39 » |
|
ขอบคุณมากๆๆๆๆเลยครับ
ไม่รู้จะสรรหาคำอะไรมาขอบคุณแล้วเนี่ย
ีดีใจๆมากๆเลย
อิอิ
*-*
ปล.ถ้าขอถามอีกข้อนึงจะโกดมั๊ย อิอิ (อ่าาาส์)
ใน textarea ถ้าพิมพ์ยาวๆๆๆๆมันก้อจะมี scrollbar ใช่มั๊ยครับ (ใน textarea)
แล้วพอ echo ออกมาบน div แล้วมันเกินกรอบออกมาอ่ะครับ
แบบว่า....
ถ้าผมจะทำแบบ smf คือเวลาพิมยาวๆๆ แล้วพอ แสดงบน div หรืออะไรก้อตามแต่ มันจะมี scroll bar ขึ้นอ่ะ (พี่ลองพิมยาวๆๆๆๆมากๆๆๆ ใน 1 บรรทัดอ่ะ แล้วลองแสดงตัวอย่างดู มันจะมี scrollbar ขึ้นครับ)
หรือว่าพี่มีแนวทางอย่างอื่นบ้างครับ
มันเกิดออกมาจาก div แล้วมันลอยๆอยู่ไม่สวยเลยครับ ลองกำหนดความกว้างของ div แล้ว ก้อยังทะลุออกไปอยุ่ดีอ่ะครับ
ขอคำแนะนำด้วยนะครับ
ปล. อย่าโกดนะครับ ถ้าขี้เกียดก้อไม่เปนไรครับ แหะๆ
แบบนี้อ่ะครับ ไม่รู้เห็นป่าว V V V V
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 ้
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
payu
หัวหน้าแก๊งเสียว
พลังน้ำใจ: 125
ออฟไลน์
กระทู้: 1,881
|
 |
« ตอบ #17 เมื่อ: 13 มกราคม 2008, 21:20:41 » |
|
ปล.ถ้าขอถามอีกข้อนึงจะโกดมั๊ย อิอิ (อ่าาาส์)
ใน textarea ถ้าพิมพ์ยาวๆๆๆๆมันก้อจะมี scrollbar ใช่มั๊ยครับ (ใน textarea)
แล้วพอ echo ออกมาบน div แล้วมันเกินกรอบออกมาอ่ะครับ
แบบว่า....
ถ้าผมจะทำแบบ smf คือเวลาพิมยาวๆๆ แล้วพอ แสดงบน div หรืออะไรก้อตามแต่ มันจะมี scroll bar ขึ้นอ่ะ (พี่ลองพิมยาวๆๆๆๆมากๆๆๆ ใน 1 บรรทัดอ่ะ แล้วลองแสดงตัวอย่างดู มันจะมี scrollbar ขึ้นครับ)
หรือว่าพี่มีแนวทางอย่างอื่นบ้างครับ
มันเกิดออกมาจาก div แล้วมันลอยๆอยู่ไม่สวยเลยครับ ลองกำหนดความกว้างของ div แล้ว ก้อยังทะลุออกไปอยุ่ดีอ่ะครับ
ขอคำแนะนำด้วยนะครับ
ปล. อย่าโกดนะครับ ถ้าขี้เกียดก้อไม่เปนไรครับ แหะๆ
แบบนี้อ่ะครับ ไม่รู้เห็นป่าว V V V V
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 ้
ถ้ามี FF นะครับ + plugin web developer จะสามารถ view ดู DOM element + css ได้เลย (แถมมีเครื่องมืออื่นๆ อีกเต็มไปหมด) จะเห็นว่า smf เค้าใช้ style sheet ในการทำอย่างที่บอกครับ ... แค่นี้เอง .post { width: 100%; overflow: auto;}
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
bankkungz
สมุนแก๊งเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 948
|
 |
« ตอบ #18 เมื่อ: 13 มกราคม 2008, 21:31:06 » |
|
เอ่อ...
คราส .post นี่ เอาไปเปนคราสของ div ที่จะให้ echo ใช่มะครับ
overflow: auto; ^ ^ ^ ^
มันมีหน้าที่อะไรหรอครับ
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
bankkungz
สมุนแก๊งเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 948
|
 |
« ตอบ #19 เมื่อ: 13 มกราคม 2008, 21:49:49 » |
|
ทำได้แล้วครับ .................. จากเรื่องที่แทรก อ่ะครับ ใน FF เล่นได้นะครับ แต่ใน IE มันไม่ได้อ่ะครับ ต้องเพิ่มโค๊ตตรงไหนหรือป่าวครับ ที่ว่าไม่ได้คือ พอ drag คำแล้ว กดลิ้งค์แล้ว มันไม่แทรก คลุมคำอ่ะครับ ต่างจาก FF มันคลุมเรียบร้อย เหมือน smf เลยครับ แหะๆ
|
|
|
|
|
บันทึกการเข้า
|
|
|
|
|