ขอถาม PHP หน่อยครับ (รบกวนด้วยคับ แง้วๆ)

เริ่มโดย bankkungz, 04 ธันวาคม 2007, 23:17:56

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

bankkungz

ขอถามตามนี้เลยนะครับ

1.เวลาผมทำฟอร์มเขียนข้อความ (เหมือนกับที่เขียนตอบกระทู้นี้แหละ) จะทำอย่างไรให้เวลาเรากด Enter แล้วขึ้นบรรทัดใหม่อ่ะครับ มันแสดงผลตอนดึงออกมาจาก sql ด้วยอ่ะครับ จะเขียนคิปไงดี
(เพราะเวลาผมลองพิมข้อความแล้ว ลองขึ้นบรรทัดใหม่ ไอ sql มันไม่ขึ้นให้ผมอ่ะ มันเรียงยาวเป็นพรืดๆเลย)

2.ต่อเนื่องมาจากกระทู้ "การแทนคำ" ของผมเองที่เคยตั้งถามไปก่อนหน้านี้
อยากทราบว่าเวลาผมจะทำปุ่มแบบ SMF ที่กดตัว B แล้วมีโค๊ต [b ] กับ [/b ] ขึ้นอ่ะครับ
จะให้ไอตัว curcer ที่ไว้พิมอ่ะ มันอยุ่ตรงกลางโค๊ตดังกล่าวอ่ะครับ (เพราะเวลาพิมจะได้สะดวก)

ขอบคุนครับ

ปล. ข้อ 2 ผมไม่แน่ใจว่าต้องใช้ java มาเกี่ยวหรือป่าว ผมว่าต้องใช้แน่ๆเลย ยังไงๆก้อช่วยทีนะครับ งมมานานแล้ว ฮือๆ 

:-* :-* :-* :-* :-*
[direct=http://www.bethezank.com]Bethezank[/direct]

payu


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)

