|
|
|
|
|
для: Ури Геллер
(06.02.2010 в 18:25)
| | Тень, к сожалению твои собщения были удалены модератором, я их не прочитал, можешь снова высказаться по теме | |
|
|
|
|
|
|
|
для: .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;
}
?>
|
Про ссылки которые не должен видеть посетитель, это уже просчеты проектирования которые сложно (не охота) исправлять | |
|
|
|
|
автор: .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 в 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 в 18:50)
| | да убрал я эту точку теперь всё работает | |
|
|
|
|
автор: .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, которое закончилось тотальной перенастройкой серверов, с неоднократными переходами из под одной виндовс под другую :) | |
|
|
|
|
|
|
|
для: Ури Геллер
(05.02.2010 в 20:38)
| | Тут мелких неисправностей нет, пример можно увидеть на http://www.moysite.co.cc | |
|
|
|
|
автор: Тень& (06.02.2010 в 15:37) |
|
|
для: neadekvat
(05.02.2010 в 22:28)
| | stripslashes нужно делать при включенных magic quotes вне зависимости от того связан скрипт с БД или нет. | |
|
|
|
|
|
|
|
для: Ури Геллер
(06.02.2010 в 14:50)
| | Для этого применяется htmlspecialchars
А вовсе не. | |
|
|
|
|
|
|
|
для: neadekvat
(05.02.2010 в 22:28)
| | А про ковычки это вообще бестолковое замечание, тем более я уже ответил чтобы теги с аттрибутами отображались | |
|
|
| |
|