MySQL + PHP 範例實務操作


現在要來做一個範例 : 歌曲資料庫的新增/修改/刪除/顯示。

首先我們先把登入登出的功能做出來。

預計要有幾個檔案 : 

login.php 用來顯示登入表單,以及進行登入驗證。
logout.php 用來登出,清除已登入的狀態。
check.inc.php 用來檢查是否為登入狀態。
process.php 當完成登入後的處理作業。

各程式說明如下 : 

check.inc.php 很簡單,就是檢查session參數是否登入,如果未登入則返回login.php。

<?php
session_start();
if (($_SESSION['login'] !='ok')) {
header("location:login.php");
}
?> 

再來 login.php 用來顯示登入表單,以及進行登入驗證。

<?php
ob_start();
session_start();
@$acc=$_POST['account'];
@$psw=$_POST['password'];
if (isset($_POST['login'])) {
//如果有傳資料過來要登入,開始檢查
   if (($acc !="admin") || ($psw != "00000")) {
      //假設帳密是 admin / 00000
      header("location:login.php");
   } else {
      $_SESSION['login'] = "ok";
      header("location:process.php");
   }
} else { //如果不是則顯示登入表單
   echo "<form method='POST' action=''>";   
   echo "<BR>帳號 : <input type='text' name='account'>";
   echo "<P>密碼 : <input type='password' name='password'></P>";
   echo "<input type='submit' name='login' value='登入'>";
   echo "</form>";
}
?>

process.php 當完成登入後的處理作業。

<?php
require_once("check.inc.php");
echo "這裡可以開始處理作業";
echo "<a href='logout.php'>登出</a>";
?>

logout.php 則是清除已登入的狀態,再跳回login.php。

<?php
session_start();
session_destroy();
header('Refresh: 1; URL = login.php');
?>

完成登入的處理邏輯後,開始來建置MySQL資料庫。

建立兩個表單 : users 及 song 表單,欄位資料型態及長度都只是範例,你可以根據實際需要修改。

users (username : varchar 20, password : varchar 20)

建置後要新增一列資料,以便後面登入時可以使用。


song (song_name : varchar 100, song_author : varchar 100, song_singer : varchar 100, song_yt : varchar 50, song_desc : blob)

song_name : 歌曲名稱
song_author : 歌曲作者
song_singer : 歌曲演唱者
song_yt : 歌曲的youtube連結參數
song_desc : 歌曲的描述 

你可以將 song_yt 這個欄位設為主鍵 (PK),因為這個欄位是要記錄歌曲的youtube連結上的參數,這個參數一定是唯一的。



 現在開始來將實際程式套用上述的登入,然後進行新增/修改/刪除/顯示等功能。


(1) config.php 這個程式檢查資料庫是否可以連線,如果可以則通過,如果不行則顯示錯誤訊息。

<?php
$host = '主機位置';
$dbuser ='資料庫使用者帳號';
$dbpassword = '資料庫使用者密碼';
$dbname = '資料庫名稱';

// 建立連線
$conn = new mysqli($host, $dbuser, $dbpassword, $dbname);
// 檢查連線
if ($conn->connect_error) { die("連接失敗 : " . $conn->connect_error); }
?>

(2) login.php 用來顯示登入表單,以及進行登入驗證。

<?php
ob_start();
session_start();
$acc=$_POST['account'];
$psw=$_POST['password'];
$acc = str_replace("'", "", $acc);
$acc = str_replace('"', '', $acc);
$psw = str_replace("'", "", $psw);
$psw = str_replace('"', '', $psw);
if (isset($_POST['login'])) {
    require_once "config.php"; 
    $sql="select * from users where username='".$acc."'";
    $result = $conn->query($sql);
    if (!$result) { 
        die($conn->error); 
    } else {
    
        if ($result->num_rows > 0) { 
        while($row = $result->fetch_assoc()) {
           $password=$row["password"];
           }
        }
    }
    $conn->close();

    if ($password != $psw) {
        header("location:login.php");
    } else {
        $_SESSION['login']="ok";
        header("location:index.php");
    }
    
} else { 
    echo "<form method='POST' action=''>";
    echo "<BR>帳號 : <input type='text' name='account'>";
    echo "<P>密碼 : <input type='password' name='password'></P>";
    echo "<input type='submit' name='login' value='登入'>";
    echo "</form>";
    exit;
}
?>

登入畫面如下



(3) logout.php 清除已登入的狀態,再跳回歌曲列表。

<?php
   session_start();
   session_destroy(); 
   header('Refresh: 1; URL = index.php');
?>

(4) index.php 顯示歌曲列表

<?php
require_once "config.php";
$sql = "SELECT * FROM song";
$result = $conn->query($sql);
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="pragma" content="no-cache"> 
    <meta http-equiv="expires" content="0">
    <title>歌曲列表</title>
 
  <style>
  #css_table {
      display:table;
      margin:0px auto;
  }
  .css_tr {
      display: table-row;
  }
  .css_td {
      display: table-cell;
      border-width:1px;
      border-style:dashed;
      border-color:#FFAC55;
      padding:5px;
  }
  </style>

<SCRIPT LANGUAGE=javascript> 
function del() { 
var msg = "您真的確定要刪除嗎?\n\n請確認!"; 
if (confirm(msg)==true){ 
   return true; 
   }else{ 
            return false; 
   } 
</SCRIPT> 
</head>
<body>
<div id="css_table">
      <div class="css_tr">
          <P><a href="add.php">新增歌曲</a></P><P>&nbsp;</P>
      </div>      
      <div class="css_tr">
          <div class="css_td">曲名</div>
          <div class="css_td">詞曲創作者</div>
          <div class="css_td">演唱者</div>
      </div>
<?php
if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {
?>
<div class="css_tr">
          <div class="css_td">
              <a onclick="javascript:return del()" href="delete.php?yt=<?php echo $row["song_yt"]; ?>"><img title="刪除" width="20" height="20" src="delete.png" border=0></a>&nbsp;
              <a href="edit.php?yt=<?php echo $row["song_yt"]; ?>"><img title="編輯" width="20" height="20" src="edit.png" border=0></a>&nbsp;<a href="data.php?yt=<?php echo $row["song_yt"]; ?>"><?php echo $row["song_name"]; ?></a></div>
          <div class="css_td"><?php echo $row["song_author"]; ?></div>
          <div class="css_td"><?php echo $row["song_singer"]; ?></div>
</div>
<?php      
  }
?>
</div>

<?php
} else {
  echo "沒有資料 !";
}
$conn->close();
?>      
</body>
</html>

歌曲列表畫面如下 



(5) data.php 顯示歌曲資料

<?php
require_once "config.php";
$sql = "SELECT * FROM song where song_yt='".$_GET['yt']."'";
$result = $conn->query($sql);
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>歌曲資料</title>
<SCRIPT LANGUAGE=javascript> 
function del() { 
var msg = "您真的確定要刪除嗎?\n\n請確認!"; 
if (confirm(msg)==true){ 
return true; 
}else{ 
return false; 
</SCRIPT> 
</head>
<style>
h1 {
    font-size:30px;
}
.block0{
  margin:0px auto;
  padding: 10px;
  text-align:center;
  width:70%;
  background-color:#999966;
}

.block1{
  margin:0px auto;
  padding: 10px;
  text-align:center;
  width:70%;
  background-color:#009999;
  color:white;
}

.block2{
  margin:0px auto;
  padding: 10px;
  text-align:center;
  width:70%;
  background-color:gray;
  color:white;
}

.block3{
  margin:0px auto;
  padding: 10px;
  text-align:center;
  width:70%;
  background-color:#cc9900;
}
</style>

<?php
if ($result->num_rows > 0) {
  $row = $result->fetch_assoc();
?> 

<body>
<div class="block0"><a href="index.php">歌曲列表</a>
&nbsp;<a href="add.php">新增歌曲</a>
&nbsp;<a href="edit.php?yt=<?php echo $row["song_yt"]; ?>">編輯歌曲</a>
&nbsp;<a onclick="javascript:return del()" href="delete.php?yt=<?php echo $row["song_yt"]; ?>">刪除歌曲</a>
</div>
<div class="block1">
    <h1><?php echo $row["song_name"] ?></h1>
    
    <P><?php echo $row["song_author"] ?></P>

</div>

<div class="block2"><h2><?php echo $row["song_singer"]." ".$row["song_name"] ?></h2></div>
    
<div class="block3">
    
<?php echo $row["song_desc"] ?>

    <hr>
    <P><a target=_blank href="https://www.youtube.com/watch?v=<?php echo $row["song_yt"] ?>">
    <?php echo $row["song_singer"]." ".$row["song_name"] ?></a></P><P>&nbsp;</P>
    <P><iframe width="90%" height="315" src="https://www.youtube.com/embed/<?php echo $row["song_yt"] ?>" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
    </P>
</div>
</body>
</html>
<?php
}
$conn->close();
?>

顯示歌曲資料畫面如下



(6) check.inc.php 

<?php
session_start();
if (($_SESSION['login'] !='ok')) {
header("location:login.php");
}

?> 

(7) add.php 加入歌曲資料

<?php
require_once("check.inc.php");
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>新增歌曲</title>
<style>
  input[type=text] {
  border: #c1c1c1 solid 1px;
  height: 20px;
  padding: 8px 7px;
  width: 50%;
}

input[type="submit"]{padding:5px 15px; background:#ccc; border:0 none;
cursor:pointer;
-webkit-border-radius: 5px;
border-radius: 5px; }

</style>
</head>
<body>
<P><a href='logout.php'>登出</a>&nbsp;<a href='index.php'>歌曲列表</a></P>

    <form method="post" action="">
    <P>&nbsp;</P>歌曲Youtube參數 : 
    https://www.youtube.com/watch?v=<span style="color:red">778oM7Vs5_o</span><br><input type="text" name="song_yt"><br>
    <P>&nbsp;</P>歌曲名稱 : <br><input type="text" name="song_name"><br>
    <P>&nbsp;</P>歌曲作者 : <br><input type="text" name="song_author"><br>
    <P>&nbsp;</P>歌曲演唱者 : <br><input type="text" name="song_singer"><br>
    <P>&nbsp;</P>歌曲資訊 : <br><textarea name="song_desc" rows="10" cols="50"></textarea><br>
    <P><input type="submit"></P>
    </form>
    
    <?php
    
    if (isset($_POST['song_yt'])) {
        
        $yt=$_POST['song_yt'];
        $sn=$_POST['song_name'];
        $sa=$_POST['song_author'];
        $ss=$_POST['song_singer'];
        $sd=$_POST['song_desc'];
        
        $yt = str_replace("'", "", $yt);
        $yt = str_replace('"', '', $yt);
        $sn = str_replace("'", "", $sn);
        $sn = str_replace('"', '', $sn);
        $sa = str_replace("'", "", $sa);
        $sa = str_replace('"', '', $sa);
        $ss = str_replace("'", "", $ss);
        $ss = str_replace('"', '', $ss);
        $sd = str_replace("'", "", $sd);
        $sd = str_replace('"', '', $sd);
        
        require_once "config.php";
        $sql = "INSERT INTO song (song_yt, song_name, song_author, song_singer, song_desc) VALUES ('".$yt."','".$sn."','".$sa."','".$ss."','".$sd."')";
        echo "<P>執行結果 :</P>";
        echo "<P>".$sql."</P>";
        $result = $conn->query($sql);
        echo "<P>".mysqli_error($conn)."</P>";
        
    }

?>
</body></html>

加入歌曲資料畫面如下



(8) delete.php 刪除歌曲資料

<?php
require_once("check.inc.php");
session_start();
require_once "config.php";

    $yt=$_GET['yt'];
    $sql = "delete from song where song_yt='".$yt."'";
    $result = $conn->query($sql);
   
?>

<!DOCTYPE html>
<html>
<head>
<title>Refresh</title>
<meta content='0; url=你的歌曲列表網址' http-equiv='refresh'>
</head>
<body>
</body>
</html>

刪除歌曲資料畫面如下






(9) edit.php 顯示編輯畫面

<?php
require_once("check.inc.php");
session_start();
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>編輯歌曲</title>
<style>
  input[type=text] {
  border: #c1c1c1 solid 1px;
  height: 20px;
  padding: 8px 7px;
  width: 50%;
}

input[type="submit"]{padding:5px 15px; background:#ccc; border:0 none;
cursor:pointer;
-webkit-border-radius: 5px;
border-radius: 5px; }

</style>
</head>
<body>
<?php
    echo "<P><a href='logout.php'>登出</a>&nbsp;<a href='index.php'>歌曲列表</a></P>";
    
    require_once "config.php";
    $yt=$_GET['yt'];
    $sql = "select * from song where song_yt='".$yt."'";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
        $row = $result->fetch_assoc();
        $sn=$row["song_name"];
        $sa=$row["song_author"];
        $ss=$row["song_singer"];
        $sd=$row["song_desc"];
        
        ?>
        
        <form method="post" action="goedit.php">
        <input type="hidden" name="song_yt" value="<?php echo $yt; ?>"><br>
        <P>&nbsp;</P>歌曲Youtube參數 : <a href="https://www.youtube.com/watch?v=<?php echo $yt; ?>" target=_blank><?php echo $yt; ?></a><br>
        <P>&nbsp;</P>歌曲名稱 : <br><input type="text" name="song_name" value="<?php echo $sn; ?>"><br>
        <P>&nbsp;</P>歌曲作者 : <br><input type="text" name="song_author" value="<?php echo $sa; ?>"><br>
        <P>&nbsp;</P>歌曲演唱者 : <br><input type="text" name="song_singer" value="<?php echo $ss; ?>"><br>
        <P>&nbsp;</P>歌曲資訊 : <br><textarea name="song_desc" rows="10" cols="50"><?php echo $sd; ?></textarea><br>
        <P><input type="submit"></P>
        </form>
        
        <?php
    }

?>
</body></html>

編輯畫面如下




(10) goedit.php 執行資料編輯

<?php
require_once("check.inc.php");
session_start();

    require_once "config.php";
    
    $yt=$_POST['song_yt'];
    $sn=$_POST['song_name'];
    $sa=$_POST['song_author'];
    $ss=$_POST['song_singer'];
    $sd=$_POST['song_desc'];
    
    $sn = str_replace("'", "", $sn);
    $sn = str_replace('"', '', $sn);
    $sa = str_replace("'", "", $sa);
    $sa = str_replace('"', '', $sa);
    $ss = str_replace("'", "", $ss);
    $ss = str_replace('"', '', $ss);
    $sd = str_replace("'", "", $sd);
    $sd = str_replace('"', '', $sd);
        
    $sql = "update song set song_name='".$sn."', song_author='".$sa."', song_singer='".$ss."', song_desc='".$sd."' where song_yt='".$yt."'";
    
    echo "<P><a href='index.php'>歌曲列表</a></P>";
    echo "<P>執行結果 :</P>";
    echo "<P>".$sql."</P>";
    $result = $conn->query($sql);
    echo "<P>".mysqli_error($conn)."</P>";
    
?>




張貼留言

0 留言