Файл: project.php
Строк: 161
<?php
require '__core/inc.php';
$p_id = $_GET['id'];
$result = $dbh->prepare("SELECT * FROM `projects` WHERE `p_id` = :p_id");
$result->bindValue(":p_id", $p_id, PDO::PARAM_INT);
$result->execute();
$project = $result->fetch(PDO::FETCH_ASSOC);
if (empty($project)) {
header("Location: /index.php");
exit;
}
/* Сканируем скриншоты */
$path = 'screen/' . $project['p_id'];
if (is_dir($path)) {
$data = scandir($path);
unset($data[0], $data[1]);
} else $data = array();
# Проверка на повторный отзыв
$result = $dbh->prepare("SELECT * FROM `project_comments` WHERE `c_p_id` = :p_id && (c_ip = :ip && c_uagent = :uagent)");
$result->bindValue(":p_id", $p_id, PDO::PARAM_INT);
$result->bindValue(":ip", $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR);
$result->bindValue(":uagent", $_SERVER['HTTP_USER_AGENT'], PDO::PARAM_STR);
$result->execute();
$check = $result->rowCount();
if(!empty($_POST) && empty($check)) {
$name = trim(htmlspecialchars($_POST['name']));
$text = trim(htmlspecialchars($_POST['text']));
$rating = abs((int)$_POST['rating']);
$err = array();
if (empty($name)) {
$err[] = 'Заполните поле "Ваше имя"';
}
if (empty($text)) {
$err[] = 'Заполните поле "Комментарий"';
}
if (!in_array($rating, array(1,2,3,4,5))) {
$err[] = 'Не выбран рейтинг';
}
if (!empty($text) && strlen($text) < 40) {
$err[] = 'Текст комментария должен состоять минимум из 40 символов';
}
if (!empty($name) && strlen($name) < 2) {
$err[] = 'Имя должно состоять минимум из 2 символов';
}
/* Проверка IP в чёрном списке */
$sql = "SELECT * FROM `blacklist` WHERE `ip` = :ip";
$result = $dbh->prepare($sql);
$result->bindValue(":ip", $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR);
$result->execute();
$check = $result->fetch(PDO::FETCH_ASSOC);
if (!empty($check)) {
$err[] = 'Ваш IP находится в черном списке. Вы не можете писать отзывы.';
}
if (empty($err)) {
$result = $dbh->prepare("INSERT INTO project_comments (c_name, c_text, c_rating, c_date, c_p_id, c_ip, c_uagent) VALUES (:name, :text, :rating, NOW(), :p_id, :ip, :uagent)");
$result->bindValue(":name", $name, PDO::PARAM_STR);
$result->bindValue(":text", $text, PDO::PARAM_STR);
$result->bindValue(":rating", $rating, PDO::PARAM_INT);
$result->bindValue(":p_id", $p_id, PDO::PARAM_INT);
$result->bindValue(":ip", $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR);
$result->bindValue(":uagent", $_SERVER['HTTP_USER_AGENT'], PDO::PARAM_STR);
$result->execute();
$_SESSION['msg'] = 'Отзыв успешно добавлен';
header("Location: /project/" . $p_id);
exit;
}
}
if (!empty($_GET['delete']) && !empty($_SESSION['admin'])) {
$com_id = $_GET['delete'];
$sql = "DELETE FROM `project_comments` WHERE `c_id` = :c_id";
$result = $dbh->prepare($sql);
$result->bindValue(":c_id", $com_id, PDO::PARAM_INT);
$result->execute();
header("Location: /project/" . $p_id);
exit;
}
if (!empty($_GET['banip']) && !empty($_SESSION['admin'])) {
$ip = $_GET['banip'];
$sql = "INSERT INTO `blacklist` (`ip`) VALUES (:ip)";
$result = $dbh->prepare($sql);
$result->bindValue(":ip", $ip, PDO::PARAM_STR);
$result->execute();
header("Location: /project/" . $p_id);
exit;
}
head(array('title' => htmlspecialchars($project['p_name']) . ' | Портфолио | Миледи'));
get_msg();
if (!empty($err)):
?>
<div class="error">
<ul>
<?php foreach ($err as $error): ?>
<li><?= $error ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php
endif;
?>
<div class="content">
<div class="title">
<?= htmlspecialchars($project['p_name']) ?>
</div>
<div id="thumbnails">
<b>Скриншоты:</b><br />
<?php if (!empty($project['p_screen']) && @is_file($path . '/' . $project['p_screen'])): ?>
<a href="/<?= $path ?>/<?= $project['p_screen'] ?>"><img src="/<?= $path ?>/<?= $project['p_screen'] ?>" alt="" width="160px"/></a><br />
<?php endif; ?>
<?php if (count($data)): ?>
<?php foreach ($data as $screen): ?>
<?php if ($project['p_screen'] != $screen): ?>
<a href="/<?= $path ?>/<?= $screen ?>"><img src="/<?= $path ?>/<?= $screen ?>" alt="" width="80px"/></a>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
</div>
<br /><br />
<b>Дополнительные файлы:</b><br />
<?php
$result = $dbh->prepare("SELECT * FROM `files` WHERE `parent` = :p_id");
$result->bindValue(":p_id", $p_id, PDO::PARAM_INT);
$result->execute();
$files = $result->fetchAll(PDO::FETCH_ASSOC);
?>
<?php foreach ($files AS $file): ?>
<b>[<?= $file['f_ext'] ?>]</b> <a href="/download/<?= $p_id ?>/<?= $file['f_id'] ?>"><?= $file['f_name'] ?></a> (<?= formatSize($file['f_size']) ?>) (<?= $file['f_loads_count']?> скачиваний)<br />
<?php endforeach; ?>
<br />
<ul>
<li>Название: <b><?= htmlspecialchars($project['p_name']) ?></b></li>
<li>Описание: <b><?= nl2br(htmlspecialchars($project['p_desc'])) ?></b></li>
<li>Сроки выполнения: <b><?= htmlspecialchars($project['p_ltime']) ?></b></li>
<li>Время добавления: <b><?= $project['p_date'] ?></b></li>
</ul>
<?php if (empty($check)): ?>
<form method="POST">
<ul>
<li><label for="name">Ваше имя:</label></li>
<li><input id="name" name="name" type="text" value="<?= (isset($_POST['name']) ? htmlspecialchars($_POST['name']) : NULL) ?>"/></li>
<li><label for="rating_1">1</label><input id="rating_1" name="rating" value="1" type="radio" <?= (isset($_POST['rating']) && $_POST['rating'] == 1 ? 'checked' : NULL) ?>/></li>
<li><label for="rating_2">2</label><input id="rating_2" name="rating" value="2" type="radio" <?= (isset($_POST['rating']) && $_POST['rating'] == 2 ? 'checked' : NULL) ?>/></li>
<li><label for="rating_3">3</label><input id="rating_3" name="rating" value="3" type="radio" <?= (isset($_POST['rating']) && $_POST['rating'] == 3 ? 'checked' : NULL) ?>/></li>
<li><label for="rating_4">4</label><input id="rating_4" name="rating" value="4" type="radio" <?= (isset($_POST['rating']) && $_POST['rating'] == 4 ? 'checked' : NULL) ?>/></li>
<li><label for="rating_5">5</label><input id="rating_5" name="rating" value="5" type="radio" <?= (isset($_POST['rating']) && $_POST['rating'] == 5 ? 'checked' : NULL) ?>/></li>
<li><label for="text">Комментарий:</label></li>
<li><textarea id="text" name="text"><?= (isset($_POST['text']) ? htmlspecialchars($_POST['text']) : NULL) ?></textarea></li>
<li><button>Оценить</button></li>
</ul>
</form>
<?php endif; ?>
</div>
<div class="content">
<br /><b>Отзывы к работе:</b><br />
<ul>
<?php
$total = $dbh->query("SELECT * FROM `project_comments` WHERE `c_p_id` = '{$p_id}'")->rowCount();
$p = new Pagination;
$p->sett($total, $config['other']['perpage']);
$sql = $dbh->query("SELECT * FROM `project_comments` WHERE `c_p_id` = '{$p_id}'" . $p->limit());
$data = $sql->fetchAll(PDO::FETCH_ASSOC);
if ($total):
foreach ($data as $comment):
?>
<li>
<b><?= htmlspecialchars($comment['c_name']) ?></b> | <?= ratingGet($comment['c_rating']) ?><br />
<?= nl2br(htmlspecialchars($comment['c_text'])) ?>
<?php if (isset($_SESSION['admin'])): ?>
<br />
<a href="/project/<?= $p_id ?>?delete=<?= $comment['c_id'] ?>">Удалить</a><br />
<b>IP:</b> <?= $comment['c_ip'] ?> <a href="/project/<?= $p_id ?>?banip=<?= $comment['c_ip'] ?>">[В ЧС]</a><br />
<b>uAgent:</b> <?= $comment['c_uagent'] ?><br />
<?php endif; ?>
</li>
<?php
endforeach;
echo $p->get();
else:
?>
<li>Еще никто не оценивал</li>
<?php endif; ?>
</ul>
</div>
<div class="nav">
<ul>
<li><a href="/category/<?= $project['p_cid'] ?>">В категорию</a></li>
<li><a href="/">Главная</a></li>
</ul>
</div>
<?php
footer();
?>