Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: запись в файл и вывод
 
 автор: Andchir   (25.12.2006 в 20:13)   письмо автору
 
 

Написал такой простой скрипт:

<font size="20"><?php
$filename 
"text.txt";
$fd fopen($filename"r");
$bufer fread($fdfilesize ($filename));
fclose($fd);
echo 
$bufer;
?></font>

<form action="<?php echo $_SERVER['PHP_SELF'?>" method="post">
Ваш текст: <br><input type="text" name="textfield"
value="<?php echo $_POST['textfield']; ?>" size="20"><br>
<br><input type="submit" name="submit" value="Написать"></div>
</form>


<?php
$fd 
fopen ("text.txt""w");
fwrite($fd$_POST['textfield']);
fclose ($fd);
?>

Записанный в форму текст записывается в файл text.txt и выводится из файла. Всё работает так как надо, но при новом обращении к этому скрипту в файле всё стирается. Как сделать чтобы при запуске сразу выводилось содержимое файла (выше формы и в ней) а при отправке нового текста он переписывался в файле и выводился? В общем как сделать чтобы текст в файле не стирался при запуске скрипта?

   
 
 автор: Alph[p]a   (25.12.2006 в 20:32)   письмо автору
 
   для: Andchir   (25.12.2006 в 20:13)
 

попробуй вместо

$fd = fopen ("text.txt", "w");

зделать

$fd = fopen ("text.txt", "a+");

   
 
 автор: Andchir   (25.12.2006 в 20:57)   письмо автору
 
   для: Alph[p]a   (25.12.2006 в 20:32)
 

В этом случае текст не переписывается в файле а добавляется. Но при вызове скрипта он не стирается - это уже радует. Как сделать чтобы текст обновлялся а не добавлялся к тому что уже есть в файле?
Примерно такой случай рассмотрен в книге "Народные советы" авторов форума. Но там редактируется файл с несколькими строками. Не могу его переработать чтобы редактировать только одну строку. Вот тот скрипт:

<?php
  
// Имя файла
  
$filename "text.txt";
  
// Обработчик HTML-формы
  
if(!empty($_POST['number']) && !empty($_POST['new_text']))
  {
    
// Читаем содержимое файла
    
$arr file("text.txt");
    
// Проверяем имеется ли в файле строка с номером
    // $_POST['number']
    
if($_POST['number'] > && $_POST['number'] <= count($arr))
    {
      
// Читаем содержимое файла в строку $bufet
      
$bufer file_get_contents($filename);
      
// Находим строку с индексом $index
      // и заменяем строку
      
$bufer preg_replace("|$_POST[number] ([^\n]*)|",
                      
$_POST['new_text'],
                      
$bufer);
      
// Сохраняем результат в файле
      
$fd fopen($filename"w");
      
fwrite($fd$bufer);
      
fclose($fd);
    }
    
// Перезагружаем страницу, сбрасывая POST-данные
    
header("Location: $_SERVER[PHP_SELF]");
    exit();
  }
?>
<form method=post>
  <input size=40 type=text name=number
         value="<?= $_POST['number']; ?>"><br>
  <?php
    
// Если передан номер строки, загружаем строку в форму
    
if(!empty($_POST['number']))
    {
      
// Читаем содержимое файла
      
$arr file($filename);
      
// Проверяем, имеется ли в файле строка с номером
      // $_POST['number']
      
if($_POST['number'] > && $_POST['number'] <= count($arr))
      {
        echo 
"<input size=40 type=text name=new_text value='".
             
$arr[$_POST['number'] - 1]."'><br>";
      }
    }
  
?>
  <input type=submit value="Отправить">
</form>

   
 
 автор: LuxeMate   (25.12.2006 в 21:07)   письмо автору
 
   для: Andchir   (25.12.2006 в 20:57)
 

Попробуйте w+

   
 
 автор: Andchir   (25.12.2006 в 21:13)   письмо автору
 
   для: LuxeMate   (25.12.2006 в 21:07)
 

При новом запуске скрипта текст в файле стирается :(

   
 
 автор: LuxeMate   (25.12.2006 в 21:16)   письмо автору
 
   для: Andchir   (25.12.2006 в 21:13)
 

АААА.......понял.....я как то давно сам думал как же так зделать а потом решил просто переделать всё на БД))

   
 
 автор: Alph[p]a   (25.12.2006 в 22:10)   письмо автору
 
   для: LuxeMate   (25.12.2006 в 21:16)
 

>Но при вызове скрипта он не стирается - это уже радует. Как сделать чтобы текст обновлялся а не добавлялся к тому что уже есть в файле?
Попробуй удалить содержимое файла а потом записать новые данные...

   
 
 автор: Andchir   (26.12.2006 в 18:58)   письмо автору
 
   для: Alph[p]a   (25.12.2006 в 22:10)
 

Пробывал удалять - не помогает. При разделении на 2 файла php всё вроде работает, но форма пропадает после нажатия submit. Может кто ещё знает как правильно переделать самый верхний скрипт?

   
 
 автор: Alph[p]a   (26.12.2006 в 21:05)   письмо автору
 
   для: Andchir   (26.12.2006 в 18:58)
 

Ты говорил > В общем как сделать чтобы текст в файле не стирался при запуске скрипта?
Ну вот посмотри ч0 накатал...конечно глупость....)) но работает как надо..у меня работает как надо...текст в файле не стирется...


<html>
<head>
<title>Alph[p]a</title>
</head>
<body>
Текст в файле:<br>
<?php
$file
="any.txt";
$array=file($file);
$count=count($array);
if (empty(
$count))
{
echo 
"File $file is empty!";
    }
    else
    {
for (
$c=0$c<$count$c++ )
{
echo 
$array[$c];
}
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'?>" method="post">
Ваш текст: <br>
<input type="text" name="textfield" value="<?php echo $_POST['textfield']; ?>" size="20"><br>
<br>
<input type="submit" name="submit" value="Написать">
</form>
<?php
if (empty ($_POST['submit']))
{
echo 
"Please enter text..";
    }
    else
    {
 
$fd fopen ($file"r+");
fwrite($fd$_POST['textfield']);
fclose ($fd);
echo 
"Write is Done! Check you file!";
    }
?>

</body>

токо не забудь создать файл any.txt

   
 
 автор: Andchir   (26.12.2006 в 21:32)   письмо автору
 
   для: Alph[p]a   (26.12.2006 в 21:05)
 

Спасибо за попытки помоч! Но опять - НО. Как я понял главное здесь отличие r+. Остальное проверки на заполнение формы - тоже полезно. Но этот скрипт всё равно работает не так. Он не заменяет текст который уже записанв файле полностью. Если введенное слово меньше того что уже записано в файл, то заменяется только то ко-во букв, а остальные остаются.
Хорошая оказалась задача для практики :))

   
 
 автор: Alph[p]a   (26.12.2006 в 21:46)   письмо автору
 
   для: Andchir   (26.12.2006 в 21:32)
 

Тоже можно сделать с помощью IF..если подумать немного то и это моно решить...

   
 
 автор: Alph[p]a   (26.12.2006 в 22:15)   письмо автору
 
   для: Alph[p]a   (26.12.2006 в 21:46)
 

VERSION 2
ДУМАЛ И НАДУМАл...:


<html>
<head>
<title>Alph[p]a</title>
</head>
<body>
Текст в файле:<br>
<?php
$file
="any.txt";
$array=file($file);
$count=count($array);
if (empty(
$count))
{
echo 
"File $file is empty!";
    }
    else
    {
for (
$c=0$c<$count$c++ )
{
echo 
$array[$c];
}
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'?>" method="post">
Ваш текст: <br>
<input type="text" name="textfield" value="<?php echo $_POST['textfield']; ?>" size="20"><br>
<br>
<input type="submit" name="submit" value="Написать">
</form>
<?php
if (empty ($_POST['submit']))
{
echo 
"Please enter text..";
    }
    else
    {
    
$poster=strlen($_POST['textfield']);
    
$poster2=strlen($array['0']);
    if (
$poster $poster2)
    {
        
$ep="";
         
$fd2 fopen ($file"w");
        
fwrite($fd2$ep);
        
fclose ($fd2);
        
// Вот такие пироги..
         
$fd3 fopen ($file"r+");
        
fwrite($fd3$_POST['textfield']);
        
fclose ($fd3);

    }
    else
    {
 
$fd fopen ($file"r+");
fwrite($fd$_POST['textfield']);
fclose ($fd);
echo 
"Write is Done! Check you file!";
}
    }
?>

</body>

так получше?

   
 
 автор: Andchir   (26.12.2006 в 22:39)   письмо автору
 
   для: Alph[p]a   (26.12.2006 в 22:15)
 

Так лучше! Но опять - НО. Я уже решил эту задачку))

<font size="20"><?php
$filename 
"text.txt";
$fd fopen($filename"r");
$bufer fread($fdfilesize ($filename));
fclose($fd);
echo 
$bufer;
?></font>


<form action="<?php echo $_SERVER['PHP_SELF'?>" method="post">
Ваш текст: <br><input type="text" name="textfield"
value="" size="20"><br>
<br><input type="submit" name="submit" value="Написать"></div>
</form>

<?php
if ($_POST['textfield']) { $fd fopen ("text.txt""w");
fwrite($fd$_POST['textfield']);
fclose ($fd);
}
?>

Тоже при помощи if (ты натолкнул на мысль). Не знаю пока какой вариант буду использовать. Большое спасибо! Знал что здесь мне помогут.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования