MySQL (Again) with PHP

สวัสดีกันอีกครั้งในวันร้อนๆ แฉะๆ อีกที วันนี้ หากใครอ่านหัวเรื่องแล้ว และยังพอจำบทความที่แล้วๆกันได้ ก็คงจะนึกขึ้นมาได้ว่า ไอ้คนเขียนมันหากินกับ MySQL อีกแล้วเรอะ!!!ใช่แล้วครับ เราจะกลับมาพบกับ MySQL กันอีกครั้ง แต่ด้วยเทคโนโลยีที่เปลี่ยนไป ลืม .NET ทั้งหลายไปซะ เพราะคราวนี้ เราจะมายำกับ PHP
เอ.. ทำไมต้องเป็น PHP ละ ก็ในเมื่อเราเป็นแบบ .NET ไปแล้ว แถม .NET ก็เอาไปเขียนเว็บเป็น ASP .NET ได้ ไอ้คนเขียนมันจะมาสอนสิ่งที่ทำได้แล้วทำไม??? อ่า…จริงๆแล้วคำตอบของผู้เขียนก็ง่ายๆครับว่าทำไมเราถึงควรรู้อะไรที่มันทับซ้อนกันบ้าง เพราะแม้บางครั้ง เราจะเก่งสุดๆ หรือเซียนมากๆในภาษาใดภาษาหนึ่ง แต่ในหลายๆครั้ง คนที่จะเลือกแนวทางการทำงานของคุณ ก็ไม่ใช่ตัวคุณเอง แต่เป็นเจ้านายของคุณ(เรื่องสมมุติเท่านั้นนะ ไม่ใช่ชีวิตจริงของผู้เขียนเล๊ยยย ไม่เล๊ยยยยยยย TT-TT)

ต้องขอเกริ่นซักนิดสำหรับ PHP เพราะเชื่อว่า หลายๆคนที่ไม่ได้เรียนมาทาง IT โดยตรง หรือ ไม่เคยทำพวก Web Services คงไม่ค่อยได้ใช้เท่าไหร่.. ตัว PHP นั้น เรามักจะมองมันให้อยู่ในฐานะของ Server Side Script Language       เนื่องจากตัวของมันเองไม่ได้ทำงานบนเครื่องของผู้เยี่ยมชมเว็บ แต่จะทำงานอยู่บนฝั่งของ Server แทน ซึ่งมักจะคอยตอบโต้กับงานที่ฝั่ง User เรียกใช้เข้ามา ซึ่งอาจจะเป็นงานง่ายๆ เช่นส่งตัวแปรมาทำกระบวนการทางคณิตศาสตร์, เป็นตัวรองรับการอัพโหลดไฟล์ หรือเป็นแม้กระทั่งตัวค้นหาข้อมูล ซึ่งเป็นประเด็นหลักของเราในวันนี้

โจทย์ในการโค้ดของเราในวันนี้ จะยึดโจทย์จากบทความที่แล้วเป็นหลัก เพื่อที่จะได้เห็นความแตกต่างในการทำงานของการเขียนโปรแกรมแบบ Desktop App และ Web App
อันนี้คือโค้ดสร้างของ Database ยึดจากตอนที่แล้วๆ
ขั้นตอนแรกๆ ในการเขียนโปรแกรมแบบ PHP คือเราควรจะสร้าง UI ให้เสร็จก่อน เพื่อความง่ายในการทำงาน
<form id=”form1″ name=”form1″ method=”post” action=”<?php echo $_SERVER[‘PHP_SELF’]; ?>”>
  <p>
    <label for=”student_id”>Student ID</label>
    <input type=”text” name=”student_id” />
  </p>
  <p>
    <label for=”subject_id”>Subject ID</label>
    <input type=”text” name=”subject_id” />
  </p>
  <p>
    <input type=”submit” name=”button” value=”Search” />
  </p>
</form>
จะเห็นได้ว่า เราสามารถวางแท็ก <?php ?> แทรกเข้าไปในแท็กของ HTML ได้เลย ซึ่งเราจะคงใช้วิธีนี้ไปเรื่อยๆในการเขียนโปรแกรมของเรา
หลังจากได้หน้า UI แล้ว เราจะทดลองนำค่าที่ได้จากการส่งผ่านform มาแสดงไว้ด้านล่างก่อน เพื่อเป็นการทดสอบว่า โค้ดของเราถูกต้องรึเปล่า โดยทำการเพิ่มโค้ดไปดังนี้
<form id=”form1″ name=”form1″ method=”post” action=”<?php echo $_SERVER[‘PHP_SELF’]; ?>”>
  <p>
    <label for=”student_id”>Student ID</label>
    <input type=”text” name=”student_id” />
  </p>
  <p>
    <label for=”subject_id”>Subject ID</label>
    <input type=”text” name=”subject_id” />
  </p>
  <p>
    <input type=”submit” name=”button” value=”Search” />
  </p>
</form>
<?php
  $studentID = $_REQUEST[‘student_id’];
  $subjectID = $_REQUEST[‘subject_id’];
    if($studentID)
      echo “student_id = $studentID <br />”;
    if($subjectID)
      echo “subject_id = $subjectID <br />”;
?>
ซึ่งเมื่อลองทำงาน ก็จะได้ผลลัพท์ดังนี้
ซึ่งการทำงานข้างบนก็คือ การส่งค่าของตัวแปรเข้าสู่ตัวเองแล้วแสดงผล โดยเป็นการเช็คว่า โค้ดที่เราเขียนมานั้นถูกต้องหรือไม่
ต่อไป ก็ถึงขั้นตอนที่เราจะเขียนโค้ดกันจริงๆแล้ว
ใน PHP นั้น การเชื่อมต่อกับ MySQL ทำได้ง่ายกว่าของ .NET มาก เพราะมีฟังชั่นมาให้เรียบร้อยอยู่แล้ว เราจึงสามารถเขียนโค้ดเชื่อมต่อได้ง่ายๆอย่างนี้เลย
$link = mysql_connect($db_server,$db_user,$db_password )or die(mysql_error());
โดยใน Parameter ต่างๆนั้น เราก็จะใส่ค่า config ของ Database เข้าไป เพื่อให้โปรแกรมของเรา สามารถทำการเชื่อมต่อกับ Database ได้ แต่หากเกิดการผิดพลาด โปรแกรมก็จะหยุดทำงาน พร้อมกับแสดงข้อความออกมาว่า เกิดปัญหาอะไรขึ้น
$link = mysql_connect(“localhost”, “root”, “”) or die(mysql_error());
ซึ่งหากเกิดข้อผิดพลาด เช่นใส่พาสเวิร์ดผิด โปรแกรมของเรา ก็จะแสดงข้อความออกมาดังนี้
Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘root’@’localhost’ (using password: YES) in D:xampp2htdocstutorialsearch.php on line 19
Access denied for user ‘root’@’localhost’ (using password: YES)
ขั้นตอนต่อไป เราจะทดลองแสดงข้อมูลของ นักศึกษาตามหมายเลขประจำตัว
<form id=”form1″ name=”form1″ method=”post” action=”<?php echo $_SERVER[‘PHP_SELF’]; ?>”>
  <p>
    <label for=”student_id”>Student ID</label>
    <input type=”text” name=”student_id” />
  </p>
  <p>
    <label for=”subject_id”>Subject ID</label>
    <input type=”text” name=”subject_id” />
  </p>
  <p>
    <input type=”submit” name=”button” value=”Search” />
  </p>
