За последние 24 часа нас посетили 15405 программистов и 1620 роботов. Сейчас ищут 1099 программистов ...

Интересный вопрос - скрипт гостевой книги

Тема в разделе "PHP для новичков", создана пользователем marta, 8 янв 2009.

  1. marta

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

    С нами с:
    9 июл 2008
    Сообщения:
    10
    Симпатии:
    0
    Красиво... но не работает... :cry:
     
  2. у меня все работает.
     
  3. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Спорить не буду =) Полиморфы рулят, дядько?
    Проблема в том, что зачем в гостевой книге нужно подобное? Разве что в макетном варианте, на практике оно неудобно
     
  4. На практике — оно не нужно для гостевой книги. Но никто не писал, что это практика. Нормальное тестовое задание.
     
  5. marta

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

    С нами с:
    9 июл 2008
    Сообщения:
    10
    Симпатии:
    0
    А в чём может быть причина, что у меня на сервере не работает?
     
  6. файл должен иметь право на запись для пользователя, под которым исполняется. Можно просто - 777.
     
  7. Adamant

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

    С нами с:
    8 апр 2007
    Сообщения:
    234
    Симпатии:
    0
    Адрес:
    Казахстан г.Тараз
    PHP:
    1.  
    2. <?php
    3. echo '<pre>' . htmlspecialchars(file_get_contents(__FILE__));
    4. ?>
    5.  
    Интересно я прохожу этот тест?
    [​IMG] [​IMG]
     
  8. она получает внешние данные.
     
  9. marta

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

    С нами с:
    9 июл 2008
    Сообщения:
    10
    Симпатии:
    0
    Это само собой (настолько моих знаний пхп хватает :oops: ).... не работает!!!!!! :x
     
  10. включите вывод ошибок. Скажите, что написано.
     
  11. quazare

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

    С нами с:
    3 июн 2008
    Сообщения:
    88
    Симпатии:
    0
    Адрес:
    Nsk
    вообще задачка, мало применимая.
    я бы сделал так:

    Разбил бы файлик каким-нибудь символом, например '#' на 2 части

    В первой бы написал форму, функцию записи в тот же файл (через a+) и читалку...
    Во вторую бы просто добавлял записи из гостевой в любом формате, предварительно их закоменив....

    где-то вроде бы так ...
     
  12. и оно бы у тебя не работало.
     
  13. marta

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

    С нами с:
    9 июл 2008
    Сообщения:
    10
    Симпатии:
    0
    Очень извиняюсь за навязчивость :oops: .... Закинула на сервер http://test-php.mcdir.ru/ , установила chmod 777, и ничего.... включила "вывод ошибок" и
    Код (Text):
    1. Fatal error: Call to undefined function: file_put_contents() in /home/httpd/vhosts/test-php.mcdir.ru/httpdocs/index.php on line 20
     
  14. Скрипт предполагает наличия PHP версии 5.
     
  15. PHP:
    1. <html>
    2.      <body>
    3.          <form action="" method="post">
    4.              <label for="name">Имя:</label><br/>
    5.              <input type="text" name="name" id="name" style="width:400px"/><br/>
    6.              <label for="data">Сообщение:</label><br/>
    7.              <textarea name="data" id="data" style="width:400px"></textarea><br/>
    8.              <input type="submit" value="послать"/><br/>
    9.          </form>
    10.  <?php
    11. if (!function_exists('file_put_contents')) {
    12.     function file_put_contents($filename, $data) {
    13.         $f = @fopen($filename, 'w');
    14.         if (!$f) {
    15.             return false;
    16.         } else {
    17.             $bytes = fwrite($f, $data);
    18.             fclose($f);
    19.             return $bytes;
    20.         }
    21.     }
    22. }
    23.  
    24.      $data = file_get_contents(__FILE__);
    25.      list($code, $recs) = explode('<'.'!---->', $data);
    26.      $recs = explode("\n",$recs);
    27.      
    28.      if ($_SERVER['REQUEST_METHOD']=='POST') {
    29.          $name = htmlspecialchars($_POST['name']);
    30.          $data = htmlspecialchars(nl2br($_POST['data']));
    31.          $row = $name.'>'.$data;
    32.          $recs[]    = $row;
    33.          file_put_contents(__FILE__, $code."\n<".'!---->'.implode("\n", $recs));
    34.      }
    35.      
    36.      echo 'Оставленные сообщения:<br/>';
    37.      foreach ($recs as $rec) {
    38.          $record = explode('>',$rec);
    39.          echo '<p>';
    40.          echo '<b>'.@$record[0].'</b> написал:<br/>';
    41.          echo @$record[1];
    42.          echo '</p><hr/>';
    43.      }
    44.  ?>
    45.      </body>
    46.  </html>
    47.  <?php exit; ?>
    48.  <!---->
     
  16. marta

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

    С нами с:
    9 июл 2008
    Сообщения:
    10
    Симпатии:
    0
    Флоппик! Огромное спасибо!
     
  17. Myskyl

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

    С нами с:
    9 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    Я бы расширение поменял ))
    а я правдо не знаю как...
    может так
    PHP:
    1. <?php
    2.     ob_start();
    3.  ?>
    4.      $data = file_get_contents(__FILE__);
    5.      list($code, $recs) = explode('<'.'!---->', $data);
    6.      $recs = explode("\n",$recs);
    7.  
    8.      if ($_SERVER['REQUEST_METHOD']=='POST') {
    9.          $name = htmlspecialchars($_POST['name']);
    10.          $data = htmlspecialchars(nl2br($_POST['data']));
    11.          $row = $name.'>'.$data;
    12.          $recs[]    = $row;
    13.          file_put_contents(__FILE__, $code."\n<".'!---->'.implode("\n", $recs));
    14.      }
    15.  
    16.      echo 'Оставленные сообщения:<br/>';
    17.      foreach ($recs as $rec) {
    18.          $record = explode('>',$rec);
    19.          echo '<p>';
    20.          echo '<b>'.@$record[0].'</b> написал:<br/>';
    21.          echo @$record[1];
    22.          echo '</p><hr/>';
    23.      }
    24.  <?
    25.     $res=nl2br(ob_get_contents());
    26.     ob_end_clean();
    27.     print $res;
    28.  ?>
     
  18. по условию нельзя получать данные извне.
     
  19. Myskyl

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

    С нами с:
    9 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    флоппик
    внимательнее
     
  20. Myskyl, она не выведет ob_start();
     
  21. Myskyl

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

    С нами с:
    9 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    флоппик
    задание было как сделать чтобы файл вывел код самого себя?
    зачем нам файл гет контентс?

    вообщем было типа так
    PHP:
    1. <?
    2.  
    3. $data = file_get_contents(__FILE__);
    4.      list($code, $recs) = explode('<'.'!---->', $data);
    5.      $recs = explode("\n",$recs);
    6.  
    7.      if ($_SERVER['REQUEST_METHOD']=='POST') {
    8.          $name = htmlspecialchars($_POST['name']);
    9.          $data = htmlspecialchars(nl2br($_POST['data']));
    10.          $row = $name.'>'.$data;
    11.          $recs[]    = $row;
    12.          file_put_contents(__FILE__, $code."\n<".'!---->'.implode("\n", $recs));
    13.      }
    14.  
    15.      echo 'Оставленные сообщения:<br/>';
    16.      foreach ($recs as $rec) {
    17.          $record = explode('>',$rec);
    18.          echo '<p>';
    19.          echo '<b>'.@$record[0].'</b> написал:<br/>';
    20.          echo @$record[1];
    21.          echo '</p><hr/>';
    22.      }
    23. ?>
    а стало так

    PHP:
    1. <?php
    2.      ob_start();
    3.   ?>
    4.      $data = file_get_contents(__FILE__);
    5.      list($code, $recs) = explode('<'.'!---->', $data);
    6.      $recs = explode("\n",$recs);
    7.  
    8.      if ($_SERVER['REQUEST_METHOD']=='POST') {
    9.          $name = htmlspecialchars($_POST['name']);
    10.          $data = htmlspecialchars(nl2br($_POST['data']));
    11.          $row = $name.'>'.$data;
    12.          $recs[]    = $row;
    13.          file_put_contents(__FILE__, $code."\n<".'!---->'.implode("\n", $recs));
    14.      }
    15.  
    16.      echo 'Оставленные сообщения:<br/>';
    17.      foreach ($recs as $rec) {
    18.          $record = explode('>',$rec);
    19.          echo '<p>';
    20.          echo '<b>'.@$record[0].'</b> написал:<br/>';
    21.          echo @$record[1];
    22.          echo '</p><hr/>';
    23.      }
    24.   <?
    25.      $res=nl2br(ob_get_contents());
    26.      ob_end_clean();
    27.      print $res;
    28.   ?>
     
  22. задание было вывести текст самого себя.
    Не надо хвататься за словесное определение. Задача академическая.

    Исполняющаяся программа должна вывести свой собственный исходник с точностью до байта, не обращаясь к файловой системе за этими данными.

    Так тебе легче?
     
  23. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  24. Myskyl

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

    С нами с:
    9 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    нет проблем босс
    PHP:
    1. <?
    2. print readfile(__FILE__);
    3.      $data = file_get_contents(__FILE__);
    4.      list($code, $recs) = explode('<'.'!---->', $data);
    5.      $recs = explode("\n",$recs);
    6.  
    7.      if ($_SERVER['REQUEST_METHOD']=='POST') {
    8.          $name = htmlspecialchars($_POST['name']);
    9.          $data = htmlspecialchars(nl2br($_POST['data']));
    10.          $row = $name.'>'.$data;
    11.          $recs[]    = $row;
    12.          file_put_contents(__FILE__, $code."\n<".'!---->'.implode("\n", $recs));
    13.      }
    14.  
    15.      echo 'Оставленные сообщения:<br/>';
    16.      foreach ($recs as $rec) {
    17.          $record = explode('>',$rec);
    18.          echo '<p>';
    19.          echo '<b>'.@$record[0].'</b> написал:<br/>';
    20.          echo @$record[1];
    21.          echo '</p><hr/>';
    22.      }
    23. ?>
    24.  
     
  25.