From 87ffa36c1bfa49259e48d94f09e64f83632f0071 Mon Sep 17 00:00:00 2001 From: Maksymilian Jopek Date: Thu, 13 Apr 2023 15:47:15 +0200 Subject: v1.0.0 --- cardEdit.php | 84 ++++++++++++++++++++++++++++++ cardsList.php | 103 +++++++++++++++++++++++++++++++++++++ cms.sql | 81 +++++++++++++++++++++++++++++ consts.php | 13 +++++ dbCredentials.php | 5 ++ index.php | 91 +++++++++++++++++++++++++++++++++ login.php | 48 ++++++++++++++++++ main.php | 122 ++++++++++++++++++++++++++++++++++++++++++++ userEdit.php | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ users.php | 99 ++++++++++++++++++++++++++++++++++++ 10 files changed, 795 insertions(+) create mode 100644 cardEdit.php create mode 100644 cardsList.php create mode 100644 cms.sql create mode 100644 consts.php create mode 100644 dbCredentials.php create mode 100644 index.php create mode 100644 login.php create mode 100644 main.php create mode 100644 userEdit.php create mode 100644 users.php diff --git a/cardEdit.php b/cardEdit.php new file mode 100644 index 0000000..9fce311 --- /dev/null +++ b/cardEdit.php @@ -0,0 +1,84 @@ +setAttribute(PDO::ATTR_EMULATE_PREPARES, false); + + if ($id === -1) + $sql = "INSERT INTO `cms_card`(`title`, `body`) VALUES (:title, :body)"; + else + $sql = "UPDATE `cms_card` SET `title`= :title, `body`=:body WHERE `id`=:id"; + + $stmt = $pdo->prepare($sql); + + if ($id === -1) { + $stmt->execute([ + "title" => $_POST["title"], + "body" => nl2br($_POST["body"]), + ]); + } else { + $stmt->execute([ + "title" => $_POST["title"], + "body" => nl2br($_POST["body"]), + "id" => $_POST["id"], + ]); + } + + $_POST["edited_card"] = null; + header("Location: cardsList.php"); + exit(); +} +?> + + + + + + + + + + + + Edit card + + + +
+ +
+

Card

+
+
+ +
+ " required>
+
+
+ Dodaj"; + else + echo ""; + ?> +


+

