A-AA+then

นานๆมารบกวนทีครับ เรื่อง dropdown เพื่อใส่ข้อมูลใน textbox

12,082
พอดีหาอ่านตามบทความต่างๆ แล้วยังไม่เคลีย 
คือที่อยากได้ประมาณว่า

เลือกรายการจาก dropdown list (combo box) โดยรายการใน list นั้นดึงมาจากตารางในฐานข้อมูล ซึ่งจะมีข้อความหลายๆ ฟิลด์ที่สัมพันธ์กันกับ list นั้น

เมื่อเลือกรายการใดแล้ว จะมี text box อีกประมาณ 10 ช่อง (textbox) ที่อยากให้นำข้อความที่สัมพันธ์กับ list นั้นมากรอกให้อัตโนมัติครับ 
ที่เหลือกดปุ่ม submit เพื่อบันทึกข้อมูลลงในฐานข้อมูลอีกที

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

25 ความคิดเห็น

555++

ดูจากคำถามแล้วก็ไม่ได้มีอะไรยากนี่ เนื่องจากไม่ได้บอกว่า ต้องดึงรายการใดๆออกมา ดังนั้น ลักษณะการทำงานก็น่าจะตรงไปตรงมา

รายการใน combobox ที่ต้องการ ก็ให้ query ขมุลออกมาตามปกติ โดยเลือกเฉพาะข้อมูลที่ต้องการแสดงผลเท่านั้น ข้อมูลที่ไม่ได้แสดงผลไม่ต้องเอามา แต่อย่าลืมเอา id ของข้อมูลออกมาด้วย

<option value=$result[id]>$result[topic]</option>

ส่วนรายการที่ต้องกรอก ก้ปกติเหมือนเดิม

จากคำถาม ผมไม่แน่ใจว่า มีการนำข้อมูลจากตารางหนึ่งไปใส่ยังอีกตารางหนึ่งหรือเปล่า ... สมมุตฺถ้ามี และไม่ใช่ข้อมูลที่แสดงผล และเราไม่ได้ query ออกมา ก็ให้ query ออกมาตอน submit ครับ แล้วค่อยเอาข้อมูลที่ได้ไปบันทึกลงอีกตารางอีกที โดย สามารถ query ได้จาก id ของ listbox ครับ

คำแนะนำ โดยปกติแล้ว วิธีที่ถูกต้อง เราจะไม่ใช้การ query ข้อมูล เพื่อไปบันทึกอีกตารางนะครับ ถ้าข้อมูลนั้นจะไม่มีการเปลี่ยนแปลงในภายหลัง เราจะใช้การ JOIN ตารางข้อมูลแทน
1

ผมแนบไฟล์รูปประกอบมาให้ด้วยนะครับ 


จากรูปกรณีที่เลือก dropdown list ในกรอบสีแดง จะมีข้อความมากรอกในช่อง Detail และสามารถแก้ไขข้อมูลได้ ถ้าเปลี่ยนตัวเลือกอื่น ข้อความในช่อง Detail นี้ก็จะเปลี่ยนไปด้วยครับ

ในกรอบสีเขียว เมื่อมีการเลือกตัวเลือกใด จะมีข้อความที่สัมพันธ์มากรอกในช่อง Karyotype กับ Remark/Messages เหมือนกัน
เมื่อแก้ไขข้อมูลตามต้องการแล้วค่อยกด submit เพื่อบันทึกข้อมูลไปยังอีกตารางนึงครับ

ประมาณดึงข้อมูลจากตาราง preset เอามาแก้ไขให้ตามต้องการ แล้วบันทึกข้อมูลลงในตาราง patients น่ะครับ

พอดี ร้างเรื่องเขียนโค้ดไปนาน ตอนนี้เหมือนต้องมาเริ่มใหม่เลย 555++

ขอบคุณครับ
2

3

ขอบคุณครับ
4

รบกวนอีกทีครับ

คือการแก้โค้ดในส่วนของ path ไฟล์ที่อ้างถึง ควรระบุยังไงครับ 
พอดีผมลองเอาไปผสมกับ maxsite แล้วเหมือนมันจะต้องแก้โค้ดในส่วนของการอ้างถึงไฟล์อย่าง get.php น่ะครับ

