За последние 24 часа нас посетили 59255 программистов и 1841 робот. Сейчас ищут 876 программистов ...

Гостевая книга на файлах...

Тема в разделе "Прочие вопросы по PHP", создана пользователем EvelRus, 19 дек 2007.

  1. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Есть гостевая книга... полностью на файлах.... как сделать админку??? что бы возле каждого сообщения была кнопочка удалить/редактировать... желательно сам скрипт дать :))) или ОЧЕНЬ близко к ответу :)
     
  2. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    unlink("path-to-file");
    file_get_contents();
    file_put_contents();
     
  3. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Вы хотели сказать UNLINK? :)))
     
  4. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Загрузить-то я могу... а как сделать что бы каждая строка была элементом массива?? :((

    О.... через массив :))) (вопрос выше)
     
  5. Demon

    Demon Активный пользователь

    С нами с:
    20 апр 2006
    Сообщения:
    239
    Симпатии:
    0
  6. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    PHP:
    1.  
    2. <?php
    3. $read_file = @file('./mod/guestbook/guest_base.txt');
    4. $temp = count($read_file)-1;
    5. for ($i = $temp; $i>=0; $i--)
    6. {
    7.  $content .= '
    8. <table border="1" width="100%" cellspacing="1" style="border-collapse: collapse" bordercolor="#000000">
    9.     <tr>
    10.         <td align="center"><b><font size="4">'.$element[0].'</font></b></td>
    11.         <td align="center"><b><font size="4">'.$element[1].'</font></b></td>
    12.     </tr>
    13.     <tr>
    14.         <td colspan="2" align="justify">'.$element[2].'</td>
    15.     </tr>
    16. </table>
    17. <hr>';
    18. }
    19. ?>
    20.  
    Пример текстового файла..

    Name~Mail~Message
    $element[] - это Name - 1, mail - 2, Message - 3
    А как сделать вывод кнопки УДАЛИТЬ??? и что бы эта строка удалилась??? Я не понямаю :(((
     
  7. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Вот сама геста, если что...
    PHP:
    1.  
    2. <?php
    3. $title = 'Гостевая книга';
    4. $command = $_GET['cmd'];
    5. htmlentities($command);
    6. if ($cmd == 'admin')
    7. {
    8. $content = '
    9. <form method="POST" action="index.php?style={style}&page=guestbook&cmd=admin">
    10.     <table border="0" cellspacing="0" cellpadding="0">
    11.         <tr>
    12.             <td>Логин:</td>
    13.             <td><input type="text" name="admin_login" size="20"></td>
    14.         </tr>
    15.         <tr>
    16.             <td><span lang="ru">Пароль:</span></td>
    17.             <td><input type="password" name="admin_passwd" size="20"></td>
    18.         </tr>
    19.         <tr>
    20.             <td colspan="2">
    21.             <input type="submit" value="Войти в админку" name="submit"></td>
    22.         </tr>
    23.     </table>
    24. </form>';
    25.  
    26. $open=fopen("./mod/guestbook/guest_base.txt","w");
    27. @flock($open,2);
    28. $arr=count($open);
    29. for($i=0;$i<count($file);$i++)
    30.   {
    31.    if ($i != $_GET['id'])
    32.     {
    33.      fwrite($open, $file[$i]);
    34.     }
    35.     else
    36.     {
    37.     fwrite($open,implode("\r\n",array_map("trim",$arr)));
    38.     fwrite($open, "\r\n");}
    39.     }
    40. @flock($open,3);
    41. fclose($open);
    42. }
    43.  
    44. else
    45. {
    46. if ($guest_submit_replay != "1")
    47. {
    48. $content .= '
    49. <script language="JavaScript">
    50. function makevisible(id)
    51.    {
    52.        id.style.position = \'\';
    53.        id.style.visibility = \'\';
    54.    }
    55.  
    56. function makeinvisible(id)
    57.    {
    58.        id.style.position = \'absolute\';
    59.        id.style.visibility = \'hidden\';
    60.    }
    61.    
    62. function change(id,id_img)
    63.    {
    64.        if (id.style.position == \'absolute\') {
    65.            makevisible(id,id_img);
    66.        } else {
    67.            makeinvisible(id,id_img);
    68.        }
    69.    }
    70.  
    71. if (self.screen) {
    72. width = screen.width
    73. height = screen.height
    74. }
    75. else if (self.java) {
    76. var jkit = java.awt.Toolkit.getDefaultToolkit();
    77. var scrsize = jkit.getScreenSize();
    78. width = scrsize.width;
    79. height = scrsize.height;
    80. }else{
    81. width = height = \'100%\'
    82. }
    83. </script>
    84.  
    85. <p align="center"><a onclick=javascript:change(guest);
    86. href="javascript:void(0)">Добавить запись</a>
    87.  
    88. <DIV id="guest" style="VISIBILITY: hidden; POSITION: absolute">
    89. <form action="index.php?style={style}&page={page}" method="POST">
    90.    <div align="center"><table border="0" width="50%">
    91.        <tr>
    92.            <td align="right" width="30%">Имя:*</td>
    93.            <td width="50%"><input type="text" size="20" name="guest_user_name"></td>
    94.        </tr>
    95.        <tr>
    96.            <td align="right" width="30%">E-Mail:</td>
    97.            <td width="50%"><input type="text" size="20" name="guest_user_mail"></td>
    98.        </tr>
    99.        <tr>
    100.            <td align="right" width="30%">Сообщение:*</td>
    101.            <td width="50%"><textarea name="guest_user_text" rows="2" cols="20"></textarea></td>
    102.        </tr>
    103.        <tr>
    104.            <td align="right" width="30%"><input type="submit" name="guest_submit" value="Отправить"></td>
    105.            <td width="50%">
    106.                 <input type="reset" name="guest_reset" value="Сбросить">
    107.                 <input type="hidden" name="guest_bot" value="">
    108.                 <input type="hidden" name="guest_submit_replay" value="1">
    109.             </td>
    110.        </tr>
    111.    </table>
    112. Поля отмеченые * обязательны для заполнения
    113. </div>
    114. </form>
    115. </div>
    116. <hr>';
    117.  
    118. $read_file = @file('./mod/guestbook/guest_base.txt');
    119. $temp = count($read_file)-1;
    120. for ($i = $temp; $i>=0; $i--)
    121. {
    122.  $element = explode('~',$read_file[$i]);
    123.  $element[2] = str_replace (':)','<img src="./mod/guestbook/img/01.gif">', $element[2]);
    124.  $element[2] = str_replace (':-)','<img src="./mod/guestbook/img/01.gif">', $element[2]);
    125.  $element[2] = str_replace (':(','<img src="./mod/guestbook/img/02.gif">', $element[2]);
    126.  $element[2] = str_replace (':-(','<img src="./mod/guestbook/img/02.gif">', $element[2]);
    127.  $element[2] = str_replace (';)','<img src="./mod/guestbook/img/03.gif">', $element[2]);
    128.  $element[2] = str_replace (';-)','<img src="./mod/guestbook/img/03.gif">', $element[2]);
    129.  $content .= '
    130. <table border="1" width="100%" cellspacing="1" style="border-collapse: collapse" bordercolor="#000000">
    131.     <tr>
    132.         <td align="center"><b><font size="4">'.$element[0].'</font></b></td>
    133.         <td align="center"><b><font size="4">'.$element[1].'</font></b></td>
    134.     </tr>
    135.     <tr>
    136.         <td colspan="2" align="justify">'.$element[2].'</td>
    137.     </tr>
    138. </table><hr>';
    139. }
    140. }
    141. else
    142. {
    143. if ($guest_bot != '')
    144. {
    145. $content = '<p aling="center">Ботам сюда низззззя!!!!!';
    146. }
    147. else
    148. {
    149. if (($guest_user_name == '') or ($guest_user_text == ''))
    150. {
    151. $content .= '<p align="center">Одно из полей не заполнено.<br> <a href="JavaScript:history.back()">Вернитесь назад и заполните все поля.</a>';
    152. }
    153. else
    154. {
    155.  
    156. $_POST['guest_user_name'] = str_replace('~','',htmlentities(trim($_POST['guest_user_name'])));
    157. $_POST['guest_user_mail'] = str_replace('~','',htmlentities(trim($_POST['guest_user_mail'])));
    158. $_POST['guest_user_text'] = str_replace('~','',htmlentities(trim($_POST['guest_user_text'])));
    159.  
    160. $t1=chr(10);
    161. $t2=chr(13);
    162. $_POST['guest_user_text'] = str_replace($t1,'<br>',$_POST['guest_user_text']);
    163. $_POST['guest_user_text'] = str_replace($t2,'<br>',$_POST['guest_user_text']);
    164.  
    165. if (file_exists('./mod/guestbook/guest_base.txt'))
    166. {
    167. $output = "\n\r";
    168. }
    169. $comment = fopen('./mod/guestbook/guest_base.txt','a');
    170. $output .= $_POST['guest_user_name']."~".$_POST['guest_user_mail']."~".$_POST['guest_user_text'];
    171. fputs($comment,$output);
    172. fclose($comment);
    173. $content = 'Сообщение добавлено.<meta http-equiv="refresh" content="3; url=index.php?style={style}&page={page}"><br>Если Ваш браузер не поддерживает переадресацию, намите <a href="index.php?style={style}&page={page}">здесь</a>';
    174. }
    175. }
    176. }
    177. }
    178. ?>
    179.  
     
  8. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    используй регулярки
     
  9. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    это как?:(((
     
  10. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Если каждое сообщение в своей строке, при нажатии на кнопку удалить, передавать скрипту в параметрах номер строки. Этот скрипт должен загружать весь файл, читать его строки в массив, удалять из массива соответствующий элемент (строку), заново записывать файл построчно.

    Тотже алгоритм для редактирования, только вместо удаления, он должен заменять запись.

    Я так понимаю, ты сам реализовывать не собираешся это, так что своруй из любой гостевой этот функционал.
     
  11. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    ай-ай-ай. Не красиво :)
     
  12. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    +Sten+, а может напишешь как ЭТО выглядит?:)))
    Хотя бы для двух строк :[
     
  13. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    PHP:
    1. <?php
    2. $stroka = 3; //Номер строки на удаление. Передавать этот параметр через ссылку гетом.
    3.  
    4. $file = file("gb.txt"); //Читаем построчно
    5. unset($file[$stroka]); //Обнуляем нужную строку
    6. file_put_contents("gb.txt", ""); //Стираем всё содержимое файла
    7. foreach($file as $value) //Воссоздаём файл, но без нужной строки
    8. {
    9. @$str .= $value;
    10. }
    11. file_put_contents("gb.txt", $str); //Записываем
    12. ?>
     
  14. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    +Sten+
    Так не получится. Твой код не удалит нужную строку.

    Ниже код - проще и меньше ;)
    Код:
    PHP:
    1.  
    2. <?php
    3. $stroka = 3;  
    4. $file = file("gb.txt");
    5. unset($file[$stroka-1]);
    6.  
    7. file_put_contents("gb.txt", $file);
    8.  ?>
    9.  
     
  15. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    Такое тоже не совсем корректно, т.к. в массиве индекс начинается с нуля ;) :)
     
  16. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    host
    Не знал, что file_put_contents массив как строку записать может. Спасибо, буду знать)

    А подсчёт строк начинается тоже с 0, у меня всё верно.
     
  17. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    +Sten+
    Проверь сов код на работоспособность и увидишь, что у тебя удаляет.
    А ты проверь ;)
     
  18. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    host
    Код (Text):
    1.  
    2. 1
    3. 2
    4. 3
    5. 4
    6. 5
    7. 6
    8. 7
    9. 8
    После обработки:
    Код (Text):
    1.  
    2. 1
    3. 2
    4. 3
    5. 5
    6. 6
    7. 7
    8. 8
    Всё верно.
     
  19. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    +Sten+
    До обработки:
    Код (Text):
    1. Для этой функции вы можете использовать URL в качестве имени файла.
    2. Eсли была включена опция "fopen wrappers".
    3. Смотрите более подробную информацию об определении имени файла в описании функции fopen().
    4. A также список поддерживаемых протоколов URL в List of Supported Protocols/Wrappers
    После обработки:
    Код (Text):
    1. Для этой функции вы можете использовать URL в качестве имени файла.
    2. Eсли была включена опция "fopen wrappers".
    3. Смотрите более подробную информацию об определении имени файла в описании функции fopen().
    Как видишь не ту строку удалил код твой. Должна была стереться строка
    Код (Text):
    1. Смотрите более подробную информацию об определении имени файла в описании функции fopen().
    а не
    Код (Text):
    1. A также список поддерживаемых протоколов URL в List of Supported Protocols/Wrappers
    ;)

    +

    Так что вот так. :)
     
  20. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    host
    Перестань думать как человек, когда программируеш :). Люди начинают счёт с 1, а компьютер с 0. Что-бы то ни было: апельсины, кролики, или строки файла.

    В данном топике мы обсуждаем гостевую книгу немо, в ней идёт перебор массива строк:
    , где $i - номер каждой строки, и начинается счет с 0.
    Далее идет выод сообщения. В каждой интерации выводится новое сообщение. Он хочет вставить ссылку типа
    Код (Text):
    1. <a href="delete.php?stroka=$i">удалить</a>
    в каждую интерацию. Для твоего кода ему придется вставить:
    Код (Text):
    1. <a href="delete.php?stroka=".($i+1)."">
    .
     
  21. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    Это я тебе и пытаюсь сказать.
    +
     
  22. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    ЛЮДИ!!! Кау удалить - это не проблема :)))
    Мне надо возле сообщения крестик "удалить" с номером строки :))))
     
  23. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    host
    ок :),
    файл gb.txt:
    Код (Text):
    1.  
    2. asdf       - [b]0 строка[/b]
    3. sdfsd      - 1 строка
    4. fsdfsd     - 2 строка
    5. fsdfs      - 3 строка
    6. dfsd        - 4строка
    7. fsdfsdf    - 5 строка
    8. sdfsdf     - 6 строка
    Правильно??!)
     
  24. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Код (Text):
    1. asd~asdg~dfh -1
    2. asd~asdg~dfh -2
    3. asd~asdg~dfh -3
    4. asd~asdg~dfh -4
    5. asd~asdg~dfh -5
    6. asd~asdg~dfh -6
    Воть тяк ;)
     
  25. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Nemo
    PHP:
    1.   $content .= '
    2.  <table border="1" width="100%" cellspacing="1" style="border-collapse: collapse" bordercolor="#000000">
    3.     <tr>
    4.         <td align="center"><b><font size="4">'.$element[0].'</font></b></td>
    5.         <td align="center"><b><font size="4">'.$element[1].'</font></b></td>
    6.     </tr>
    7.     <tr>
    8.         <td colspan="2" align="justify">'.$element[2].'<br /><a href="delete.php?stroka='.$i.'">удалить</a></td>
    9.     </tr>
    10. </table><hr>';
    А в фойл delete.php код выше, но $stroka = $_GET['stroka'];