+
+
+ + + + + \ No newline at end of file diff --git a/cardsList.php b/cardsList.php new file mode 100644 index 0000000..7e2ffc5 --- /dev/null +++ b/cardsList.php @@ -0,0 +1,103 @@ +setAttribute(PDO::ATTR_EMULATE_PREPARES, false); +$stmt = $pdo->prepare("SELECT * FROM `cms_card`"); +$stmt->execute(); +$cards = $stmt->fetchAll(PDO::FETCH_ASSOC); +function strStartsWith(string $needle, string $haystack) +{ + return substr($haystack, 0, strlen($needle)) === $needle; +} +if (isset($_GET["editType"])) { + $type = explode('!', $_GET["editType"]); + if ($type[0] === "Add" || $type[0] === "Edit") { + if ($type[0] === "Edit") { + $stmt = $pdo->prepare("SELECT * FROM `cms_card` WHERE `id` = :id"); + $stmt->execute(["id" => $type[1]]); + $card = $stmt->fetchAll(PDO::FETCH_ASSOC)[0]; + } else { + $card = [ + "title" => "", + "body" => "", + ]; + } + $_SESSION["edited_card"] = $card; + header("Location: cardEdit.php"); + } elseif ($type[0] === "Remove") { + $stmt = $pdo->prepare("DELETE FROM `cms_card` WHERE `id` = :id"); + $stmt->execute(["id" => $type[1]]); + $card = $stmt->fetchAll(PDO::FETCH_ASSOC); + header("Location: cardsList.php"); + } + exit(); +} +?> + + + + + + + + + + + + + Card List + + +
+
+ + + + + + + + + + + 25) + $title = substr($card["title"], 0, 25) . "..."; + else + $title = $card["title"]; + if (strlen($card["body"]) > 150) + $body = substr($card["body"], 0, 150) . "..."; + else + $body = $card["body"]; + echo " + + + + + "; + } + ?> + +
IdTitleBodyEdit
{$card["id"]}$title$body + Edit    + Remove +
+ Add + Go to main +
+ + + + + \ No newline at end of file diff --git a/cms.sql b/cms.sql new file mode 100644 index 0000000..3adfe9f --- /dev/null +++ b/cms.sql @@ -0,0 +1,81 @@ +-- MySQL dump 10.18 Distrib 10.3.27-MariaDB, for debian-linux-gnueabihf (armv8l) +-- +-- Host: localhost Database: cms +-- ------------------------------------------------------ +-- Server version 10.3.27-MariaDB-0+deb10u1 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `cms_card` +-- + +DROP TABLE IF EXISTS `cms_card`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `cms_card` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` text NOT NULL, + `body` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `cms_card` +-- + +LOCK TABLES `cms_card` WRITE; +/*!40000 ALTER TABLE `cms_card` DISABLE KEYS */; +INSERT INTO `cms_card` VALUES (26,'Short tile','Short body'),(27,'Very long long long long long long long long long long long long long long long long long long long long long title','Very long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long body'),(28,'New article','New article body'); +/*!40000 ALTER TABLE `cms_card` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `cms_user` +-- + +DROP TABLE IF EXISTS `cms_user`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `cms_user` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `login` varchar(50) NOT NULL, + `password` varchar(50) NOT NULL, + `firstname` varchar(50) NOT NULL, + `lastname` varchar(50) NOT NULL, + `email` varchar(50) NOT NULL, + `user_type` tinyint(3) unsigned NOT NULL DEFAULT 2, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `cms_user` +-- + +LOCK TABLES `cms_user` WRITE; +/*!40000 ALTER TABLE `cms_user` DISABLE KEYS */; +INSERT INTO `cms_user` VALUES (5,'uspiony','123','filip','polak','maks@example.com',2),(6,'123','123','name','eman','maks@example.com',2),(9,'admin','admin','admin','admin','admin@example.com',1),(10,'adamNowak','123','adam','nowak','adam@example.com',2),(11,'13','123','13','','maks@13.eu',2); +/*!40000 ALTER TABLE `cms_user` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2021-06-06 21:29:18 diff --git a/consts.php b/consts.php new file mode 100644 index 0000000..0f5e44d --- /dev/null +++ b/consts.php @@ -0,0 +1,13 @@ + 1, 1 => "admin", + "user" => 2, 2 => "user" +]; +function checkLoggedIn() +{ + if ($_SESSION["logged"] !== true) { + header("HTTP/1.0 403 Teapot not for you :'("); + header("Location: index.php"); + exit(); + } +} diff --git a/dbCredentials.php b/dbCredentials.php new file mode 100644 index 0000000..53181a5 --- /dev/null +++ b/dbCredentials.php @@ -0,0 +1,5 @@ +"); + header("Location: main.php"); +} +?> + + + + + + + + + + + + CMS - Login + + + +
+

Login

+
+
+
+
+
+
+ +
+
+
+ + +
+
+ Forgot password? +
+
+
+ +
+
+
+ You don't have an account? +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/login.php b/login.php new file mode 100644 index 0000000..cdd65e2 --- /dev/null +++ b/login.php @@ -0,0 +1,48 @@ +setAttribute(PDO::ATTR_EMULATE_PREPARES, false); +$stmt = $pdo->prepare("SELECT `firstname`, `lastname`, `email`, `user_type` FROM `cms_user` WHERE `login`=:login AND `password`=:password"); +$stmt->execute(["login" => $username, "password" => $password]); +$user = $stmt->fetchAll(PDO::FETCH_ASSOC); +if (count($user) === 0) { + header("HTTP/1.0 403 No Teapot for you :)"); + header("Location: index.php"); + $_SESSION['error'] = "Wrong username or password"; + exit(); +} +$user = $user[0]; +$_SESSION['firstname'] = $user['firstname']; +$_SESSION['lastname'] = $user['lastname']; +$_SESSION['email'] = $user['email']; +$_SESSION['user_type'] = $user['user_type']; +$_SESSION['logged'] = true; + +if ($remember === true) { + setcookie("username", $username, time() + 60 * 60 * 24 * 365); +} else { + unset($_COOKIE['username']); + setcookie('username', '', time() - 3600); +} + +header("HTTP/1.0 200 Teapot for you :]"); +header("Location: main.php"); diff --git a/main.php b/main.php new file mode 100644 index 0000000..5a0d62a --- /dev/null +++ b/main.php @@ -0,0 +1,122 @@ +setAttribute(PDO::ATTR_EMULATE_PREPARES, false); +$stmt = $pdo->prepare("SELECT * FROM `cms_card`"); +$stmt->execute(); +$cards = $stmt->fetchAll(PDO::FETCH_ASSOC); +?> + + + + + + + + + + + + + + + CMS - Main + + + +
+
+
+ 40) + $title = substr($card["title"], 0, 40) . "..."; + else + $title = $card["title"]; + if (strlen($card["body"]) > 250) + $body = substr($card["body"], 0, 250) . "..."; + else + $body = $card["body"]; + $i++; + echo " +
+
News $i
+
+
$title
+

$body

+ Read whole +
+
+ "; + } ?> +
+
+
Advertisement
+
+
By our thing
+

Out thing is better than those other things

+ Go somewhere +
+ +

+ Edit cards'; + ?> + Logout +

+ + + + + diff --git a/userEdit.php b/userEdit.php new file mode 100644 index 0000000..2eca5ff --- /dev/null +++ b/userEdit.php @@ -0,0 +1,149 @@ +setAttribute(PDO::ATTR_EMULATE_PREPARES, false); + + $stmt = $pdo->prepare("SELECT `login` FROM `cms_user` WHERE `login`=:login"); + $stmt->execute(["login" => $login]); + if ($type === "Add" && count($stmt->fetchAll(PDO::FETCH_ASSOC)) !== 0) { + $error = "User with this login already exists!"; + } else { + + if ($type === "Add") + $sql = "INSERT INTO `cms_user`(`login`, `password`, `firstname`, `lastname`, `email`) VALUES (:login, :password, :firstname, :lastname, :email)"; + elseif ($type === "Edit") + $sql = "UPDATE `cms_user` SET `login`= :login, `password`=:password, `firstname`=:firstname, `lastname`=:lastname, `email`=:email WHERE `id`=:id"; + + $stmt = $pdo->prepare($sql); + + if ($type === "Add") { + $stmt->execute([ + "firstname" => $firstname, + "lastname" => $lastname, + "login" => $login, + "email" => $email, + "password" => $password, + ]); + } elseif ($type === "Edit") { + $stmt->execute([ + "firstname" => $firstname, + "lastname" => $lastname, + "login" => $login, + "email" => $email, + "password" => $password, + "id" => $_SESSION["u_Id"], + ]); + } + $_SESSION = array_filter($_SESSION, function ($key) { + return strpos($key, 'u_') !== 0; + }, ARRAY_FILTER_USE_KEY); + header("Location: users.php"); + exit(); + } + } +} + +if ($type === "Remove") { + $id = $_SESSION["u_Id"]; + require_once "dbCredentials.php"; + $pdo = new PDO("mysql:dbname=$dbName;host=localhost;charset=utf8mb4", $dbUser, $dbPassword); + $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); + $stmt = $pdo->prepare("DELETE FROM `cms_user` WHERE `id` = :id"); + $stmt->execute(["id" => $id]); + $_SESSION = array_filter($_SESSION, function ($key) { + return strpos($key, 'u_') !== 0; + }, ARRAY_FILTER_USE_KEY); + header("Location: users.php"); + exit(); +} +$name = $login = $email = $password = $repeatPassword = ""; +if ($type === "Edit") { + $name = $_SESSION["u_Firstname"] . ' ' . $_SESSION["u_Lastname"]; + $login = $_SESSION["u_Login"]; + $email = $_SESSION["u_Email"]; + $password = $_SESSION["u_Password"]; + $repeatedPassword = $_SESSION["u_Password"]; + // unset($_SESSION["uFirstname"], $_SESSION["uLastname"], $_SESSION["uLogin"], $_SESSION["uEmail"], $_SESSION["uPassword"]); +} +?> + + + + + + + + + + + + <?= $type ?> user + + + + + +
+ +
+

user

+
+
+
+
+
+
+
+
+
+
+
+

+ Dodaj"; + else + echo ""; + ?> +


+

+
+
+ + + + \ No newline at end of file diff --git a/users.php b/users.php new file mode 100644 index 0000000..e1b1e18 --- /dev/null +++ b/users.php @@ -0,0 +1,99 @@ +setAttribute(PDO::ATTR_EMULATE_PREPARES, false); +$stmt = $pdo->prepare("SELECT * FROM `cms_user`"); +$stmt->execute(); +$users = $stmt->fetchAll(PDO::FETCH_ASSOC); + +function strStartsWith(string $needle, string $haystack) +{ + return substr($haystack, 0, strlen($needle)) === $needle; +} +if (isset($_GET["userEditType"])) { + $type = explode('!', $_GET["userEditType"]); + $_SESSION["u_Type"] = $type[0]; + if (strStartsWith("Edit", $_GET["userEditType"]) === true || strStartsWith("Remove", $_GET["userEditType"]) === true) { + $stmt = $pdo->prepare("SELECT * FROM `cms_user` WHERE `id`=:id"); + $stmt->execute(["id" => $type[1]]); + $user = $stmt->fetchAll(PDO::FETCH_ASSOC)[0]; + $_SESSION["u_Id"] = $user["id"]; + $_SESSION["u_Firstname"] = $user["firstname"]; + $_SESSION["u_Lastname"] = $user["lastname"]; + $_SESSION["u_Login"] = $user["login"]; + $_SESSION["u_Password"] = $user["password"]; + $_SESSION["u_Email"] = $user["email"]; + $_SESSION["u_user_type"] = $user["user_type"]; + } elseif (strStartsWith("Add", $_GET["userEditType"]) === true) { + $_SESSION["u_Id"] = ""; + $_SESSION["u_Firstname"] = ""; + $_SESSION["u_Lastname"] = ""; + $_SESSION["u_Login"] = ""; + $_SESSION["u_Password"] = ""; + $_SESSION["u_Email"] = ""; + $_SESSION["u_user_type"] = ""; + } elseif (strStartsWith("Remove", $_GET["userEditType"]) === true) { + $_SESSION["u_Id"] = $type[1]; + } + header("Location: userEdit.php"); + exit(); +} +?> + + + + + + + + + + + + + sCMS - Users + + + +
+ + + + + + + + + + + + + + + + + + "; + } + ?> + +
IdNameLoginAccount typeEdit
{$user["id"]}{$user["firstname"]} {$user["lastname"]}{$user["login"]}{$UserType[$user["user_type"]]} + Edit    + Remove +
+ Go to main + Add +
+ + + + \ No newline at end of file -- cgit v1.3.1