edit: ใจร้อนรีบพิมพ์ถามไปหน่อย ลองมั่วๆ ดูเจอวิธีละครับ หุๆๆ
5

ถามต่อครับ

กรณีต้องการให้แสดงผลใน textarea จะเขียนโค้ดยังไงครับ คือ รู้สึกว่าผมจะเอาโค้ด <span > ใส่เข้าไปไม่ได้ครับ
6

อ้างจากคำตอบที่ #6ถามต่อครับ

กรณีต้องการให้แสดงผลใน textarea จะเขียนโค้ดยังไงครับ คือ รู้สึกว่าผมจะเอาโค้ด <span > ใส่เข้าไปไม่ได้ครับ


ถามเอง ตอบเอง 555++
เจอละครับ แค่ใส่ &nbsp; เข้าไประหว่าง code text area ก็ได้เลย
7

การอ้าง path ให้อ้างนับจากไฟล์ js ที่เรียกใช้ครับ...

ในทางปฏิบัติ เพื่อเลี่ยงปัญหาการอ้าง path ไม่ถูก มักใช้การอ้าง URL แบบเต็มเลยครับ แต่ก็มีข้อควรระวังคือ URL ที่มี www กับไม่มี www จะมองเป็นคนละตัวกัน

อ้างจากคำตอบที่ #6กรณีต้องการให้แสดงผลใน textarea จะเขียนโค้ดยังไงครับ คือ รู้สึกว่าผมจะเอาโค้ด <span > ใส่เข้าไปไม่ได้ครับ


จะใส่ลง textarea ต้องแปลง < เป็น &lt; ก่อนครับ ถ้าบน PHP ก็จะเป็น htmlspecailchar() ครับ

ปล. textarea ใช้ value นะครับ ไม่ใช่ innerHTML

textarea.value = 'xxx';
8

กรณีเมื่อกี้ที่ textarea ไม่แสดงผล เพราะต้องให้มีการแสดงค่า result ด้วยน่ะครับ พึ่ง get ผมก็เลยใส่เป็น input แบบ hidden เข้าไป
ตรง textarea ถึงแสดงผล

แล้วกรณีที่ต้องการ select combo box อันเดียวแล้วใส่ค่าลง 2 หรือ 3 textarea นี่ทำยังไงครับ

เพราะในโค้ดเหมือนมันจะจับคู่ combo box กับ span เป็น 1:1
9

อ้างจากคำตอบที่ #9กรณีเมื่อกี้ที่ textarea ไม่แสดงผล เพราะต้องให้มีการแสดงค่า result ด้วยน่ะครับ พึ่ง get ผมก็เลยใส่เป็น input แบบ hidden เข้าไป
ตรง textarea ถึงแสดงผล

แล้วกรณีที่ต้องการ select combo box อันเดียวแล้วใส่ค่าลง 2 หรือ 3 textarea นี่ทำยังไงครับ

เพราะในโค้ดเหมือนมันจะจับคู่ combo box กับ span เป็น 1:1


ลืมบอกไปครับ จากโจทย์นะครับ แต่ละ textarea จะถูกโพสต์ด้วยข้อมูลใน ฟิลด์ของตาราง preset ในฐานข้อมูลคนละฟิลด์กันครับ
10

อีกคำถามครับ

ข้อมูลวันที่ควรเก็บรูปแบบใด กรณีที่เราต้องการ import กับ export เพื่อใช้กับ excel น่ะครับ

ประมาณว่าถ้า import ข้อมูลจากไฟล์ excel หรือ .csv เข้าฐานข้อมูลได้ และสามารถ export ข้อมูลจาก sql ในรูปแบบ .csv หรือ excel เพื่อ import เข้าฐานข้อมูล Access ได้น่ะครับ
11

ไม่รู้ผมเข้าใจถูกป่าวนะ...

ถ้าต้องการค่าตอบกลับหลายๆค่าก็สามารถทำได้หลายวิธีครับ คงต้องหาตัวอย่างบนเว็บผมเอา เพราะมันมีหลายวิธีมากๆเลยเช่น

