Htaccess adalah file konfigurasi yang disediakan oleh web server apache, yang biasanya digunakan untuk mengubah settingan default dari apache. Htaccess biasanya diletakkan pada root direktori.
RewriteEngine on RewriteRule ^index.html$ ?page=home [L] RewriteRule ^about.html$ ?page=about [L] RewriteRule ^blog.html$ ?page=blog [L] RewriteRule ^addblog(.*)\.html$ ?page=addblog [L] RewriteRule ^save(.*)\.html$ ?page=saveblog [L] RewriteRule ^blog-(.*)\.html$ ?page=readblog&blog_id=$1 [L] RewriteRule ^edit-(.*)\.html$ ?page=editblog&blog_id=$1 [L] RewriteRule ^update(.*)\.html$ ?page=update [L] RewriteRule ^delete-(.*)\.html$ ?page=deleteblog&blog_id=$1 [L] RewriteRule ^page_blog-(.*)\.html$ ?page=blog&page_blog=$1 [L] RewriteRule ^contact.html$ ?page=contact [L] Options All -Indexes
RewriteEngine on RewriteRule ^index.html$ ?page=home [L] RewriteRule ^about.html$ ?page=about [L] RewriteRule ^blog.html$ ?page=blog [L] RewriteRule ^addblog(.*)\.html$ ?page=addblog [L] RewriteRule ^save(.*)\.html$ ?page=saveblog [L] RewriteRule ^blog-(.*)\.html$ ?page=readblog&blog_id=$1 [L] RewriteRule ^edit-(.*)\.html$ ?page=editblog&blog_id=$1 [L] RewriteRule ^update(.*)\.html$ ?page=update [L] RewriteRule ^delete-(.*)\.html$ ?page=deleteblog&blog_id=$1 [L] RewriteRule ^page_blog-(.*)\.html$ ?page=blog&page_blog=$1 [L] RewriteRule ^contact.html$ ?page=contact [L] Options All -Indexes
CREATE TABLE `blog` ( `id` int(11) NOT NULL, `title` varchar(255) DEFAULT NULL, `description` varchar(255) DEFAULT NULL, `slug` varchar(255) DEFAULT NULL, `image` varchar(255) DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp(), `updated_at` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
<?php
$host="localhost";
$user="root";
$pass="";
$database="dbtemp";
$mysqli=new mysqli($host,$user,$pass,$database);
if (mysqli_connect_errno()) {
trigger_error('Koneksi ke database gagal: ' . mysqli_connect_error(), E_USER_ERROR);
}
?>
<!doctype html>
<html lang="en">
<head>
<title>CRUD (Create Read update delete) Menggunakan Htaccess Rewriterule</title>
<meta content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" name="viewport"/>
<meta content="Aguzrybudy" name="author"/>
<link href="http://www.aguzrybudy.com/images/index/favicon.webp" rel="shortcut icon" type="image/x-icon" />
<link href="css/bootstrap.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<style>
body {
min-height: 75rem;
padding-top: 4.5rem;
}
.bd-placeholder-img {
font-size: 1.125rem;
text-anchor: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
@media (min-width: 768px) {
.bd-placeholder-img-lg {
font-size: 3.5rem;
}
}
ul.alink{
list-style: none;
padding-left: 0px;
}
ul.alink li{
display: inline;
margin-right: 5px;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
<a class="navbar-brand" href="http://www.aguzrybudy.com" target="_blank">Aguzrybudy</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="index.html">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="blog.html">Blog</a>
</li>
<li class="nav-item">
<a class="nav-link" href="about.html">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="contact.html">Contact</a>
</li>
</ul>
<form class="form-inline mt-2 mt-md-0">
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>
<main role="main" class="container">
<div class="container">
<div class="jumbotron">
</div>
</div>
<div class="container">
<h3>CRUD (Create Read update delete) Menggunakan Htaccess Rewriterule <span class="badge badge-success">PHP 7.3.9</span></h3>
<p class="mb-4">By Aguzrybudy, Jum'at 13 September 2019 </p>
<?php include "page.php";?>
</div>
<div class="container mt-4">
<div class="jumbotron">
</div>
</div>
</main>
<footer class="footer mt-auto py-3">
<div class="container">
<span class="text-muted">© 2019 Copyright Aguzrybudy. All rights reserved.</span>
</div>
</footer>
</body>
</html>
<?php
//error_reporting(1);
if(isset( $_GET['page']) && $_GET['page'] == "home"){
include"home.php";
}
elseif(isset( $_GET['page']) && $_GET['page'] == "blog"){
include"blog.php";
}
elseif(isset( $_GET['page']) && $_GET['page'] == "addblog"){
include"add_blog.php";
}
elseif(isset( $_GET['page']) && $_GET['page'] == "saveblog"){
include"save.php";
}
elseif(isset( $_GET['page']) && $_GET['page'] == "readblog"){
include"blog_detail.php";
}
elseif(isset( $_GET['page']) && $_GET['page'] == "editblog"){
include"edit_form.php";
}
elseif(isset( $_GET['page']) && $_GET['page'] == "update"){
include"update.php";
}
elseif(isset( $_GET['page']) && $_GET['page'] == "deleteblog"){
include"delete_blog.php";
}
elseif(isset( $_GET['page']) && $_GET['page'] == "about"){
include"about.php";
}
elseif(isset( $_GET['page']) && $_GET['page'] == "contact"){
include"contact.php";
}
else{
include"home.php";
}
?>
<?php
class BlogPaging{
function cariPosisi($batas){
if(empty($_GET['page_blog'])){
$posisi=0;
$_GET['page_blog']=1;
}
else{
$posisi = ($_GET['page_blog']-1) * $batas;
}
return $posisi;
}
// Fungsi untuk menghitung total halaman
function jumlahHalaman($jmldata, $batas){
$jmlhalaman = ceil($jmldata/$batas);
return $jmlhalaman;
}
// Fungsi untuk link halaman 1,2,3
function navHalaman($halaman_aktif, $jmlhalaman){
$link_halaman = "<li></li>";
// Link ke halaman pertama (first) dan sebelumnya (prev)
if($halaman_aktif > 1){
$prev = $halaman_aktif-1;
$link_halaman .= "
<li class='page-item'><a class='page-link' href=page_blog-1.html>First</a></li>
<li class='page-item'><a class='page-link' href=page_blog-$prev.html> Prev</a></li> ";
}
else{
$link_halaman .= " <li class='page-item'><a class='page-link' href='#' aria-label='Previous'> <span aria-hidden='true'>Prev</span> </a></li> ";
}
// Link halaman 1,2,3, ...
$angka = ($halaman_aktif > 3 ? "<li class='page-item'> " : " </li>");
for ($i=$halaman_aktif-2; $i<$halaman_aktif; $i++){
if ($i < 1)
continue;
$angka .= "<li class='page-item'><a class='page-link' href=page_blog-$i.html>$i</a></li> ";
}
$angka .= " <li class='page-item active'><a class='page-link' href='#'>$halaman_aktif <span class='sr-only'>(current)</span></a> </li> ";
for($i=$halaman_aktif+1; $i<($halaman_aktif+3); $i++){
if($i > $jmlhalaman)
break;
$angka .= "<li class='page-item'><a class='page-link' href=page_blog-$i.html>$i</a></li> ";
}
$angka .= ($halaman_aktif+2<$jmlhalaman ? " <li class='page-item'> <a class='page-link' href=page_blog-$jmlhalaman.html> $jmlhalaman</a> " : " </li>");
$link_halaman .= "<li>$angka</li>";
// Link ke halaman berikutnya (Next) dan terakhir (Last)
if($halaman_aktif < $jmlhalaman){
$next = $halaman_aktif+1;
$link_halaman .= "
<li class='page-item'> <a class='page-link' href=page_blog-$next.html>Next</a></li>
<li class='page-item'><a class='page-link' href=page_blog-$jmlhalaman.html>Last </a><li>";
}
return $link_halaman;
}
}
?>
<?php
/**
* make a string as slug
* @return string
*/
function slug($string)
{
$r = array (' ');
$a = array ('-','/','\\',',','.','#',':',';','\'','"','[',']','{','}',')','(','|','`','~','!','@','%','$','^','&','*','=','?','+');
$string = str_replace($a, '', $string); // Hilangkan karakter yang telah disebutkan di array $d
$string = strtolower(str_replace($r, '-', $string)); // Ganti spasi dengan tanda - dan ubah hurufnya menjadi kecil semua
return $string;
}
/**
* truncate a string provided by the maximum limit without breaking a word
* @param string $str
* @param integer $maxlen
* @return string
*/
function strLimit($str, $maxlen): string
{
if (strlen($str) <= $maxlen) return $str;
$newstr = substr($str, 0, $maxlen);
if (substr($newstr, -1, 1) != ' ') $newstr = substr($newstr, 0, strrpos($newstr, " "));
return $newstr;
}
/**
* Upload image to specific folder
* @return image
*/
function uploadImage($image_location, $image){
$vdir_upload = "images/blog/";
$vfile_upload = $vdir_upload . $image;
move_uploaded_file($image_location, $vfile_upload);
}
<div class="row mb-2">
<?php
include "koneksi.php";
include"function.php";
include"BlogPaging.php";
$p = new BlogPaging;
$batas = 4;
$posisi = $p->cariPosisi($batas);
$data_blog=$mysqli->query("SELECT * FROM blog ORDER BY id DESC LIMIT $posisi,$batas");
while($row=mysqli_fetch_array($data_blog)){
?>
<div class="col-md-6">
<div class="row no-gutters border rounded overflow-hidden flex-md-row mb-4 shadow-sm h-md-250 position-relative">
<div class="col p-4 d-flex flex-column position-static">
<strong class="d-inline-block mb-2 text-primary">Blog</strong>
<h3 class="mb-0"><?php echo strLimit($row['description'], 20); ?></h3>
<div class="mb-1 text-muted"><?php echo $row['created_at']; ?></div>
<p class="card-text mb-auto"><?php echo strLimit($row['description'], 50); ?></p>
<ul class="alink">
<li> <a href="blog-<?php echo $row['id']; ?>.html" >Read</a></li>
<li> <a href="edit-<?php echo $row['id']; ?>.html" >Edit</a></li>
<li><a href="delete-<?php echo $row['id']; ?>.html" >Delete</a></li>
</ul>
</div>
<div class="col-auto d-none d-lg-block">
<img src="images/blog/<?php echo $row['image']; ?>" alt="" height="210" width="210" style="object-fit: cover"/>
</div>
</div>
</div>
<?php } ?>
</div>
<div class="row mb-2">
<div class="col-md-12 mb-3">
<a href="addblog.html" class="btn btn-primary">Add New Blog</a>
</div>
<?php
include "koneksi.php";
include"function.php";
include"BlogPaging.php";
$p = new BlogPaging;
$batas = 4;
$posisi = $p->cariPosisi($batas);
$data_blog=$mysqli->query("SELECT * FROM blog ORDER BY id DESC LIMIT $posisi,$batas");
while($row=mysqli_fetch_array($data_blog)){
?>
<div class="col-md-6">
<div class="row no-gutters border rounded overflow-hidden flex-md-row mb-4 shadow-sm h-md-250 position-relative">
<div class="col p-4 d-flex flex-column position-static">
<strong class="d-inline-block mb-2 text-primary">Blog</strong>
<h3 class="mb-0"><?php echo strLimit($row['description'], 20); ?></h3>
<div class="mb-1 text-muted"><?php echo $row['created_at']; ?></div>
<p class="card-text mb-auto"><?php echo strLimit($row['description'], 50); ?></p>
<ul class="alink">
<li> <a href="blog-<?php echo $row['id']; ?>.html" >Read</a></li>
<li> <a href="edit-<?php echo $row['id']; ?>.html" >Edit</a></li>
<li><a href="delete-<?php echo $row['id']; ?>.html" >Delete</a></li>
</ul>
</div>
<div class="col-auto d-none d-lg-block">
<img src="images/blog/<?php echo $row['image']; ?>" alt="" height="210" width="210" style="object-fit: cover"/>
</div>
</div>
</div>
<?php } ?>
</div>
<?php
$jmldata = mysqli_num_rows($mysqli->query("SELECT * FROM blog"));
$jmlhalaman = $p->jumlahHalaman($jmldata, $batas);
$linkHalaman = $p->navHalaman($_GET['page_blog'], $jmlhalaman);
echo "
<nav aria-label='Page navigation example'>
<ul class='pagination'>
<li class='page-item'> $linkHalaman </li>
</ul>
</nav>";
?>
<form method="POST" action="save.html" enctype="multipart/form-data">
<div class="form-group">
<label for="Title">Title</label>
<input type="text" class="form-control" id="title" placeholder="Title" name="title" equired="">
</div>
<div class="form-group">
<label for="Description">Description</label>
<textarea class="form-control" id="Description" placeholder="Description" name="description" equired=""></textarea>
</div>
<div class="form-group">
<label for="Image">Image</label>
<input type="file" class="form-control" id="fupload" name="fupload" required="">
</div>
<div class="form-group">
<label for="Date">Date</label>
<input type="text" class="form-control" id="Date" placeholder="<?php echo date("Y-m-d H:i:s") ;?>" name="date" disabled>
</div>
<button type="submit" class="btn btn-primary">Save</button>
<button type="reset" class="btn btn-danger">Reset</button>
</form>
<?php
include "koneksi.php";
$blog_id = $_GET['blog_id'];
$sql = $mysqli->query("select * from blog where id='$blog_id' ");
$row = mysqli_fetch_array($sql);
unlink('images/blog/'.$row['image']);
$delete = $mysqli->query("Delete From blog where id='$blog_id' ");
if (!$delete) {
echo "Gagal",mysqli_error();
}else{
header('location:blog.html');
}
?>
<?php
include "koneksi.php";
include"function.php";
$blog_id = $_GET['blog_id'];
$sql = $mysqli->query("select * from blog where id='$blog_id' ");
$row = mysqli_fetch_array($sql);
?>
<form action="update.html" method="POST" enctype="multipart/form-data">
<h4>Contoh form edit menggunakan httaccess</h4>
<fieldset class="form-group">
<label for="Title">Title</label>
<input type="hidden" class="form-control" id="blog_id" value="<?php echo $row['id'];?>" name="blog_id">
<input type="text" class="form-control" id="title" value="<?php echo $row['title'];?>" name="title">
</fieldset>
<fieldset class="form-group">
<label for="Description">Description</label>
<textarea class="form-control" id="Description" name="description"><?php echo $row['description'];?></textarea>
</fieldset>
<fieldset class="form-group">
<label for="Image">Image</label>
<input type="file" class="form-control" id="image" name="fupload">
<input type="hidden" value="<?php echo $row['image'];?>" name="imagein">
</fieldset>
<fieldset class="form-group">
<label for="Date">Date</label>
<input type="text" class="form-control" id="Date" value="<?php echo $row['created_at'];?>" name="date" disabled>
</fieldset>
<fieldset class="form-group">
<label for="Date"></label>
<button type="submit" class="btn btn-success">Update</button>
<button type="button" class="btn btn-danger" onclick="self.history.back()">Back</button>
</fieldset>
</form>
<?php
include "koneksi.php";
$id = $_GET['blog_id'];
$sql = $mysqli->query("select * from blog where id ='$id' ");
$row = mysqli_fetch_array($sql);
?>
<div class="row">
<div class="col-md-12 blog-main">
<div class="blog-post">
<h2 class="blog-post-title mb-3"><?php echo $row['title'];?></h2>
<div class="blog-image mb-3">
<img src="images/blog/<?php echo $row['image']; ?>" alt="" style="object-fit: cover;width: 100%;"/>
</div>
<p class="blog-post-meta mb-3"><?php echo $row['created_at'];?></p>
<p><?php echo $row['description'];?></p>
<hr>
<button onclick="self.history.back()" class="btn btn-info">Back</button>
</div>
</div>
</div>
<div class="alert alert-info" role="alert">
<strong>Perhatian!</strong> Untuk proses simpan updatenya buat sendiri, dibawah ini data hasil dari input postnya.
</div>
<div class="container">
<p>
<?php echo $_POST['subject'];?></p>
<p>
<?php echo $_POST['description'];?></p>
<p>
<?php echo $_POST['date'];?></p>
</div>
<?php
include"koneksi.php";
$subject = $_POST['subject'];
$description = $_POST['description'];
$update = mysql_query("UPDATE blog SET subject ='$subject',description='$description' WHERE blog_id ='$_POST[blog_id]'");
if (!$update) {
echo "Gagal",mysql_error();
}else{
header('location:blog.html');
}
?>
<a href="#" onclick="self.history.back()" class="btn btn-info">Back</a>
<div class="row mb-2"> <div class="col-md-12"> <div class="alert alert-success" role="alert"> <strong>Tentang!</strong> <p>Website ini dibuat untuk tujuan pembelajaran</p> </div> </div> </div>
<div class="row mb-2"> <div class="col-md-12"> <div class="alert alert-success" role="alert"> <strong>Kontak!</strong> <p>Silahkan kirim email ke aguzrybudy@ymail.com jika ada yang ingin di tanyakan</p> </div> </div> </div>