https://www.mysql.tw/2021/12/mysql-php-example.html
歌曲資料庫的新增/修改/刪除/顯示。
首先我們先把登入登出的功能做出來。
預計要有幾個檔案 :
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> </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>
<a href="edit.php?yt=<?php echo $row["song_yt"]; ?>"><img title="編輯" width="20" height="20" src="edit.png" border=0></a> <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>
<a href="add.php">新增歌曲</a>
<a href="edit.php?yt=<?php echo $row["song_yt"]; ?>">編輯歌曲</a>
<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> </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> <a href='index.php'>歌曲列表</a></P>
<form method="post" action="">
<P> </P>歌曲Youtube參數 :
https://www.youtube.com/watch?v=<span style="color:red">778oM7Vs5_o</span><br><input type="text" name="song_yt"><br>
<P> </P>歌曲名稱 : <br><input type="text" name="song_name"><br>
<P> </P>歌曲作者 : <br><input type="text" name="song_author"><br>
<P> </P>歌曲演唱者 : <br><input type="text" name="song_singer"><br>
<P> </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> <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> </P>歌曲Youtube參數 : <a href="https://www.youtube.com/watch?v=<?php echo $yt; ?>" target=_blank><?php echo $yt; ?></a><br>
<P> </P>歌曲名稱 : <br><input type="text" name="song_name" value="<?php echo $sn; ?>"><br>
<P> </P>歌曲作者 : <br><input type="text" name="song_author" value="<?php echo $sa; ?>"><br>
<P> </P>歌曲演唱者 : <br><input type="text" name="song_singer" value="<?php echo $ss; ?>"><br>
<P> </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>";
?>
沒有留言:
張貼留言