ส่งกลับเป็นข้อความในรูป ข้อมูล1|ข้อมูล2 คือใช้ | เป็นตัวคั่นข้อมูล แล้วก็แยกออกด้วย split('|') เอา
ส่งกลับเป็น JSON

ส่วนเรื่องการเก็บข้อมูลของฐานข้อมูล จะเป็นฟิลด์ชนิดใด ไม่ได้มีกฎตายตัวครับ จะใช้ข้อมูลชนิดใดผมให้พิจารณาที่ความสะดวกในการนำไปใช้ต่อเป้นหลัก เลือกเก็บข้อมูลที่นำไปใช้ต่ได้ง่าย ก็จะทำงานได้งายขึ้นครับ

ในกรณีที่จะนำไปใส่ excel ก็ต้องไปพิจารณาว่า มีการนำ excel ไปใช้ต่อหรือไม่ หรือแค่แสดงผล ก็ต้องใช้วิธีการเก็บหรือแปลงให้อยู่ในรูปที่นำไปใช้งานได้นั่นแหละครับ

ยกตัวอย่าง ถ้าต้องการนำวันที่ไปใช้ในการคำณวน ด้วย PHP ก็ควรเก็บวันที่ในรูป mktime เพราะจะคำนวณง่ายกว่า แต่ถ้าต้องการเก็บวันที่ เพื่อใช้ในการ query ข้อมูลบน mysql ก็คงต้องเก็บเป้นชนิด DATE เพราะมันจะสามารถ query บน db ได้ทันที
12

    ท่านครับ 
    พอดีผมไม่ค่อยเข้าใจเรื่องการส่งกลับข้อมูลแบบ JSON น่ะครับ 
    คือคิดว่าถ้าจะปรับแบบท่านว่าน่าจะปรับที่ไฟล์ get.php ในบทความ แต่ดูแล้วยังงงๆ หาดูในบทความแล้วมันยังจับต้นชนปลายไม่ถูกเลยครับ 
    
    คือตอนนี้ผมดึงข้อมูลจาก db มาได้แล้ว และตอนนี้ post textarea ได้แล้ว แต่ต้องใช้วิธีจับคู่ 1 combo box กับ 1 textarea เอา ตอนแรกกะว่าแก้ขัดไปก่อน แต่ตอนนี้ปัญหาคือ เวลาเราเลือก combo box ชุดแรกตอน edit ข้อมูลระบบมันก็แก้ไขข้อความใน textarea ได้ปกติ 
    
    แต่ชุด combo box กับ textarea คู่หลังๆ มันไม่ทำงานครับ เลือก combobox แล้วใน textarea ค่าไม่เปลี่ยน
    
    จริงๆ อย่างที่บอก อยากให้ 1 combo box ใส่ข้อมูลได้หลาย textarea จะดีมากครับ
13

14

คำแนะนำคือ ให้ลองทำความเข้าใจเรื่อง JSON ครับ เพราะมันจะมีประโยชน์มากๆ เลย

อยากรู้ว่าส่งกลับมายังไง ลองเรียก get.php เปล่าๆ ดูครับ

15

ขอบคุณครับ คืนนี้คงต้องปล้ำใหม่อีกซักรอบ
เดี๋ยวจะลองศึกษา JSON เพิ่มเติมครับ
16

ลองทำตามบทความล่าสุดแล้วครับ คือ มันจะทำงานเมื่อส่งข้อมูลตามตัวอย่างในไฟล์ get.php โดยใช้ if else

แต่ผมลองใส่โค้ด คิวรีเรียกข้อมูลในไฟล์ get.php แล้วโดยเอา $id ที่รับมาได้มาคิวรี่ มันกลับไม่ทำงานครับ

ประมาณว่าถ้าใส่โค้ดคิวรี่ข้อมูลในไฟล์ get.php แล้วมันจะไม่ทำงาน แต่พอเอาคำสั่งคิวรีข้อมูลจาก db ออกไป
แล้วใส่แค่ if else มันกลับทำงานครับ

