2024/08/26
2024/11/07 (修改內容)
一般而言,更新資料,要先取得原本的資料,再將原本的資料呈現給使用者,讓使用者修改。
因為delete.php會先取得資料讓我們確認,所以,我們可以利用這一個部分,然而,內容要可以修改,所以,我們參考update.php的form,但是稍作修改。
先複製delete.php,參考insert.php,修改網頁內容,更新action,並把取得的值放到text及textarea裡:
<div class="container">
<form action="update.php" method="post">
<div class="mb-3 row">
<label for="_company" class="col-sm-2 col-form-label">求才廠商</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="company" id="_company" placeholder="公司名稱" value="<?=$company?>" required>
</div>
</div>
<div class="mb-3">
<label for="_content" class="form-label">求才內容</label>
<textarea class="form-control" id="_content" name="content" rows="10" required><?=$content?></textarea>
</div>
<input class="btn btn-primary" type="submit" value="送出">
</form>
</div>
query.php也要修改一下:
<table class="table table-bordered table-striped">
<tr>
<td>編號</td>
<td>求才廠商</td>
<td>求才內容</td>
<td>刊登日期</td>
<td></td>
</tr>
<?php
while($row = mysqli_fetch_assoc($result)) {?>
<tr>
<td><?=$row["postid"]?></td>
<td><?=$row["company"]?></td>
<td><?=$row["content"]?></td>
<td><?=$row["pdate"]?></td>
<td><a href="update.php?postid=<?=$row["postid"]?>" class="btn btn-primary">修改</a>
<a href="delete.php?postid=<?=$row["postid"]?>" class="btn btn-danger">刪除</a></td>
</tr>
<?php
}
?>
</table>
試試看。看能不能看到需要修改的內容。
更新資料的sql
update job set company='Apple', content='PHP Programmer' where postid=1;
先修改$sql內容:
$sql="update job set company=?, content=? where postid=?";
接下來取得get及post裡的變數:
if ($action=="confirmed"){
$postid = $_GET["postid"];
$company = $_POST["company"];
$content = $_POST["content"];
因為要bind的parameters也不一樣,所以,要跟著修改:
mysqli_stmt_bind_param($stmt, "ssi", $company, $content, $postid);
如果只是改這樣會有問題,因為delete.php是靠「postid」及「action」去執行delete的指令,所以,要修改成:
<form action="update.php?postid=<?=$postid?>&action=confirmed" method="post">
完成了~~
if ($action=="confirmed"){
$postid = $_GET["postid"];
$company = $_POST["company"];
$content = $_POST["content"];
//update data
$postid = $_GET["postid"];
$sql="update job set company=?, content=? where postid=?";
// $sql="delete from job where postid=?";
$stmt = mysqli_stmt_init($conn);
mysqli_stmt_prepare($stmt, $sql);
mysqli_stmt_bind_param($stmt, "ssi",$company, $content, $postid);
$result = mysqli_stmt_execute($stmt);
echo $result;
if ($result){
// mysqli_close($conn);
header('location:query.php');
}
}
請利用上週的作業,讓登入成功的消費者可以更改自己的註冊資料 (70%)
account VARCHAR(20) (Primary Key)
password VARCHAR(20)
name VARCHAR(10)
在登入後利用session來記錄account
** 注意 ** 因為會修改到account,必須根據原本的account (oldAccount)去設定新的account (newAccount)
$sql="update user set account=?, password=?, name=? where account=?";
$stmt = mysqli_stmt_init($conn);
mysqli_stmt_prepare($stmt, $sql);
mysqli_stmt_bind_param($stmt, "ssss",$newAaccount, $password, $name, $oldAccount);
$result = mysqli_stmt_execute($stmt);
手動設定其中一位使用者為管理者,role的內容為'M' (10%)
管理者登入成功後 (10%)
可在登入後利用session來記錄role
可以在query.php新增、刪除、修改資料
其他人無法看到或執行這些動作 (10%)
可在登入後利用session來記錄role
非管理者不能執行insert.php、delete.php、update.php
不能只是畫面上看不到,如果直接以連結進入,也要重導到query.php
分組並決定題目