A-AA+then

ผมจะทำยังไงเพื่อแปลงค่าตัวแปรจาก javascript เป็น PHP

6,978
ผมจะทำยังไงเพื่อแปลงค่าตัวแปรจาก javascript เป็น PHP

    เป็นโค้ดคำนวณอายุครับ ซึ่งโค้ดหน้านี้ จะถูกดึงไปใช้ในหน้าหลัก ซึ่งตัวแปร วันเดือนปีเกิด จะถูก select จากฐานข้อมูลแล้วทำการแปลงค่า เพื่อใช้ในการคำนวณ
     

    <script>
    var offset = new Date();
    /*---------------- กรณีที่ไม่มีกำหนดตัวตั้ง จะใช้วันที่ปัจจุบันเป็นตัวตั้งแทน (ไม่ต้องลบ)---------*/
    var nowDate =offset.getDate();
    var nowMonth =offset.getMonth();
    var nowYear = offset.getFullYear()+543;
    /*---------------- ----------------------------------------------------------------------------------*/
    function getAge(){  
    var Age = document.getElementById('Age').value=years
    var bDate = document.getElementById('bDate');    
    var valDate = bDate.value;    
    var bMonth = document.getElementById('bMonth');    
    var valMonth = bMonth.value;    
    var bYear = document.getElementById('bYears');    
    var valYear = bYear.value;    
    if(valDate!='null' && valMonth!='null' && valYear!='null'){         
    offset.setFullYear(nowYear-valYear);         
    offset.setMonth(nowMonth-valMonth);        
    offset.setDate(nowDate-valDate);        
    var years =offset.getFullYear();   
    var month =offset.getMonth();        
    var day=offset.getDate();  

    var Age = document.getElementById('Age').value=years

    
    document.getElementById('Age').value=years+"  ปี  "+ month+" เดือน "+day+" วัน"<< ค่าตัวนี้สามารถแปลงเป็น PHPได้ด้วยวิธ๊ใดครับ
    document.getElementById('Age1').value=years  // แสดงแค่ ปี
    }else{        
    document.getElementById('Age').value='';    
    }
    }
     </script>
    <input type="hidden" name="bDate"  id="bDate" value="<? echo $bd ?> ">
    <input type="hidden" name="bMonth" id="bMonth" value="<? echo $bm - 1 ?>" >
    <input type="hidden" name="bYears" id="bYears" value="<? echo $by  ?>" >

    
    <input type="text" name="Age" id="Age">
    <script>getAge();</script>
    
    
    ***จากการหาข้อมูลในเบื้องต้นพบว่าหากการส่งค่าผ่าน Form สามารถ echo ค่าเป็นตัวแปร PHP ได้เลย
    แต่ในกรณีนี้ เป็นการรับค่าและแสดงผลในหน้าเดียว มีวิธีการใดบ้างครับ รบกวนดูด้วย
     

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

    งงกับคำถาม..
    
    อย่างแรก เลย ไม่ลองใช้ PHP ดูละครับ ถ้ามันต้องมาจากฐานข้อมูล จากตัวอย่าง ก็ทำเหมือนกับ input ทั้ง 3 ตัวครับ bDate,bMonth,bYears
    
    อย่างที่ 2 ถ้าต้องการใช้ Javascript และ Javascript ด้านบนทำงานได้ถูกต้อง ลองเรียกฟังก์ชั่นหลังจากโหลดเสร็จดูครับ
    
    <body onload="getAge()">
    
    ถ้าผมเข้าใจไม่ถูก อธิบายให้ชัดเจนกว่านี้หน่อยครับ....

1

    ขอตอบนะครับว่า ที่ไม่ใช้ PHP เพราะว่า   Javascript ตัวนี้ สามารถแสดงผลทันทีหลังจากรับค่าไปแล้ว
    ส่วนโค้ดนี้ แต่เดิมจะทำงานหลังจากที่ผุู้ใช้ได้ทำการเลือก วัน เดือน ปี ครบ แต่ผมได้ทำการดัดแปลง
    ให้เข้ากับการทำงาน ที่ต้องดึงข้อมูลจากฐานข้อมูล  โดยค่าวันเดือนปี จะถูกเก็บไว้ในตัวแปร $bdate_m
    และทำการแยกออกมาดังนี้ครับ
    
    $rows1['birth_date'] ="$bdate_m";       
    $birth_date = explode('-', $rows1['birth_date']);       
    $bd = $birth_date[2];       
    $bm = $birth_date[1];        
    $by = $birth_date[0];
    
    การทำงานนี้อยู่ในหน้าหลักครับ แล้วจะ include หน้าที่ใช้คำนวณเข้าไป ผลที่ได้ก็จะแสดงทันที
    ส่วนที่ผมต้องการทราบคำตอบก็คือ จะเป็นไปได้ไหม  ที่ผมจะแปลงค่าตัวแปร java ให้เป็น PHP
    ในบรรทัดนี้ น่ะครับ  document.getElementById('Age').value=years+"  ปี  "+ month+" เดือน "+day+"วัน"
    เพราะที่ผมศึกษามา จะพบแต่การส่ง ผ่านฟอร์ม ข้ามหน้าครับ ถึงจะecho ค่าที่เป็น PHPออกมา ยังไงรบกวนตอบด้วยนะครับ
    โปรเจคผมเหลือเรื่องนี้เรื่องเดียวครับ อีกอย่างผมไม่เคยเรียน java เลยครับ เลยไม่มีความรู้ ด้านการทำงานเท่าใดนั รบกวนด้วยนะครับ
     

