บทที่ 6 ตัวอย่างโปรแกรมจริงจากโฮมเพจ
 
    บทที่ 6 เราจะมายกตัวอย่างโปรแกรม CGI ด้วยกัน 2 โปรแกรม จาโฮมเพจ DevMan นี้

ตัวอย่างที่ 1 การนับผู้เข้าชมโฮมเพจ
    เนื่องจากโฮมเพจนี้ เป็นโฮมเพจที่เป็นแบบไม่ใช้ไฟล์ html เป็นหลัก จึงไม่ได้ใช้ counter เหมือนกันโฮมเพจอื่นๆ  เขาใช้กัน แต่ที่จะให้คุณดูก็คือ การทํางานของ counter
    ในการเขียนไฟล์ counter เราจะสร้างไฟล์มา 1 ไฟล์ ผมให้ไฟล์นี้ชื่อ visitor.dat แต่เมื่อรันบน unix จึงต้องมีการแปลงไฟล์ให้เป็นแบบ 777 คือกําหนดสิทธิ์ของไฟล์ เพื่อให้สามารถเขียนข้อมูลลงไปได้
    ภายในไฟล์นี้จะเก็บตัวเลขของผู้เข้าชมโฮมเพจ ภายในไฟล์จะไม่มีอะไรนอกจากตัวเลขจํานวนนึง โดยตอนเริ่มต้น เราจะกําหนดตัวเลขนี้ให้เป็น 0 เพราะยังไม่มีผู้ใดเข้ามาเยี่ยมโฮมเพจเลย โดยจะต้องสร้างไฟล์ขึ้นมาโดยใช้คําสั่งใน unix ดังนี้

    $ cat >visitor.dat

    จากนั้นพิมพ์เลข 0 ลงไปและกด Ctrl+C ไฟล์ visitor.dat จะถูกสร้างขึ้นและเก็บเลข 0 เอาไว้ จากนั้นก็ทําการเปลี่ยนโหมดของไฟล์ให้เป็น 777  โดยใช้คําสั่งต่อไปนี้

    $ chmod 777 visitor.dat

    คราวนี้ก็อยู่ที่ตัวโปรแกรม CGI ล่ะครับ โปรแกรม CGI จะต้องอ่านไฟล์ visitor.dat เข้ามา และเก็บไว้ที่ตัวแปรตัวหนึ่ง โดยใช้โค๊ดโปรแกรมต่อไปนี้

    open( COUNT , "visitor.dat");
    $count=<COUNT>;
    close(COUNT);

    จํานวนตัวเลขในไฟล์ visitor.dat จะเก็บอยู่ในตัวแปร $count ซึ่งเป็นตัวแปรแบบสเกลล่า ที่ต้องใช่ตัวแปรแบบสเกลล่าเพราะว่ามีข้อมูลในไฟล์เพียงตัวเดียว ไม่จําเป็นต้องใช้อะเรย์
    จากนั้น ทําการเพิ่มค่าตัวแปรขึ้นอีก 1 โดยใช้โค๊ดโปรแกรมดังนี้

    $count++;

    เมื่อเพิ่มค่าแล้ว คราวนี้ก็ทําการเขียนข้อมูลทั้งหมดลงในไฟล์ โดยเราต้องเขียนไฟล์แบบ > เพราะเราจะต้องเขียนตัวเลขใหม่ล่าสุดลงไป ดังนี้
 
    open( COUNT , ">visitor.dat");
    print COUNT "$count";
    close( COUNT );

    คราวนี้ เวลาใครเข้ามาในโฮมเพจตัวเลขก็จะเปลี่ยนไปเรื่อย ๆ ได้

ตัวอย่างที่ 2 การเก็บอีเมล์แอดเดรส
    จากในเฟรมทางด้านซ้ายจะเห็นว่า มีช่องให้คุณใส่ email เมื่อคุณกด submit เมื่อไร email จะถูกเก็บลงไปในไฟล์ email.dat ทันที โดย email ของคุณจะถูกเพิ่มลงไปในไฟล์นี้
    เรามาดูฟอร์ม html ของการใส่ email นี้กัน

    <form target='detail' method=POST action='mail/keepmail.cgi'>

        recieve news and update, enter email and Submit!

        <input type=text size=15 name='email'
         value='[email protected]'>

        <br>

        <input type=submit value='submit'>

    </form>
 
    จะเห็นได้ว่าภายใน action ของฟอร์มจะชี้ไปที่ keepmail.cgi ภายในไฟล์นี้ จะอ่านข้อมูลที่ Post มาจากฟอร์ม และเก็บลงในไฟล์ email.dat โดยก่อนอื่น เราจะต้องสร้างไฟล์ email.dat และกําหนดโหมดของไฟล์ให้เป็น 777 เสียก่อน เพราะเราจะอนุญาติให้สามารถเพิ่มข้อมูลลงไฟล์ได้
    โค๊ดโปรแกรมต่อไปนี้ จะอ่านข้อมูลจากฟอร์ม เก็บลงตัวแปร $FORM{'email'}
 
    read(STDIN , $buffer , $ENV{'CONTENT_LENGTH'} );
    @pairs = split(/&/,$buffer);
    foreach $pair (@pairs){
        ($name,$value) = split(/=/,$pair);
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($I))/eg;
        $name =~ tr/+/ /;
        $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($I))/eg;
         $FORM{$name} = $value;
    }

    ถ้าตัวแปร $FORM{'email'} ว่างเปล่า เราจะไม่อนุญาติให้เขียนลงไฟล์ได้ โดยให้แสดงข้อความ Error ดังนี้

    if ($FORM{'email'} eq "") {
         print "<h2>No email enter!!<p>Please try again</h2>";
         print "<form><input type=button value='<-- go back'
                onClick='history.back();'></form>";
         die;
    }

    ถ้ามีข้อมูลในตัวแปร $FORM{'email'} จริง ให้แสดงข้อความขอบคุณ

    print "<h2>Thank you for your email</h2>";
    print "<b>email : $FORM{'email'}</b><p>";
    print "<form><input type=button value='<-- go back'
           onClick='history.back();'></form>";

    ทําการเขียนข้อมูลลงไฟล์ email.dat ดังนี้

    open(EMAILFILE , ">>email.dat");
    print EMAILFILE "$FORM{'email'}\n";
    close(EMAILFILE);

    จากตัวอย่าง 2 ตัวอย่างนี้ คงพอจะเป็นแนวทางให้ได้เป็นอย่างดี ซอร์สโค๊ดโปรแกรม หากคุณต้องการตัวซอร์สโค๊ด สามารถดาวน์โหลดได้จาก ftp ของ DevMan โดยให้ใช้โปรแกรม ftp เข้าไปดาวน์โหลดเท่านั้น ftp://203.155.93.40/pub/devman/cgi ครับ ....