|
 67 Кб |
|
| указать на допущенные ошибки, недостатки, вообщем вынести вердикт гавнокод это или нет | |
|
|
|
|
|
|
|
для: Ури Геллер
(05.02.2010 в 20:38)
| | на первый взгляд
1. с включнными Noitice куча уведомлений
про всякие такие места
if ($_GET["id"]) {
$entry_id = intval($_GET["id"]);
2, Не понял куда и как пароль сохранить
3. Ссылки "вперёд" и "назад" не исчезают при отсутствии надобности
и почитать нечего, насчёт возможностей ,) и какой-же всётаки пароль | |
|
|
|
|
|
|
|
для: heed
(05.02.2010 в 21:20)
| | 12345 или 123
А про возможности добавление/редактирование/удаление категории, записи, комментарии база не нужна - залил на хост и забыл рсс лента. А про ссылки взад/вперед это дело вкуса мне они не мешают | |
|
|
|
|
|
|
|
для: heed
(05.02.2010 в 21:20)
| | >1. с включнными Noitice куча уведомлений
Thx.
Тогда я даже соваться не стану | |
|
|
|
|
|
|
|
для: Ури Геллер
(05.02.2010 в 20:38)
| | Извините конечно, это тоже самое что сказать посмотрите правильно ли я собрал машину ?
Не думаю что в Вашей папке файлов будет кто-то разбираться | |
|
|
|
|
|
|
|
для: t3ma
(05.02.2010 в 21:23)
| | может быть некоторым и просто интересно поразбираться в чём задумки там есть
, насчёт разбираться правда есть доля шутки
, комментариев в коде ещё меньше чем бывает у меня :) практически совсем нет
// что-то вроде блога на файлах, я так понял | |
|
|
|
|
|
|
|
для: Ури Геллер
(05.02.2010 в 20:38)
| | // тут есть небольшой недочет, но его исправлять мне лень// исправлено
Может, нужно было просто удалить эту строчку?
// так для красоты
$entry_id = intval($_GET["id"]); // php-inj
fwrite($f, pack("L", $cat_id)); // id категории
Зачем эти комментарии?
if (get_magic_quotes_gpc() === 1) {
$entry_name = stripslashes($entry_name);
$entry_desc = stripslashes($entry_desc);
$entry_body = stripslashes($entry_body);
}
|
Мне кажется, или магические кавычки используются при sql запросах? Тогда причем тут он.
Сообщение о том, что сообщение добавлено выводится вне зависемости от того, добавлено ли оно на самом деле или нет.
Ссылки "вперед-назад" есть, причем даже адрес страницы меняется, а вот запись мне как одна показывается - так она там и остается.
Это то, что сразу увидел, дальше капать не буду - понятно, что все очень сыро. По крайней мере, расставьте комментарии - нихрена ж не понятно, что и для чего вы делаете. | |
|
|
|
|
|
|
|
для: neadekvat
(05.02.2010 в 21:38)
| | ковычки нужно убирать чтобы можно было писать ссылки, а то в противном случае вот так получается <a href=\"\"></a> и ссылка не работает
$entry_id = intval($_GET["id"]); // php-inj
тут была php инъекция что непонятного? в id передаётся имя файла из которого считываются данные, можно было так узнать пароль администратора site.ru/entry.php?act=read&id=../blog_settings.php | |
|
|
|
|
|
|
|
для: Ури Геллер
(05.02.2010 в 22:23)
| | Вы мне ответье, причем тут магические кавычки, если у вас с бд скрипт никак не связан?
> $entry_id = intval($_GET["id"]); // php-inj
> тут была php инъекция что непонятного?
Вот и я о том же. Зачем ставить комментарии там, где и без них все ясно? | |
|
|
|
|
|
|
|
для: neadekvat
(05.02.2010 в 22:28)
| | А про ковычки это вообще бестолковое замечание, тем более я уже ответил чтобы теги с аттрибутами отображались | |
|
|
|
|
|
|
|
для: Ури Геллер
(06.02.2010 в 14:50)
| | Для этого применяется htmlspecialchars
А вовсе не. | |
|
|
|
|
автор: Тень& (06.02.2010 в 15:37) |
|
|
для: neadekvat
(05.02.2010 в 22:28)
| | stripslashes нужно делать при включенных magic quotes вне зависимости от того связан скрипт с БД или нет. | |
|
|
|
|
|
|
|
для: Ури Геллер
(05.02.2010 в 20:38)
| | c 123 зашёл
, при попытке добавления что-то
из
<form action="<?=".".$_SERVER["PHP_SELF"]."?act=".$act.(($act == "edit") ? "&id=".$entry_id : "")?>" method="post" >
получилось
http://comp/_test/_test/entry.php?act=edit&id=1
, те два _test/ вместо одного
сделал просто action="?act=......" добавило
_________________________________
http://comp/_test/comment.php?act=add&id=2
переменная
$comment_id = intval($_GET["comment_id"]);
вот поэтому полезно включать notice
, | |
|
|
|
|
|
|
|
для: heed
(05.02.2010 в 22:34)
| | У него все адреса указаны от корневой папки, поэтому тестировать в другом каталоге, кроме корневого - невозможно (разве что "на лету" менять код action'а, но мне надоело это после первого же раза) | |
|
|
|
|
|
|
|
для: neadekvat
(05.02.2010 в 22:40)
| | да это я попутал чего-то тоже ,) вообще-то оказалось добавился коммент пять раз
, просто я его не увидел на странице.
В своих таких скриптах всёже попроще разбираться, там хоть в голове какие-то комментарии частично уцелевают
, а в код я только слегка так заглянул, как-то интереснее разбираться когда всё работает
, будем ждать новой версии :) | |
|
|
|
|
|
|
|
для: heed
(05.02.2010 в 22:57)
| | А что не работает? | |
|
|
|
|
автор: .heed (06.02.2010 в 18:50) |
|
|
для: Ури Геллер
(06.02.2010 в 14:35)
| | оказалось работало
просто когда добавлял комментарий , при успешном добавлении проссто чистый лист , с таким текстом
Notice: Undefined index: comment_id in H:\home\comp\www\_test\comment.php on line 6
Notice: Undefined variable: str in H:\home\comp\www\_test\comment.php on line 19
Warning: Cannot modify header information - headers already sent by (output started at H:\home\comp\www\_test\comment.php:6) in H:\home\comp\www\_test\comment.php on line 26
|
И всё думал на главной странице коммент появиться должен, там 10 штук notice и один такой-же warning
,(кстати прокрутка появляется горизонтальная) оказалось нужно нажимать на ссылку "читать" :) проблема была в том что я текст везде один и тот-же вставлял , и не смог понять что и где показывает.
и как я говорил
<form action="<?=".".$_SERVER["PHP_SELF"]."?act=".$act.(($act == "edit") ? "&id=".$entry_id : "")?>" method="post" >это не правильный адресс
много чего не нравится
, но если-бы мне нужен был похожий скрипт, я-бы в любом случае просто сделал-бы всё сам с чистого листа, привычка, поэтому бывает только когда нужно что-то изменить совсем чуть-чуть , а всё по новой из-за какой-то мелочи делать лень ,) так появляются первые комментарии,
А-то приходится искать имена переменных , чтобы вспомнить в каком месте я что-то там такое хитрое сделал, но забыл что и где именно
Вчера посто ещё полез потом чистить error.log , и как обычно началось взаглядывание во всякие .conf, которое закончилось тотальной перенастройкой серверов, с неоднократными переходами из под одной виндовс под другую :) | |
|
|
|
|
|
|
|
для: .heed
(06.02.2010 в 18:50)
| | да убрал я эту точку теперь всё работает | |
|
|
|
|
|
|
|
для: .heed
(06.02.2010 в 18:50)
| |
<?php
include "./inc.php";
$id = intval($_GET["id"]);
$comment_id = intval($_GET["comment_id"]);
switch ($act) {
case "add":
if ($_POST["code"] !== $_SESSION["code"]) {
Top($settings["blog_title"], "Ошибка");
echo "<b>Ошибка:</b> неверный проверочный код!<br>";
Bot();
die();
}
else if (trim($_POST["name"]) === "") {
Top($settings["blog_title"], "Ошибка");
echo "<b>Ошибка:</b> вы не указали имя!<br>";
Bot();
die();
}
else if (trim($_POST["body"]) === "") {
Top($settings["blog_title"], "Ошибка");
echo "<b>Ошибка:</b> вы не ввели сообщение!<br>";
Bot();
die();
}
$f = fopen("./data/comments/$id", "ab");
flock($f, LOCK_EX);
$str.= pack("L", time());
$str.= pack("A$comment_name_size", substr(strip_tags(trim($_POST["name"])), 0, $comment_name_size));
$str.= pack("A$comment_body_size", substr(strip_tags(trim($_POST["body"])), 0, $comment_body_size));
$str.= pack("A$comment_ans_size", "");
fwrite($f, $str);
flock($f, LOCK_UN);
fclose($f);
header("Location: ./entry.php?act=read&id=$id");
die();
break;
case "edit":
include "./admin.php"; // защита страницы
$f = fopen("./data/comments/$id", "rb+");
if ($_POST["send"]) {
flock($f, LOCK_EX);
fseek($f, $comment_id * (4 + $comment_name_size + $comment_body_size + $comment_ans_size) + 4);
$str.= pack("A$comment_name_size", substr(strip_tags($_POST["name"]), 0, $comment_name_size));
$str.= pack("A$comment_body_size", substr(strip_tags($_POST["body"]), 0, $comment_body_size));
$str.= pack("A$comment_ans_size", substr(strip_tags($_POST["ans"]), 0, $comment_ans_size));
// var_dump($str);
fwrite($f, $str);
flock($f, LOCK_UN);
fclose($f);
header("Location: ./entry.php?act=read&id=$id");
die();
}
flock($f, LOCK_SH);
fseek($f, $comment_id * (4 + $comment_name_size + $comment_body_size + $comment_ans_size) + 4);
$name = trim(fread($f, $comment_name_size));
$body = trim(fread($f, $comment_body_size));
$ans = trim(fread($f, $comment_ans_size));
flock($f, LOCK_UN);
fclose($f);
Top($settings["blog_title"], "Редактировать комментарий");
echo "<form action=\"./comment.php?act=edit&id=$id&comment_id=$comment_id\" method=\"post\">
Имя: <input type=\"text\" name=\"name\" size=\"32\" value=\"".htmlspecialchars($name)."\"><br><br>
Комментарий: <br>
<textarea cols=\"32\" rows=\"5\" name=\"body\">".htmlspecialchars($body)."</textarea><br><br>
Ответ: <br>
<textarea cols=\"32\" rows=\"5\" name=\"ans\">".htmlspecialchars($ans)."</textarea><br><br>
<input type=\"submit\" name=\"send\" value=\"Отправить\"><br><br><br><br>\n</form>\n";
Bot();
break;
case "del":
include "./admin.php"; // защита страницы
$f = fopen("./data/comments/$id", "rb+");
$record_size = 4 + $comment_name_size + $comment_body_size + $comment_ans_size;
$kol = filesize("./data/comments/$id") / $record_size;
flock($f, LOCK_EX);
$i = 0;
while ($i < $kol) {
if ($rewrite) {
$seek = ftell($f);
fseek($f, $record_size, SEEK_CUR);
$str = fread($f, $record_size);
fseek($f, $seek);
fwrite($f, $str);
}
else if ($i == $comment_id) {
fseek($f, $record_size * $i, SEEK_CUR);
$rewrite = true;
}
++$i;
}
$size = ftell($f);
ftruncate($f, $size);
flock($f, LOCK_UN);
fclose($f);
header("Location: ./entry.php?act=read&id=$id");
die();
break;
}
?>
|
| |
|
|
|
|
автор: .heed (06.02.2010 в 21:15) |
|
|
для: Ури Геллер
(06.02.2010 в 20:43)
| | даже не знаю чего сказать :) то что можно вставить слово из 2048и букв и растянуть дизайн это я понял,
, то что можно отключив в браузере автоматическое перенаправление с одним и тем-же кодом с картинки напихать массу комментариев с минимальными затратами трафика, это я тоже понял.
substr(strip_tags(trim($_POST["name"])) конечно спасает кое от чего, но пустые сообщения тоже добавляются
, или наоборот никакой возможности запостить что-нибудь с < и взависимости от magic_quotes можно посмотреть только экранированные кавычки
так идея хранить комменты в одном файле интересная, я так думаю работа идёт как со строками фиксированной длинны, быстрая навигация, малый расход памяти, но только файл занимает чуть больше места. (отправлять в коментарии нулевые байты ещё не пробовал ,) всё POST'ом , а браузером не понял как в запрсе отправить %00 )
Впрочем сравнительно с таким-же скриптом на mysql , у меня под виндовс работает медленнее, но на том сайте время показывает намного лучше.
Но как-то всётаки слишком просто мне показалось, простым пользователям незачем видеть кнопки "edit" "del"
, а так время покажет, поселятся ли у вас там спам-роботы :) хоть какая капча всё-ж имеется
А так если чисто для себя то можно просто по мелочи поправить | |
|
|
|
|
|
|
|
для: .heed
(06.02.2010 в 21:15)
| | да не, пустые боле не добавляются. то что подтормаживает, это картинки, а что комментарии в одном файле, тут конечно если записей в нем будет более 10.000 то уже при удалении комментария будет занимать пару секунд, а вот вывод комментариев тысячные секунды, а нулевой байт, он погоду не делает, отключение перенаправление это как исправить мне известно, но исправлять неохота
<?php
include "./inc.php";
$id = intval($_GET["id"]);
$comment_id = intval($_GET["comment_id"]);
switch ($act) {
case "add":
if (!file_exists("./data/comments/$id")) {
Top($settings["blog_title"], "Ошибка");
echo "<b>Ошибка:</b> попытка добавления комментария к несуществующей записи!<br>";
Bot();
die();
}
else if ($_POST["code"] !== $_SESSION["code"]) {
Top($settings["blog_title"], "Ошибка");
echo "<b>Ошибка:</b> неверный проверочный код!<br>";
Bot();
die();
}
else if (trim($_POST["name"]) === "") {
Top($settings["blog_title"], "Ошибка");
echo "<b>Ошибка:</b> вы не указали имя!<br>";
Bot();
die();
}
else if (trim($_POST["body"]) === "") {
Top($settings["blog_title"], "Ошибка");
echo "<b>Ошибка:</b> вы не ввели сообщение!<br>";
Bot();
die();
}
$f = fopen("./data/comments/$id", "rb+");
flock($f, LOCK_EX);
fseek($f, 0, SEEK_END);
$str.= pack("L", time());
$str.= pack("A$comment_name_size", substr(strip_tags(trim($_POST["name"])), 0, $comment_name_size));
$str.= pack("A$comment_body_size", substr(strip_tags(trim($_POST["body"])), 0, $comment_body_size));
$str.= pack("A$comment_ans_size", "");
fwrite($f, $str);
flock($f, LOCK_UN);
fclose($f);
header("Location: ./entry.php?act=read&id=$id");
die();
break;
case "edit":
include "./admin.php"; // защита страницы
$f = fopen("./data/comments/$id", "rb+");
if ($_POST["send"]) {
flock($f, LOCK_EX);
fseek($f, $comment_id * (4 + $comment_name_size + $comment_body_size + $comment_ans_size) + 4);
$str.= pack("A$comment_name_size", substr(strip_tags($_POST["name"]), 0, $comment_name_size));
$str.= pack("A$comment_body_size", substr(strip_tags($_POST["body"]), 0, $comment_body_size));
$str.= pack("A$comment_ans_size", substr(strip_tags($_POST["ans"]), 0, $comment_ans_size));
// var_dump($str);
fwrite($f, $str);
flock($f, LOCK_UN);
fclose($f);
header("Location: ./entry.php?act=read&id=$id");
die();
}
flock($f, LOCK_SH);
fseek($f, $comment_id * (4 + $comment_name_size + $comment_body_size + $comment_ans_size) + 4);
$name = trim(fread($f, $comment_name_size));
$body = trim(fread($f, $comment_body_size));
$ans = trim(fread($f, $comment_ans_size));
flock($f, LOCK_UN);
fclose($f);
Top($settings["blog_title"], "Редактировать комментарий");
echo "<form action=\"./comment.php?act=edit&id=$id&comment_id=$comment_id\" method=\"post\">
Имя: <input type=\"text\" name=\"name\" size=\"32\" value=\"".htmlspecialchars($name)."\"><br><br>
Комментарий: <br>
<textarea cols=\"32\" rows=\"5\" name=\"body\">".htmlspecialchars($body)."</textarea><br><br>
Ответ: <br>
<textarea cols=\"32\" rows=\"5\" name=\"ans\">".htmlspecialchars($ans)."</textarea><br><br>
<input type=\"submit\" name=\"send\" value=\"Отправить\"><br><br><br><br>\n</form>\n";
Bot();
break;
case "del":
include "./admin.php"; // защита страницы
$f = fopen("./data/comments/$id", "rb+");
$record_size = 4 + $comment_name_size + $comment_body_size + $comment_ans_size;
$kol = filesize("./data/comments/$id") / $record_size;
flock($f, LOCK_EX);
$i = 0;
while ($i < $kol) {
if ($rewrite) {
$seek = ftell($f);
fseek($f, $record_size, SEEK_CUR);
$str = fread($f, $record_size);
fseek($f, $seek);
fwrite($f, $str);
}
else if ($i == $comment_id) {
fseek($f, $record_size * $i, SEEK_CUR);
$rewrite = true;
}
++$i;
}
$size = ftell($f);
ftruncate($f, $size);
flock($f, LOCK_UN);
fclose($f);
header("Location: ./entry.php?act=read&id=$id");
die();
break;
}
?>
|
Про ссылки которые не должен видеть посетитель, это уже просчеты проектирования которые сложно (не охота) исправлять | |
|
|
|
|
|
|
|
для: neadekvat
(05.02.2010 в 22:40)
| | адреса у меня относительные, а насчет того что из корня не работает то ошибка в точке в action в файлах settings.php, cat.php, entry.php если её убрать всё прекрасно работает | |
|
|
|
|
|
|
|
для: Ури Геллер
(05.02.2010 в 20:38)
| | Тут мелких неисправностей нет, пример можно увидеть на http://www.moysite.co.cc | |
|
|
|
|
|
|
|
для: Ури Геллер
(06.02.2010 в 18:25)
| | Тень, к сожалению твои собщения были удалены модератором, я их не прочитал, можешь снова высказаться по теме | |
|
|
|
|