2

ก็ยังไม่เข้าใจเหมือนเดิมว่าจะทำอะไร...

ทำความเข้าใจก่อนว่า PHP และ Javascript ทำงานกันคนละที โดยที่ PHP ทำงานก่อน (บน Server) แล้วกลับมายัง Browser ซึ่ง Browser จะ แสดงผล แล้วถึงจะเริ่มทำงาน Javascript

ดังนั้นในขั้นตอนปกติ จะเห็นได้ว่า เราไม่สามารถส่งค่าจาก Javascript กลับไปยัง PHP ได้เลย (เพราะมันทำงานกันคนละที)

ทีนี้ถ้าจะเป็นต้องส่งค่ากลับไปยัง PHP (ผมก้ไม่รู้ว่าจะส่งไปเพื่ออะไร...)

1.ถ้าต้องการนำอายุที่ได้ ไปคำนวณต่อ และแสดงผลในส่วนอื่นๆ ผมแนะนำให้คำนวณอายุด้วย PHP ซึ่งแน่นอน หลังจากนั้น PHP จะนำไปใช้ต่อได้ทันที (ไม่แนะนำให้ใช้ Javascript)

2.Javascript จะมีประโยชน์ หาก มีการเปลี่ยนวันเดือนปีเกิด บนหน้าเว็บ แน่นอน มันสามารถคำนวณได้ทันที และหากต้องนำอายุไปใช้ต่อ ก็แนะนำให้ทำทุกอย่างที่ต้องทำด้วย Javascript ทั้งหมด

3.หาเราจำเป็นต้องส่งค่าอายุกลับไปบันทึกลงฐานข้อมูล หรือคำนวณอื่นไดด้วย PHP อันนี้ต้องพึ่ง Ajax แล้ว (ห้ามถามต่อ...อ่านบทความบนเว็บได้)

