Skip to content

Instantly share code, notes, and snippets.

@deuterium7
Created August 14, 2017 10:26
Show Gist options
  • Save deuterium7/54995d9042a08406d079596913eee53d to your computer and use it in GitHub Desktop.
Save deuterium7/54995d9042a08406d079596913eee53d to your computer and use it in GitHub Desktop.
Zabornyi Alex

ancedotes_site.sql

-- phpMyAdmin SQL Dump
-- version 4.6.5.2
-- https://www.phpmyadmin.net/
--
-- Хост: 127.0.0.1:3306
-- Время создания: Авг 14 2017 г., 13:23
-- Версия сервера: 5.5.53
-- Версия PHP: 7.1.0

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!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 */;

--
-- База данных: `anecdotes_site`
--

-- --------------------------------------------------------

--
-- Структура таблицы `anecdotes`
--

CREATE TABLE `anecdotes` (
  `id` int(11) NOT NULL,
  `category_id` int(11) NOT NULL,
  `status` enum('hidden','visible','delete') NOT NULL DEFAULT 'hidden',
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `text` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `anecdotes`
--

INSERT INTO `anecdotes` (`id`, `category_id`, `status`, `date`, `text`) VALUES
(1, 1, 'visible', '2017-08-13 18:25:16', '- Дорогой, ты математику любишь больше, чем меня! \r\n- Конечно нет, как ты могла такое подумать! \r\n- Докажи! \r\n- Пусть А - множество любимых объектов...'),
(2, 2, 'visible', '2017-08-13 18:25:25', 'В одном морском университете работает преподаватель, который известен всему вузу тем, что никогда не ставит на экзамене двойки. Вот один студент поспорил с друзьями на ящик водки, что таки получит от него неуд. Вопрос на экзамене достался этому студенту донельзя простой: «Поведение на судне в экстремальной ситуации». Преподаватель, обращаясь к студенту: \r\n— Ну-с? \r\n— Не знаю! — отвечает студент. \r\n— Если, допустим, на судне возник пожар, что вы будете делать? \r\n— Ничего! \r\n— Правильно! Главное — не паниковать! Идите, четыре!'),
(3, 1, 'visible', '2017-08-14 06:41:01', 'Каждому из нас с детства хорошо известно, что самый лучший источник бесперебойного питания — бабушка ...'),
(4, 1, 'visible', '2017-08-14 08:44:40', 'Вышла я на кухню, вижу — моя мама с моим мужем сидит. Муж плачет! А моя мама ему: \"Терпи, сынок! Я ее 22 года терпела, так я одна была, а ты не один сынок — теща с тобой! Вместе, может, еще лет 20 выдержим! \"'),
(5, 1, 'visible', '2017-08-14 08:52:08', '— Я слышал, ты опять женился ? — Да, на Таньке. — Так это же сестра твоей первой жены! — Да, просто я к теще уже как-то привык.'),
(6, 1, 'visible', '2017-08-14 08:52:08', 'Собирается мужик на рыбалку с ночевкой, жена спрашивает: — С кем из друзей поедешь-то? — Один поеду, порыбачить хочу...'),
(7, 1, 'visible', '2017-08-14 08:54:31', 'Дочка, ты замуж выходить собираешься? — Кто? Я? Да вы что?! У меня хомяк жил — сдох, а муж — это такая ответственность! Не-е-е!...'),
(8, 1, 'visible', '2017-08-14 08:54:31', 'Опрос радиослушателей дал неожиданные результаты. На первый же вопрос \"Что вы в настоящий момент слушаете? \" 98% опрошенных мужчин ответили: \"Жену\".'),
(9, 1, 'visible', '2017-08-14 08:56:19', '– Ты должен понять, – говорила она, – женщина и ее ребенок это одно целое. Ты не можешь просто ухаживать за женщиной, игнорируя ее ребенка. В моей голове что-то щелкнуло. – А ведь ты права, – сказал я. – Приходи сегодня со своей дочкой ко мне. Моя мама напечет блинов, сварит прекрасного мятного чаю. – Постой, ты живешь с мамой? – Ну, да. Женщина и ее ребенок это одно целое. Алло? В трубке были короткие гудки...'),
(10, 1, 'visible', '2017-08-14 08:56:19', '— Витя, возьми ребенка на футбол! — Зачем? Он еще маленький. — Ну а че он орет просто так!'),
(11, 1, 'visible', '2017-08-14 08:59:26', 'На слова жены \"Все, я от тебя ухожу!\" молодой муж начнет просить прощения, опытный молча переждет истерику, а бывалый грустно скажет: \"Ты только обещаешь!\"'),
(12, 1, 'visible', '2017-08-14 08:59:26', '— Что хуже, когда жена не умеет готовить, или не любит готовить? — Когда любит, но не умеет.');

-- --------------------------------------------------------

--
-- Структура таблицы `categories`
--

CREATE TABLE `categories` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `categories`
--

INSERT INTO `categories` (`id`, `name`) VALUES
(1, 'Семейные'),
(2, 'Студенты');

-- --------------------------------------------------------

--
-- Структура таблицы `users`
--

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `login` varchar(32) NOT NULL,
  `password` varchar(32) NOT NULL,
  `is_admin` tinyint(4) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `users`
--

INSERT INTO `users` (`id`, `login`, `password`, `is_admin`) VALUES
(1, 'admin', 'admin', 1);

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `anecdotes`
--
ALTER TABLE `anecdotes`
  ADD PRIMARY KEY (`id`);

--
-- Индексы таблицы `categories`
--
ALTER TABLE `categories`
  ADD PRIMARY KEY (`id`);

--
-- Индексы таблицы `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `anecdotes`
--
ALTER TABLE `anecdotes`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=13;
--
-- AUTO_INCREMENT для таблицы `categories`
--
ALTER TABLE `categories`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
--
-- AUTO_INCREMENT для таблицы `users`
--
ALTER TABLE `users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
/*!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 */;

all.php

<?php
	include('header.php');
	include('Anecdotes.php');
	$anecdote = new Anecdotes();
	
	echo "<div class='content'><div class='container'>";

	$count = $anecdote->getCount($_GET['category']);
	$allAnecdotes = $count[0]['count(id)'];
	$needPages = ceil($allAnecdotes / 10) - 1;

	if ( $allAnecdotes > 10 ) {
		$page = $_GET['page'];
		$perPage = $page * 10 + 10;

		$data = $anecdote->getLimitAnecdotesCategory($_GET['category'], $page*10, $perPage);

		if ( $page > 0 ) {
			?>
			<a href="all.php?category=<?=$data[0]['category_id']?>&page=<?=$page-1?>" class="left">Prev</a>
			<?php
		}

		if ( $page != $needPages ) {
			?>
			<a href="all.php?category=<?=$data[0]['category_id']?>&page=<?=$page+1?>" class="right">Next</a>
			<?php	
		}
	} else {
		$data = $anecdote->getAllAnecdotesCategory($_GET['category']);
	}	

	$category_name = $category->getCategoryName($data[0]['category_id']);
	echo "<h2>$category_name</h2>";

	foreach ($data as $key => $value) {
		$text = $value['text'];
		echo "<div class='anecdote'>";
		echo "<p>$text</p>";
		echo "</div>";
	}

	echo "</div></div>";
?>

Anecdotes.php

<?php
	class Anecdotes extends Database
	{
		public function __construct() {
			$this->tableName = 'anecdotes';
			parent::__construct();
		}

		public function getCount($category) {
			$stmt = $this->pdo->query("SELECT count(id) FROM $this->tableName WHERE status='visible' AND category_id=$category");
            return $stmt->fetchAll();
		}

		public function getAllLastAnecdotes() {
            $stmt = $this->pdo->query("SELECT * FROM $this->tableName WHERE status='visible' ORDER BY date DESC LIMIT 0, 5");
            return $stmt->fetchAll();
		}

		public function getAllAnecdotesCategory($category) {
			$stmt = $this->pdo->query("SELECT * FROM $this->tableName WHERE status='visible' AND category_id=$category ORDER BY date DESC");
            return $stmt->fetchAll();
		}

		public function getLimitAnecdotesCategory($category, $start, $end) {
			$stmt = $this->pdo->query("SELECT * FROM $this->tableName WHERE status='visible' AND category_id=$category ORDER BY date DESC LIMIT $start, $end");
            return $stmt->fetchAll();
		}

		public function deleteAnecdotes() {
            $this->pdo->query("DELETE FROM $this->tableName WHERE status='delete'");
		}
	}
?>

Categories.php

tableName = 'categories'; parent::__construct(); } public function getCategoryName($id) { $stmt = parent::getOne($id); $name = $stmt[0]['name']; if ( isset($name) && !empty($name) ) { return $name; } else { return false; } } } ?>