[direct=http://www.facebook.com/iipayu]payu on facebook[/direct]

bankkungz

[direct=http://www.bethezank.com]Bethezank[/direct]

bankkungz

ข้อ 1 นะครับ

จาก


$ms=wordwrap($ms,100,"\n",1);


ใช้แบบนี้หรือป่าวครับ การเก็บ \n ลง sql

ก้อคือดึงข้อความมาจากฟอร์ม กำหนดเป็น $ms
แล้วก้อมาใส่ฟังชั่น wordwrap() เหมือนในโค๊ตป่าว
แล้วค่อยใส่ sql อีกที

แง้วๆ
[direct=http://www.bethezank.com]Bethezank[/direct]

EThaiZone

อ้างถึงจาก: bankkungz ใน 04 ธันวาคม 2007, 23:43:50
ข้อ 1 นะครับ

จาก


$ms=wordwrap($ms,100,"\n",1);


ใช้แบบนี้หรือป่าวครับ การเก็บ \n ลง sql

ก้อคือดึงข้อความมาจากฟอร์ม กำหนดเป็น $ms
แล้วก้อมาใส่ฟังชั่น wordwrap() เหมือนในโค๊ตป่าว
แล้วค่อยใส่ sql อีกที

แง้วๆ

ไม่ครับ ผมขออธิบายให้ฟังแทนละกัน

คือปกติแบบฟอร์มเราจะใช้ <textarea> อยู่แล้วใช่ปะครับ
ทีนี้ textarea มันรองรับค่าแบบหลายบรรทัดได้

เมื่อเวลามีการส่งค่าฟอร์ม ค่าที่มันบอกว่าขึ้นบรรทัดใหม่คือ \n ครับ
หรือง่ายๆ คือมันมี \n อยู่แล้ว

ดังนั้นเวลาเก็บค่าก็เก็บไปปกติแหละครับ \n มันอยู่ในนั้นอยู่แล้ว

แต่พอเวลาแสดงผล ค่อยใช้ nl2br ช่วยเปลี่ยน \n เป็น <br/> ครับ

ปล. อย่าลืมใช้ mysql_escape_string เพื่อความปลอดภัยด้วยนะครับ

thenetxx

Develop site but can't develop life
ASIA

bankkungz

ก้อหมายความว่า

ดึงข้อความออกมาจาก sql แล้ว กำหนดตัวแปลซะ

แล้วเอามาใส่ฟังชั่น

แล้วก้อค่อย echo ออกมา ใช่มะครับ

แล้ว

mysql_escape_string

คืออารายครับ

(อาจจะโง่ไปหน่อยนะครับ)
[direct=http://www.bethezank.com]Bethezank[/direct]

EThaiZone

ผมบอกผิด จริงๆ ควรใช้
mysql_real_escape_string()

ส่วนความสามารถก็..

อ้างถึงจาก: icez ใน 18 พฤศจิกายน 2007, 18:07:30
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

อ้างถึงจาก: EThaiZone ใน 05 ธันวาคม 2007, 22:30:33
ผมบอกผิด จริงๆ ควรใช้
mysql_real_escape_string()

ส่วนความสามารถก็..

อ้างถึงจาก: icez ใน 18 พฤศจิกายน 2007, 18:07:30
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)."')");
[direct=http://www.bethezank.com]Bethezank[/direct]

EThaiZone

ใช่ครับ มันใช้ช่วยชีวิตได้ ไม่งั้นโดนแน่ๆ  :-X

icez

mysql_escape_string ก็ใช้ได้ครับ
ความแตกต่างของ 2 function นี้อยู่ที่ mysql_escape นั่น php ทำงานเอง
ส่วน mysql real escape ตัว php จะไปเรียก library ของ mysql ให้ทำงานให้
ซึ่ง algorithm ก็ตัวเดียวกันนั่นแหละ
[direct=http://www.thzhost.com/]THZHost[/direct] SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ

thenetxx

อ้างถึงจาก: icez ใน 06 ธันวาคม 2007, 02:55:01
mysql_escape_string ก็ใช้ได้ครับ
ความแตกต่างของ 2 function นี้อยู่ที่ mysql_escape นั่น php ทำงานเอง
ส่วน mysql real escape ตัว php จะไปเรียก library ของ mysql ให้ทำงานให้
ซึ่ง algorithm ก็ตัวเดียวกันนั่นแหละ


เก็บเกี่ยว ๆ ๆ  เพิ่งรู้ครับ   ::)
Develop site but can't develop life
ASIA

bankkungz

อ้างถึงจาก: payu ใน 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)



ไอตรงนี้อ่ะ

วิธีใช้ surroundText('[b ]', '[/b ]', textarea_object)

ใส่ตรงไหนหรอครับ

ตรงลิ้งเลยหรอ

ผมลองแล้วไม่ได้

ใส่ javascript: ต่อข้างหน้า surroundText แล้วก้อไม่ได้ครับ

ปล.ต้องกำหนดชื่อของ textarea หรือป่าว

หรือยังไงบอกทีนะครับ
[direct=http://www.bethezank.com]Bethezank[/direct]

payu

อ้างถึงจาก: bankkungz ใน 13 มกราคม 2008, 16:51:29

ไอตรงนี้อ่ะ

วิธีใช้ 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

[direct=http://www.facebook.com/iipayu]payu on facebook[/direct]

bankkungz

เอ่อ...

ผมลองใส่ลิ้งค์อันนี้ไปแล้ว

ปรากฏว่าก้อไม่มีอะไรเกิดขึ้นอ่ะครับ

โดย textarae ของผม  name="a" ครับ

ต้องทำการแก้ตรงไหนหรือป่าวครับ

ไม่งั้นมันจะขึ้นใน textare ของผมหรอครับ

(ชักงงๆ)

อิอิ
[direct=http://www.bethezank.com]Bethezank[/direct]

payu



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


[direct=http://www.facebook.com/iipayu]payu on facebook[/direct]

bankkungz

ขอบคุณมากๆๆๆๆเลยครับ

ไม่รู้จะสรรหาคำอะไรมาขอบคุณแล้วเนี่ย

ีดีใจๆมากๆเลย

อิอิ

*-*

ปล.ถ้าขอถามอีกข้อนึงจะโกดมั๊ย อิอิ (อ่าาาส์)

ใน textarea ถ้าพิมพ์ยาวๆๆๆๆมันก้อจะมี scrollbar ใช่มั๊ยครับ (ใน textarea)

แล้วพอ echo ออกมาบน div แล้วมันเกินกรอบออกมาอ่ะครับ

แบบว่า....

ถ้าผมจะทำแบบ smf คือเวลาพิมยาวๆๆ แล้วพอ แสดงบน div หรืออะไรก้อตามแต่ มันจะมี scroll bar ขึ้นอ่ะ
(พี่ลองพิมยาวๆๆๆๆมากๆๆๆ ใน 1 บรรทัดอ่ะ แล้วลองแสดงตัวอย่างดู มันจะมี scrollbar ขึ้นครับ)

หรือว่าพี่มีแนวทางอย่างอื่นบ้างครับ

มันเกิดออกมาจาก div แล้วมันลอยๆอยู่ไม่สวยเลยครับ
ลองกำหนดความกว้างของ div แล้ว ก้อยังทะลุออกไปอยุ่ดีอ่ะครับ

ขอคำแนะนำด้วยนะครับ

ปล. อย่าโกดนะครับ ถ้าขี้เกียดก้อไม่เปนไรครับ แหะๆ

แบบนี้อ่ะครับ ไม่รู้เห็นป่าว
V
V
V
V

9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
[direct=http://www.bethezank.com]Bethezank[/direct]

payu

อ้างถึงจาก: bankkungz ใน 13 มกราคม 2008, 17:59:39
ปล.ถ้าขอถามอีกข้อนึงจะโกดมั๊ย อิอิ (อ่าาาส์)

ใน 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;
}


[direct=http://www.facebook.com/iipayu]payu on facebook[/direct]

bankkungz

เอ่อ...

คราส .post นี่ เอาไปเปนคราสของ div ที่จะให้ echo ใช่มะครับ

overflow: auto;
^
^
^
^

มันมีหน้าที่อะไรหรอครับ
[direct=http://www.bethezank.com]Bethezank[/direct]

bankkungz

ทำได้แล้วครับ

..................

จากเรื่องที่แทรก [b][/b] อ่ะครับ

ใน FF เล่นได้นะครับ แต่ใน IE มันไม่ได้อ่ะครับ

ต้องเพิ่มโค๊ตตรงไหนหรือป่าวครับ

ที่ว่าไม่ได้คือ พอ drag คำแล้ว กดลิ้งค์แล้ว มันไม่แทรก [b][/b] คลุมคำอ่ะครับ

ต่างจาก FF มันคลุมเรียบร้อย เหมือน smf เลยครับ

แหะๆ
[direct=http://www.bethezank.com]Bethezank[/direct]