ในทางปฏิบัติ เพื่อให้โค้ดสมบูรณ์ เราอาจจำต้องคำนวณทั้งในฝั่งของ PHP และ Javascript อย่าได้ขี้เกียจ
3

    สวัสดีครับ.... ขอร่วมแชร์นะครับ
    ผมเข้าใจคำถามนี้ดี แต่....

    จากที่ดูคิดว่าอยากให้คำนวนผลออกมาทันที่ใช่มั้ยครับ จากคำที่ว่า "สามารถแสดงผลทันทีหลังจากรับค่าไปแล้ว" (คำพูดนี้หมายถึงรับค่าจากหน้าจอ) แต่คำถามนี้เริ่มต้นจากคำที่ว่า "วันเดือนปีเกิด จะถูก select จากฐานข้อมูล" (คำพูดนี้เป็นการรับค่ามาจาก server)

    จากโจทย์นี้เลยตีความว่า birth_date จะมาจากฐานข้อมูล พอเปิดหน้านี้แล้วนำมาแยกใส่ Input ที่ Hidden ไว้ แล้วคุณ "catbank" ก็ต้องการคำนวนอายุมาตอนที่แสดงหน้านี้ใช่มั้ยครับ
    ถ้าใช่ ผมมีคำแนะนำสองแบบ
     

    1. คำนวนอายุได้เลยตั้งแต่ Query ซึ่งจะง่ายมากแล้วก็นำมาใช้ได้เลยตอนเปิดหน้านี้
    2. Query เพื่อให้ได้ฟิลดิ์ birth_date มาหน้านี้ก่อน แล้วเขียน function (PHP) เพื่อคำนวนอายุ แล้วนำมาแสดงที่หน้านี้เลยได้เหมือนกัน
     

    เหตุผลนะครับ สองข้อที่แนะนำเป็นการทำงานที่ระดับ server เท่านั้น เนื่องจากหน้าหลัก select วันเดือนปีเกิดมาเพื่อคำนวน  เพราะฉะนั้นก็ควรที่จะคำนวนมาตั้งแต่ตอนอยู่ที่ server เลย
     

    แต่ที่ยังสงสัยอยู่ก็คือ ดูเหมือนคุณ  "catbank" อยากจะคำนวนมันหลังจากโหลดหน้าหลักขึ้นมาเสร็จแล้ว ผมยกตัวอย่างงานที่จะต้องคำนวนทันที่ในหน้าปัจจุบันให้ลองดูนะครับ
     

    เช่น ผมต้องการคำนวนอายุหลังจากที่ผมกรอกข้อมูล วันเดือนปีเกิด ลงใน Text box ตัวหนึ่ง ซึ่งโจทย์ของผมคือ
    ผู้ใช้จะกรอกข้อมูลบนหน้าเพจนี้แล้วคำนวนที่หน้าเพจนี้เลย โดยไม่ต้องกดปุ่มใดๆเพื่อเปลี่ยนไปหน้าอื่นเลย ซึ่งอันนี้จะใช้ Javascript ได้อย่างเหมาะสม
     

    ส่วนคำถามเรื่องการแปลงค่าตัวแปร Java เป็น PHP ในบันทัด document.getElementById('Age').value=years+"  ปี  "+ month+" เดือน "+day+"วัน"
    
    ตรงนี้ค่าที่ได้มันจะไปปรากฏใน Input ที่มีไอดี Age อยู่แล้ว ซึ่งสามารถนำค่าที่ได้ไปใช้ได้เลย .... แต่ถ้าต้องการใช้ value นี้ในหน้าปัจจุบันเลยก็ต้องใช้ Javascript เรียกอยู่ดีครับ
     

    แนะนำว่าให้เรียบเรียงลำดับเหตุการณ์ของการทำงานให้ถูกต้องก่อน เพื่อจะใช้ Javascript หรือ PHP ให้เหมาะสมกับสถานการณ์

4

    ขอบคุณ คำตอบของ คุณ goragod และคุณ BlueEye นะครับ
    ขอบตอบคุณ goragod ก่อนนะครับ ว่า ขอบคุณทujให้ความรู้ แก่ผม ในเรื่องการทำงาน ระหว่าง PHP และ javascript
    ตอนนี้ผมเข้าใจดีแล้วครับ ผมจะพยายามให้มากกว่านี้ครับ ขอบคุณครับ
    
    ส่วน ที่คุณ BlueEye ได้ตอบนั้น คุณเข้าใจความคิดของผมเป็นอย่างดีครับ ในส่วนแรกของการทำงานนั้น
    เมื่อทำการเลือกรายชื่อสมาชิกแล้วโปรแกรมจะเลือก ข้อมูล  birth_date มาจากฐานข้อมูลซึ่ง โค้ดการคำนวณนี้ก็ถูกดึงไปใช้ร่วมด้วย 
    จึงได้ค่าตัวแปร เพื่อใช้ในการคำนวณครับ ปัญหาที่ผมอยากแปลงค่านั้น เป็นเพราะต้องการนำ จำนวนเดือนและปี ไปใช้ในการคำนวณการรับเงินสวัสดิการของสมาชิกกองทุนครับ
    
    สำหรับคำแนะนำที่ให้ คำนวนอายุได้เลยตั้งแต่ Query ทำได้ด้วยวิธีใดครับ รบกวนอธิบายเพิ่มด้วยนะครับ
    
    ตอนนี้ผมแก้ปัญหาเฉพาะหน้าโดยใช้ datediff ครับ โดยการแสดงผลจากโค้ดที่ผมเอามาให้ดูนี้ ใช้เพื่อแสดงผลเพียงเท่านั้นครับ
    ผมเป็นผู้เริ่มศึกษา น่ะครับ ความรู้ที่มีอาจไม่มากนะ ก็ขอขอบคุณ แก่ทุกท่านที่ให้ความรู้ มา ณ ที่นี้ด้วยครับ
     

5

    datediff ก็ใช้ได้ครับ อันนี้เป็นอีกแบบนึง คือใช้ timestampdiff
     

    SELECT
    timestampdiff(year, birth_date, curdate()) as cnt_year,
    timestampdiff(month, birth_date, curdate())-(timestampdiff(year, birth_date, curdate())*12) as cnt_month,
    timestampdiff(day, date_add(birth_date, interval (timestampdiff(month, birth_date, curdate())) month), curdate()) as cnt_day
    FORM ....
    WHERE ....

6

    ขอบคุณครับ ผมตัดสินใจใช้ datediff ไปแล้ว ครับ T T

7
^