Database.php

<?php
	class Database
	{
		// CONFIGS DEFAULT
		private $host = 'localhost';
		private $db = 'anecdotes_site';
		private $user = 'root';
		private $password = '';
		private $charset = 'utf8';
		private $options = [
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
		];

		// CONFIGS OTHER
		private $dsn;
		public $pdo;
		public $tableName;

		// METHODS
		public function __construct() {
            $this->dsn = "mysql:host=$this->host;dbname=$this->db;charset=$this->charset";
            $this->pdo = new PDO($this->dsn, $this->user, $this->password, $this->options);
		}

		public function getDsn() {
            return $this->dsn;
		}

		public function getAll() {
            $stmt = $this->pdo->query("SELECT * FROM $this->tableName");
            return $stmt->fetchAll();
		}

		public function getOne($id) {
            $stmt = $this->pdo->query("SELECT * FROM $this->tableName WHERE id = $id");
            return $stmt->fetchAll();
		}

		public function deleteAll() {
            $this->pdo->query("DELETE FROM $this->tableName");
		}

		public function deleteOne($id) {
            $this->pdo->query("DELETE FROM $this->tableName WHERE id = $id");	
		}

		public function updateOne($fieldArray, $fieldValue) {
            $strField = implode(" = ? ,",$fieldArray)." = ?";
            $sql = "UPDATE $this->tableName SET $strField WHERE id = ?";
            $stmt = $this->pdo->prepare($sql);
            $stmt->execute($fieldValue);
            return $stmt;
		}

		public function insert($fieldArray, $fieldValue) {
            $strField = implode(" = ? ,",$fieldArray)." = ?";
            $sql = "INSERT INTO $this->tableName SET $strField";
            $stmt = $this->pdo->prepare($sql);
            $stmt->execute($fieldValue);
            return $stmt;
		}
	}