</form>
<?php
  $studentID = $_REQUEST[‘student_id’];
  $subjectID = $_REQUEST[‘subject_id’];
  if($studentID)
  {
      $link = mysql_connect(“localhost”, “root”, “”) or die(mysql_error());
      mysql_select_db(“student_score”, $link) or die(mysql_error());
      $result = mysql_query(“SELECT * From student WHERE StudentID = ‘$studentID'”);
               
?>
      <table width=”400px” border=”1″>                
<?php                       
      while($row = mysql_fetch_array($result))
         foreach($row as $column => $value)
         {
            if(!is_numeric($column))
              echo “<tr><td width=’50%‘>$column</td><td>$value</td></tr>”;
         }
?>
        </table>
<?php
         mysql_close($link);
  }
?>
ผลลัพธ์ ก็จะออกมาตามนี้
ขั้นตอนต่อไป เราก็จะพยายามทำให้ผลลัพท์ที่ได้ ออกมาเหมือนในตอนที่แล้ว คือเมื่อป้อนรหัสนักษึกษาเข้าไป ก็จะทำการแสดงรายวิชาทั้งหมดที่นักศึกษาคนนั้นลงทะเบียนเรียนทั้งหมดออกมา(ยังไม่ทำ subject_id เพราะว่าจะงง)                        ปล. เขียนโง่นะเนี่ย ไม่ใช้ Join
<form id=”form1″ name=”form1″ method=”post” action=”<?php echo $_SERVER[‘PHP_SELF’]; ?>”>
  <p>
    <label for=”student_id”>Student ID</label>
    <input type=”text” name=”student_id” />
  </p>
  <p>
    <label for=”subject_id”>Subject ID</label>
    <input type=”text” name=”subject_id” />
  </p>
  <p>
    <input type=”submit” name=”button” value=”Search” />
  </p>
</form>
<?php
  $studentID = $_REQUEST[‘student_id’];
  $subjectID = $_REQUEST[‘subject_id’];
  if($studentID)
  {
    $link = mysql_connect(“localhost”, “root”, “”) or die(mysql_error());
    mysql_select_db(“student_score”, $link) or die(mysql_error());
    $result = mysql_query(“SELECT studentsubject.StudentID AS ID, StudentName AS Name, studentsubject.SubjectID, ” .
      “subject.SubjectName, Score ” .
      “FROM studentsubject, subject, student ” .
      “WHERE studentsubject.StudentID = ‘$studentID’ ” .
      “AND studentsubject.SubjectID = subject.SubjectID ” .
      “AND studentsubject.StudentID = student.StudentID”
  );
                                                                                                                                   
?>
  <table border=”1″>
    <tr>
      <td>ID</td>
      <td>Name</td>
      <td>Subject ID</td>
      <td>Subject Name</td>
      <td>Score</td>
    </tr>                                                                                                                      
<?php                                                                                                                       
    while($row = mysql_fetch_array($result))
    {
?>
    <tr>
<?php
      foreach($row as $column => $value)
      {
        if(is_numeric($column))
          echo “<td>$value</td>”;
      }
?>
    </tr>
<?php
    }
?>
  </table>
<?php
    mysql_close($link);
  }
?>
ผลลัพท์ก็จะเหมือนตามบทความที่แล้วนู้นก็ถือว่าเสร็จสมบูรณ์ สำหรับบทความนี้
โดยรวมแล้ว การเขียนเชื่อมต่อ MySQL ผ่าน PHP นั้น ง่ายกว่าการทำบน .NET มาก เพราะไม่ว่าจะทำการ SELECT หรือแม้แต่การ UPDATE, DELETEก็ใช้ฟังชั่นเดียวกันหมด ไม่ยุ่งยาก แต่งานที่จะเพิ่มเข้ามาทดแทน ก็คือการที่เราจะต้องทำการออกแบบส่วนติดต่อกับผู้ใช้เอง ซึ่งค่อนข้างจะยากกว่า แต่หากเราประยุกต์การนำ CSS หรือองค์ประกอบอื่นๆมาใช้ การทำ Web App ก็จะน่าสนใจ ไม่แพ้การเขียนโปรแกรมบน Desktop เลย
และจะขอลากันด้วยภาพที่สมบูรณ์ขึ้น หลังจากทำการเพิ่มในส่วนของ CSS เข้าไป พร้อมกับตกแต่งอีกเล็กน้อย 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *