นานๆมารบกวนทีครับ เรื่อง dropdown เพื่อใส่ข้อมูลใน textbox
พอดีหาอ่านตามบทความต่างๆ แล้วยังไม่เคลีย
คือที่อยากได้ประมาณว่า
เลือกรายการจาก dropdown list (combo box) โดยรายการใน list นั้นดึงมาจากตารางในฐานข้อมูล ซึ่งจะมีข้อความหลายๆ ฟิลด์ที่สัมพันธ์กันกับ list นั้น
เมื่อเลือกรายการใดแล้ว จะมี text box อีกประมาณ 10 ช่อง (textbox) ที่อยากให้นำข้อความที่สัมพันธ์กับ list นั้นมากรอกให้อัตโนมัติครับ
ที่เหลือกดปุ่ม submit เพื่อบันทึกข้อมูลลงในฐานข้อมูลอีกที
รบกวนขอลิงค์แนะนำบทความที่น่าจะนำมาประยุกต์ได้หน่อยครับ
คือที่อยากได้ประมาณว่า
เลือกรายการจาก dropdown list (combo box) โดยรายการใน list นั้นดึงมาจากตารางในฐานข้อมูล ซึ่งจะมีข้อความหลายๆ ฟิลด์ที่สัมพันธ์กันกับ list นั้น
เมื่อเลือกรายการใดแล้ว จะมี text box อีกประมาณ 10 ช่อง (textbox) ที่อยากให้นำข้อความที่สัมพันธ์กับ list นั้นมากรอกให้อัตโนมัติครับ
ที่เหลือกดปุ่ม submit เพื่อบันทึกข้อมูลลงในฐานข้อมูลอีกที
รบกวนขอลิงค์แนะนำบทความที่น่าจะนำมาประยุกต์ได้หน่อยครับ
ดูจากคำถามแล้วก็ไม่ได้มีอะไรยากนี่ เนื่องจากไม่ได้บอกว่า ต้องดึงรายการใดๆออกมา ดังนั้น ลักษณะการทำงานก็น่าจะตรงไปตรงมา
รายการใน combobox ที่ต้องการ ก็ให้ query ขมุลออกมาตามปกติ โดยเลือกเฉพาะข้อมูลที่ต้องการแสดงผลเท่านั้น ข้อมูลที่ไม่ได้แสดงผลไม่ต้องเอามา แต่อย่าลืมเอา id ของข้อมูลออกมาด้วย
<option value=$result[id]>$result[topic]</option>
ส่วนรายการที่ต้องกรอก ก้ปกติเหมือนเดิม
จากคำถาม ผมไม่แน่ใจว่า มีการนำข้อมูลจากตารางหนึ่งไปใส่ยังอีกตารางหนึ่งหรือเปล่า ... สมมุตฺถ้ามี และไม่ใช่ข้อมูลที่แสดงผล และเราไม่ได้ query ออกมา ก็ให้ query ออกมาตอน submit ครับ แล้วค่อยเอาข้อมูลที่ได้ไปบันทึกลงอีกตารางอีกที โดย สามารถ query ได้จาก id ของ listbox ครับ
คำแนะนำ โดยปกติแล้ว วิธีที่ถูกต้อง เราจะไม่ใช้การ query ข้อมูล เพื่อไปบันทึกอีกตารางนะครับ ถ้าข้อมูลนั้นจะไม่มีการเปลี่ยนแปลงในภายหลัง เราจะใช้การ JOIN ตารางข้อมูลแทน
จากรูปกรณีที่เลือก dropdown list ในกรอบสีแดง จะมีข้อความมากรอกในช่อง Detail และสามารถแก้ไขข้อมูลได้ ถ้าเปลี่ยนตัวเลือกอื่น ข้อความในช่อง Detail นี้ก็จะเปลี่ยนไปด้วยครับ
ในกรอบสีเขียว เมื่อมีการเลือกตัวเลือกใด จะมีข้อความที่สัมพันธ์มากรอกในช่อง Karyotype กับ Remark/Messages เหมือนกัน
เมื่อแก้ไขข้อมูลตามต้องการแล้วค่อยกด submit เพื่อบันทึกข้อมูลไปยังอีกตารางนึงครับ
ประมาณดึงข้อมูลจากตาราง preset เอามาแก้ไขให้ตามต้องการ แล้วบันทึกข้อมูลลงในตาราง patients น่ะครับ
พอดี ร้างเรื่องเขียนโค้ดไปนาน ตอนนี้เหมือนต้องมาเริ่มใหม่เลย 555++
ขอบคุณครับ
คือการแก้โค้ดในส่วนของ path ไฟล์ที่อ้างถึง ควรระบุยังไงครับ
พอดีผมลองเอาไปผสมกับ maxsite แล้วเหมือนมันจะต้องแก้โค้ดในส่วนของการอ้างถึงไฟล์อย่าง get.php น่ะครับ
edit: ใจร้อนรีบพิมพ์ถามไปหน่อย ลองมั่วๆ ดูเจอวิธีละครับ หุๆๆ
กรณีต้องการให้แสดงผลใน textarea จะเขียนโค้ดยังไงครับ คือ รู้สึกว่าผมจะเอาโค้ด <span > ใส่เข้าไปไม่ได้ครับ
ถามเอง ตอบเอง 555++
เจอละครับ แค่ใส่ เข้าไประหว่าง code text area ก็ได้เลย
ในทางปฏิบัติ เพื่อเลี่ยงปัญหาการอ้าง path ไม่ถูก มักใช้การอ้าง URL แบบเต็มเลยครับ แต่ก็มีข้อควรระวังคือ URL ที่มี www กับไม่มี www จะมองเป็นคนละตัวกัน
จะใส่ลง textarea ต้องแปลง < เป็น < ก่อนครับ ถ้าบน PHP ก็จะเป็น htmlspecailchar() ครับ
ปล. textarea ใช้ value นะครับ ไม่ใช่ innerHTML
textarea.value = 'xxx';
ตรง textarea ถึงแสดงผล
แล้วกรณีที่ต้องการ select combo box อันเดียวแล้วใส่ค่าลง 2 หรือ 3 textarea นี่ทำยังไงครับ
เพราะในโค้ดเหมือนมันจะจับคู่ combo box กับ span เป็น 1:1
ลืมบอกไปครับ จากโจทย์นะครับ แต่ละ textarea จะถูกโพสต์ด้วยข้อมูลใน ฟิลด์ของตาราง preset ในฐานข้อมูลคนละฟิลด์กันครับ
ข้อมูลวันที่ควรเก็บรูปแบบใด กรณีที่เราต้องการ import กับ export เพื่อใช้กับ excel น่ะครับ
ประมาณว่าถ้า import ข้อมูลจากไฟล์ excel หรือ .csv เข้าฐานข้อมูลได้ และสามารถ export ข้อมูลจาก sql ในรูปแบบ .csv หรือ excel เพื่อ import เข้าฐานข้อมูล Access ได้น่ะครับ
ถ้าต้องการค่าตอบกลับหลายๆค่าก็สามารถทำได้หลายวิธีครับ คงต้องหาตัวอย่างบนเว็บผมเอา เพราะมันมีหลายวิธีมากๆเลยเช่น
ส่งกลับเป็นข้อความในรูป ข้อมูล1|ข้อมูล2 คือใช้ | เป็นตัวคั่นข้อมูล แล้วก็แยกออกด้วย split('|') เอา
ส่งกลับเป็น JSON
ส่วนเรื่องการเก็บข้อมูลของฐานข้อมูล จะเป็นฟิลด์ชนิดใด ไม่ได้มีกฎตายตัวครับ จะใช้ข้อมูลชนิดใดผมให้พิจารณาที่ความสะดวกในการนำไปใช้ต่อเป้นหลัก เลือกเก็บข้อมูลที่นำไปใช้ต่ได้ง่าย ก็จะทำงานได้งายขึ้นครับ
ในกรณีที่จะนำไปใส่ excel ก็ต้องไปพิจารณาว่า มีการนำ excel ไปใช้ต่อหรือไม่ หรือแค่แสดงผล ก็ต้องใช้วิธีการเก็บหรือแปลงให้อยู่ในรูปที่นำไปใช้งานได้นั่นแหละครับ
ยกตัวอย่าง ถ้าต้องการนำวันที่ไปใช้ในการคำณวน ด้วย PHP ก็ควรเก็บวันที่ในรูป mktime เพราะจะคำนวณง่ายกว่า แต่ถ้าต้องการเก็บวันที่ เพื่อใช้ในการ query ข้อมูลบน mysql ก็คงต้องเก็บเป้นชนิด DATE เพราะมันจะสามารถ query บน db ได้ทันที
ท่านครับ
พอดีผมไม่ค่อยเข้าใจเรื่องการส่งกลับข้อมูลแบบ JSON น่ะครับ
คือคิดว่าถ้าจะปรับแบบท่านว่าน่าจะปรับที่ไฟล์ get.php ในบทความ แต่ดูแล้วยังงงๆ หาดูในบทความแล้วมันยังจับต้นชนปลายไม่ถูกเลยครับ
คือตอนนี้ผมดึงข้อมูลจาก db มาได้แล้ว และตอนนี้ post textarea ได้แล้ว แต่ต้องใช้วิธีจับคู่ 1 combo box กับ 1 textarea เอา ตอนแรกกะว่าแก้ขัดไปก่อน แต่ตอนนี้ปัญหาคือ เวลาเราเลือก combo box ชุดแรกตอน edit ข้อมูลระบบมันก็แก้ไขข้อความใน textarea ได้ปกติ
แต่ชุด combo box กับ textarea คู่หลังๆ มันไม่ทำงานครับ เลือก combobox แล้วใน textarea ค่าไม่เปลี่ยน
จริงๆ อย่างที่บอก อยากให้ 1 combo box ใส่ข้อมูลได้หลาย textarea จะดีมากครับ
อยากรู้ว่าส่งกลับมายังไง ลองเรียก get.php เปล่าๆ ดูครับ
เดี๋ยวจะลองศึกษา JSON เพิ่มเติมครับ
แต่ผมลองใส่โค้ด คิวรีเรียกข้อมูลในไฟล์ get.php แล้วโดยเอา $id ที่รับมาได้มาคิวรี่ มันกลับไม่ทำงานครับ
ประมาณว่าถ้าใส่โค้ดคิวรี่ข้อมูลในไฟล์ get.php แล้วมันจะไม่ทำงาน แต่พอเอาคำสั่งคิวรีข้อมูลจาก db ออกไป
แล้วใส่แค่ if else มันกลับทำงานครับ
ไม่แน่ใจว่าจะใส่โค้ดคิวรีข้อมูลในไฟล์ get.php อย่างไร หรือใส่ไว้ที่ไฟล์ form ครับ
ไม่เกี่ยวกันนะครับ ที่มันไม่ทำงานอาจมีสาเหตุจากอย่างอื่น ลองศึกษาเกี่ยวกับ ปัญหาการเรียกใช้ Ajax และ UTF-8 บนเว็บดู
วิธีตรวจว่า scriptจะใช้งานได้หรือไม่ก็ง่ายๆครับ
1.จากคราวก่อน ที่ผมให้เรียก get.php ตรงๆ ให้จดจำผลลัพท์ที่ได้
2.แก้ไขไฟล์ get.php ตามที่ต้องการ แล้วลองจำลองผลลัพท์ดู ทำให้ผลลัทืได้เหมือนข้อ 1 รับรองว่า Ajax ต้องเรียกได้แน่ๆ
แนวคิดก็คือ ถ้าเรารู้รูปแบบผลลัพท์ที่ต้องการอย่างชัดเจน เราก็แค่ทำให้ผลลัพท์เป็นไปตามที่ต้องการเท่านั้นครับ script ก็จะทำงานได้ตามที่คาดหวัง
ไม่มีอะไรพิเศษพิศดารกว่าในตัวอย่างครับ (ตัวอย่างเป็นไฟล์ที่ใช้งานจริง) จะใช้ฐานข้อมูลหรือไม่ หรือจะเขียนคำสั่งพิศดารอะไรลงไป จะ include ไฟล์สักกี่ไฟล์ก็ตาม แค่สุดท้ายให้มันได้ผลลัพท์เหมือนตัวอย่าง ก็ถูกต้องแล้วครับ
[{"detail1":"Guest","detail2":"guest@admin.com"}]
ตอนนี้ในไฟล์ get.php ผมใช้โค้ดคิวรี่ประมาณนี้
(ไม่รู้ถูกหรือเปล่านะครับ)
mysql_select_db($dbname);
$strSQL = "SELECT * FROM web_preset WHERE presetid = '".$id."' ";
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
if ($id == $objResult[presetid]) {
echo '[{"detail1":"$objResult[details1]","detail2":"$objResult[details2]"}]';
} ...
พอใส่ไปแล้วลองเรียกไฟล์ get.php ไปแล้วมันไม่แสดงค่าอะไรเลยครับ
ตรงนี้แหละครับ พอดีผมก็ไม่ค่อยแม่นคำสั่งนัก อาศัยเดาๆ โค้ดเอาน่ะครับ ก็เลยอยากจะรู้ว่าจะเขียนโค้ดคิวรี่ยังไงน่ะครับ
$id = intval($_POST['id']);
$strSQL = "SELECT * FROM web_preset WHERE presetid='$id' LIMIT 1";
// echo $strSQL; // debug
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
// print_r($objResult); // debug
echo '[{"detail1":"$objResult[details1]","detail2":"$objResult[details2]"}]';
?>
ถ้า print_r แล้วไม่มีผลลัพท์ แสดงว่า หาไม่เจอ หรือ query ไม่ถูกต้อง ให้ลอง debug sql เอาไปทดสอบบน phpmyadmin ดู
มันแสดงอย่างนี้
SELECT * FROM web_preset WHERE presetid='0' LIMIT 1[{"detail1":"$objResult[details1]","detail2":"$objResult[details2]"}]
และพอลองใส่ เข้าไปตรงๆ เลย มันก็เรียกข้อมูลออกมาประมาณนี้
SELECT * FROM web_preset WHERE presetid='1' LIMIT 1Array ( [0] => 1 [id] => 1 [1] => 1 [presetid] => 1 [2] => normal karyotype [presetname] => normal karyotype [3] => normal [presettype] => normal [4] => details preset 1-1 [detail1] => details preset 1-1 [5] => details preset 1-2 [detail2] => details preset 1-2 [6] => details preset 1-3 [detail3] => details preset 1-3 ) [{"detail1":"$objResult[details1]","detail2":"$objResult[details2]"}]
โดยผมลองเอา // หน้าบรรทัด echo กับ print_r ออกครับ
ที่บอกว่า "ให้ลอง debug sql เอาไปทดสอบบน phpmyadmin ดู"
อันนี้ทำยังไงครับ
ปล. ดูเหมือนมันคิวรี่ค่าออกมาจากฐานข้อมูลไม่ได้หรือเปล่าครับ เพราะตรงที่ให้ echo มันแสดงเป็นตัวแปร เช่น $objResult[details1] แต่ไม่เป็นค่าที่อยู่ใน db
ผลลัพท์ก็ออกมาแล้วไงครับ แสดงว่า query ถูกต้อง
แต่เมื่อดูที่ผลลัพท์ขั้นสุดท้ายคือ
น่าจะเดาได้นะ...เหตุผลคือตัวแปรไมได้ถูก echo ออกมา เพราะเขียน PHP ผิด
ได้เรียบร้อย
ขอบคุณท่านมากครับ 2 วันเต็มกับการจัดการส่วนนี้ หุๆๆ