ไม่แน่ใจว่าจะใส่โค้ดคิวรีข้อมูลในไฟล์ get.php อย่างไร หรือใส่ไว้ที่ไฟล์ form ครับ
17

    ไม่เกี่ยวกันนะครับ ที่มันไม่ทำงานอาจมีสาเหตุจากอย่างอื่น ลองศึกษาเกี่ยวกับ ปัญหาการเรียกใช้ Ajax และ UTF-8 บนเว็บดู
    
    วิธีตรวจว่า scriptจะใช้งานได้หรือไม่ก็ง่ายๆครับ
    
    1.จากคราวก่อน ที่ผมให้เรียก get.php ตรงๆ ให้จดจำผลลัพท์ที่ได้
    
    2.แก้ไขไฟล์ get.php ตามที่ต้องการ แล้วลองจำลองผลลัพท์ดู ทำให้ผลลัทืได้เหมือนข้อ 1 รับรองว่า Ajax ต้องเรียกได้แน่ๆ
    
    แนวคิดก็คือ ถ้าเรารู้รูปแบบผลลัพท์ที่ต้องการอย่างชัดเจน เราก็แค่ทำให้ผลลัพท์เป็นไปตามที่ต้องการเท่านั้นครับ script ก็จะทำงานได้ตามที่คาดหวัง
    
    ไม่มีอะไรพิเศษพิศดารกว่าในตัวอย่างครับ (ตัวอย่างเป็นไฟล์ที่ใช้งานจริง) จะใช้ฐานข้อมูลหรือไม่ หรือจะเขียนคำสั่งพิศดารอะไรลงไป จะ include ไฟล์สักกี่ไฟล์ก็ตาม แค่สุดท้ายให้มันได้ผลลัพท์เหมือนตัวอย่าง ก็ถูกต้องแล้วครับ
    
    
    
     

18

ผลลัพธ์ ก่อนที่จะใส่คำสั่งคิวรี่เป็นแบบนี้ครับ
[{"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 ไปแล้วมันไม่แสดงค่าอะไรเลยครับ
    ตรงนี้แหละครับ พอดีผมก็ไม่ค่อยแม่นคำสั่งนัก อาศัยเดาๆ โค้ดเอาน่ะครับ ก็เลยอยากจะรู้ว่าจะเขียนโค้ดคิวรี่ยังไงน่ะครับ
19

<?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 ดู
20

ผมลองเอาใส่ในไฟล์ get.php แล้วครับ
มันแสดงอย่างนี้
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
21

555+++

ผลลัพท์ก็ออกมาแล้วไงครับ แสดงว่า query ถูกต้อง
อ้างจากคำตอบที่ #21Array ( [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 )

แต่เมื่อดูที่ผลลัพท์ขั้นสุดท้ายคือ
อ้างจากคำตอบที่ #21[{"detail1":"$objResult[details1]","detail2":"$objResult[details2]"}]

น่าจะเดาได้นะ...เหตุผลคือตัวแปรไมได้ถูก echo ออกมา เพราะเขียน PHP ผิด
echo '[{"detail1":"'.$objResult['details1'].'","detail2":"'.$objResult['details2'].'"}]';
22

โอเคครับ 

ได้เรียบร้อย 

ขอบคุณท่านมากครับ 2 วันเต็มกับการจัดการส่วนนี้ หุๆๆ 
23

นานๆมารบกวนทีครับ เรื่อง dropdown เพื่อใส่ข้อมูลใน textbox
พี่ๆจ้า พอดีเกิดปัญหาขึ้นจ้า ต้องการให้ข้อมูลใน drop down มาแสดงบน text box อะจ้า หนูเขียนเป็น jsp จ้า มีตัวอย่างภาพให้ดูจ้า
24

พี่ๆจ้า รูปภาพข้างต้นเป็นปัญหาโปรแกรมหนูจ้า พอดอยากให้ข้อมูลที่เลือกจาก drop ไปแสดงผลใน text box ข้างบนรูป สาม text อะจ้า ช่วยหน่อยจ้าใครพอรู้ code บ้าง หนูเขียนเป็น jsp
25
^