?>

header.php

<head> 
	<link rel="stylesheet" type="text/css" href="style.css">
</head>
<?php
	echo "<header><div class='container'><ul><li><a href='index.php'>Главная</a></li><li><a href='login.php'>Авторизация</a></li>";

	include('Database.php');
	include('Categories.php');

	$category = new Categories();
	$data = $category->getAll();

	foreach ($data as $key => $value) {
		$id = $value['id'];
		$name = $value['name'];
		?>
		<li><a href="all.php?category=<?=$id?>&page=0"><?=$name?></a></li>
		<?php
	}

	echo "</ul></div></header>";
?>

index.php

<?php
	include('header.php');

	echo "<div class='content'><div class='container'>";
	echo "<h1>Добро пожаловать на сайт анекдотов</h1>";

	include('Anecdotes.php');
	$anecdote = new Anecdotes();
	$data = $anecdote->getAllLastAnecdotes();

	foreach ($data as $key => $value) {
		$category_name = $category->getCategoryName($value['category_id']);
		$text = $value['text'];

		echo "<div class='anecdote'>";
		?>
		<h4><a href="all.php?category=<?=$value['category_id']?>&page=0"><?=$category_name?></a></h4>
		<?php
		echo "<p>$text</p>";
		echo "</div>";
	}

	echo "</div></div>";
?>

style.css

* { margin: 0; padding: 0; }
ul li { list-style: none; padding: 10px 15px; }

header { background-color: black; height: 40px; }
header li { float: left; }
header li:nth-child(2) { float: right; }
header a { color: white; }
header a, .anecdote a { text-decoration: none; }
header a:hover, .anecdote a:hover { text-decoration: underline; }

.container { width: 970px; margin: 0 auto; }
.content h1, .content h2 { text-align: center; padding: 10px 0; }
.content p { text-align: justify; }
.content a { color: black; }
.left { float: left; padding: 10px 0; }
.right { float: right; padding: 10px 0; }
.anecdote { padding: 10px 0; border-bottom: 1px solid black; }

Users.php

<?php
	class Users extends Database
	{
		public function __construct() {
			$this->tableName = 'users';
			parent::__construct();
		}
	}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment