Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Добавление и удаление строк в файле

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Не правельно удаляются строки
2wings
Отправлено: 13 Сентября, 2011 - 21:13:28
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2011  
Откуда: Харьков


Помог: 0 раз(а)




Здравствуйте, помогите!
Хочу написать скрипт подписки и отказа от рассылки.Не правельно перезаписывается файл после удаления строки с E-mail, и строки(первая) не удаляются, записываются пустые строки.


CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. elseif($pod=="1"){
  4.  
  5.                                          $p="\n$ml";
  6.                                          $pd=fopen($pdk,'a');
  7.                                          fwrite($pd,$p);
  8.                                          fclose($pd);
  9.                                          
  10.                                                                                  
  11.                                          $pd=fopen($pdk,'r');
  12.                                          $r=fread($pd,20000);
  13.                                          fclose($pd);
  14.                                
  15.                                          $lines=file($pdk);
  16.                                          $a=count($lines);
  17.                                          for($i=1;$i<$a;$i++){
  18.                                          mail ("$lines[$i]", "Подписка", $txt,$headers);
  19.                                                          }
  20.                                                  echo "<div style=color:silver;>Вы подписались на рассылку.<br></div>";
  21.                                                                                         }
  22.  
  23.                                 elseif($pod=="2"){
  24.                                        
  25.                                        
  26.                                          $lines=file($pdk);
  27.                                          $a=count($lines);
  28.                                          for($i=1;$i<$a;$i++){
  29.                                                 if($ml==$lines[$i]){
  30.  
  31.                                                 unset($lines[$i]);
  32.                                                                    }
  33.                                                               }
  34.                                                 $pd=fopen("$pdk","w") or die('файл недоступен для записи');
  35.                                                 fputs($pd,implode("",$lines));
  36.                                                 fclose($pd);
  37.                                                
  38.                                         echo "<div style=color:silver;>Вы отказались от рассылки.<br></div>";
  39.                                                                                          
  40.                                         }                                      
 
 Top
dimka3210
Отправлено: 14 Сентября, 2011 - 00:17:16
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Почему Вы бд не используете?
 
 Top
Romman
Отправлено: 14 Сентября, 2011 - 13:44:41
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




<td class="q_course"><a name="clb181366" href="http://news.mail.ru/currency.html?charcode=EUR" class="eur" title="Курс с 15.09" target="_blank">41.3531</a></td>

нужно чтобы осталось 41.3531
Огорчение
 
 Top
IronHawk
Отправлено: 14 Сентября, 2011 - 14:04:25
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




dimka3210 пишет:
Почему Вы бд не используете?

текстовые файлы, тоже, в некотором смысле бд...
2wings пишет:

PHP:
скопировать код в буфер обмена
  1. $pd=fopen("$pdk","w") or die('файл недоступен для записи');

попробуйте поменять на:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $pd=fopen("$pdk","a+t") or die('файл недоступен для записи');
 
 Top
2wings
Отправлено: 14 Сентября, 2011 - 18:12:30
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2011  
Откуда: Харьков


Помог: 0 раз(а)




IronHawk пишет:
dimka3210 пишет:
Почему Вы бд не используете?

текстовые файлы, тоже, в некотором смысле бд...
2wings пишет:

PHP:
скопировать код в буфер обмена
  1. $pd=fopen("$pdk","w") or die('файл недоступен для записи');

попробуйте поменять на:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $pd=fopen("$pdk","a+t") or die('файл недоступен для записи');


fopen("$pdk","a+t") ничего не дало, добавляються лишние копии строк.
 
 Top
IronHawk
Отправлено: 15 Сентября, 2011 - 13:00:23
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




2wings пишет:
добавляються лишние копии строк

значит вопрос отпадает.
приведите пожалуйста кусок кода, где Вы присваиваете значения переменной $ml
 
 Top
2wings
Отправлено: 15 Сентября, 2011 - 14:32:49
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2011  
Откуда: Харьков


Помог: 0 раз(а)




IronHawk пишет:
2wings пишет:
добавляються лишние копии строк

значит вопрос отпадает.
приведите пожалуйста кусок кода, где Вы присваиваете значения переменной $ml


Вот код,еще вставил if($lines==""){continue;}, не помогает, начинать цикл с 0 то же без изменения.Для работы нужны два файла txt: podpiska.txt и coment.txt.
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?PHP
  4. $headers = 'Content-type: text/html; charset=utf-8';
  5. $time=date("H:i d M Y");
  6. $nm=$_POST['nm'];
  7. $ml=$_POST['ml'];
  8. $txt=$_POST['txt'];
  9. $pod=$_POST['d'];
  10. $pdk="podpiska.txt";
  11.             if (!isset($_POST['nm'])){
  12.                 echo "<form method='post'>
  13.                    <input type='text' name='nm'>&nbsp;Имя<br><br>
  14.                    <input type='text' name='ml'>&nbsp;E-mail<br><br>
  15.                    <textarea name='txt' rows='7' cols='50'>&nbsp;</textarea><br><br>
  16.                    <select name='d'>
  17.                    <option value='' selected>
  18.                        <option value='1'>Подписаться
  19.                         <option value='2'>Отказаться  
  20.                      </select>&nbsp;Подписаться на комментарии<br><br>
  21.                    <input type='submit' value='Отправить'>&nbsp;<input type='reset' value='Clear' alt='Click here to start over' /><br>
  22.                    </form><br>";
  23.                      
  24.                      
  25.                          $f="coment.txt";
  26.                                                          
  27.                              $com=fopen($f,'r');
  28.                              $r=fread($com,20000);
  29.                              fclose($com);
  30.                      
  31.                                  $lines=file($f);
  32.                                  $a=count($lines);
  33.                                  for($i=1;$i<$a;$i++){
  34.                                  echo $lines[$i];
  35.                                                    }
  36.                                          }
  37.                 elseif(empty($txt)||empty($nm)||$ml==''                    echo "<div style=color:red;>Вы не заполнили форму</div>";
  38.                     echo "<form method='post'>
  39.                         <input type='text' name='nm'>&nbsp;Имя<br><br>
  40.                         <input type='text' name='ml'>&nbsp;E-mail<br><br>
  41.                         <textarea name='txt' rows='7' cols='50'>&nbsp;</textarea><br><br>
  42.                         <select name='d'>
  43.                             <option value='' selected>
  44.                                        <option value='1'>Подписаться
  45.                                  <option value='2'>Отказаться  
  46.                               </select>&nbsp;&nbsp;&nbsp;Подписаться на комментарии<br><br>
  47.                         <input type='submit' value='Отправить'>&nbsp;<input type='reset' value='Clear' alt='Click here to start over' /><br>
  48.                         </form>";
  49.                 }
  50.              
  51.                     elseif($pod==""){
  52.                          
  53.                          echo"<form method='post'>
  54.                         <input type='text' name='nm'>&nbsp;Имя<br><br>
  55.                         <input type='text' name='ml'>&nbsp;E-mail<br><br>
  56.                         <textarea name='txt' rows='7' cols='50'>&nbsp;</textarea><br><br>
  57.                         <select name='d'>
  58.                    <option value='' selected>
  59.                        <option value='1'>Подписаться
  60.                         <option value='2'>Отказаться  
  61.                      </select>&nbsp;&nbsp;Подписаться на комментарии<br><br>
  62.                         <input type='submit' value='Отправить'>&nbsp;<input type='reset' value='Clear' alt='Click here to start over' /><br>
  63.                         </form><br>";
  64.                          
  65.                         $a="\n<div id='footer2'><b><a href=\"mailto:$ml\">$nm</a><br>$time </b><br><hr width=699 align=left>$txt</div><br>";    
  66.                          
  67.                                                          
  68.                        $com=fopen("coment.txt",'a');
  69.                      fwrite($com,$a);
  70.                      fclose($com);
  71.                      
  72.                      $f="coment.txt";
  73.                      
  74.                      $com=fopen($f,'r');
  75.                      $r=fread($com,20000);
  76.                      fclose($com);
  77.                  
  78.                      $lines=file($f);
  79.                      $a=count($lines);
  80.                      for($i=1;$i<$a;$i++){
  81.                      echo $lines[$i];
  82.                     }
  83.                      
  84.                     $pd=fopen($pdk,'r');
  85.                      $r=fread($pd,20000);
  86.                      fclose($pd);
  87.                  
  88.                      $lines=file($pdk);
  89.                      $a=count($lines);
  90.                      for($i=1;$i<$a;$i++){
  91.                      mail ("$lines[$i]", "Подписка", $txt,$headers);
  92.                             }
  93.                         }
  94.  
  95.                 elseif($pod=="1"){
  96.  
  97.                      $p="\n$ml";
  98.                          $pd=fopen($pdk,'a');
  99.                      fwrite($pd,$p);
  100.                      fclose($pd);
  101.                      
  102.                                          
  103.                      $pd=fopen($pdk,'r');
  104.                      $r=fread($pd,20000);
  105.                      fclose($pd);
  106.                  
  107.                      $lines=file($pdk);
  108.                      $a=count($lines);
  109.                      for($i=1;$i<$a;$i++){
  110.                      mail ("$lines[$i]", "Подписка", $txt,$headers);
  111.                                     }
  112.                              echo "<div style=color:silver;>Вы подписались на рассылку, спасибо!<br></div>";
  113.                                             }
  114.  
  115.                 elseif($pod=="2"){
  116.                      
  117.                      
  118.                      $lines=file($pdk);
  119.                      $a=count($lines);
  120.                      for($i=1;$i<$a;$i++){
  121.                          if($ml==$lines[$i]){
  122.  
  123.                         unset($lines[$i]);
  124.                                    }
  125.                                   }
  126.                         $pd=fopen("$pdk","w+");  
  127.                         if($lines==""){continue;}
  128.  
  129.                             fputs($pd,implode("\n",$lines));  
  130.                          fclose($pd);
  131.                          
  132.                     echo "<div style=color:silver;>Вы отказались от рассылки.<br></div>";
  133.                                              
  134.                     }                    
  135. ?>
  136.  
 
 Top
Stierus Супермодератор
Отправлено: 15 Сентября, 2011 - 14:47:53
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




"и строки(первая) не удаляются" ... что бы первая удалялась - нужно цикл

с нуля начинать


ps
CODE (htmlphp):
скопировать код в буфер обмена
  1. for($i=1;$i<$a;$i++){
  2.                                                ...
  3.                                                $pd=fopen("$pdk","w") or die('файл недоступен для записи');
  4.                                                fputs($pd,implode("",$lines));

Вы в цикле фиг знает сколько раз открываете файл, удаляете все из него и заного записываете, опять открываете , опять трете и опять записывает ...мне ближе 1 запись того, что нужно после цикла Улыбка
 
My status
 Top
2wings
Отправлено: 15 Сентября, 2011 - 15:46:20
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2011  
Откуда: Харьков


Помог: 0 раз(а)




Stierus пишет:
"и строки(первая) не удаляются" ... что бы первая удалялась - нужно цикл

с нуля начинать


ps
CODE (htmlphp):
скопировать код в буфер обмена
  1. for($i=1;$i<$a;$i++){
  2.                                                ...
  3.                                                $pd=fopen("$pdk","w") or die('файл недоступен для записи');
  4.                                                fputs($pd,implode("",$lines));

Вы в цикле фиг знает сколько раз открываете файл, удаляете все из него и заного записываете, опять открываете , опять трете и опять записывает ...мне ближе 1 запись того, что нужно после цикла Улыбка

Да верно лишние открытие файла, циклы с 0 не дали результатов, последние строки перестали удаляться. Что то не так с перезаписью файла.
(Добавление)
Если записать первую строку, а потом удалить работает.Если записать вторую и удалить работает, если за второй удалять первую, первая не удаляется.
 
 Top
Stierus Супермодератор
Отправлено: 15 Сентября, 2011 - 16:02:51
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




о_О Вы поняли, что я написал выше?
 
My status
 Top
IronHawk
Отправлено: 15 Сентября, 2011 - 16:07:24
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




Stierus пишет:
Вы поняли, что я написал выше?

Огорчу Вас, топикстартер, приводя код, предварительно его изменяет... тяжело поределить где закралась ошибка Огорчение
 
 Top
Stierus Супермодератор
Отправлено: 15 Сентября, 2011 - 16:11:37
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Поясню, надо

заменить на
 
My status
 Top
2wings
Отправлено: 15 Сентября, 2011 - 17:26:40
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2011  
Откуда: Харьков


Помог: 0 раз(а)




Stierus пишет:
Поясню, надо

заменить на

Я исправил по совету везде, однако результата нет.
 
 Top
IronHawk
Отправлено: 15 Сентября, 2011 - 17:39:37
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Авг. 2011  


Помог: 1 раз(а)




2wings пишет:
Я исправил по совету везде, однако результата нет.

А веб-сервер случано, не кеширует страницы?
 
 Top
2wings
Отправлено: 19 Сентября, 2011 - 19:54:00
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2011  
Откуда: Харьков


Помог: 0 раз(а)




IronHawk пишет:
2wings пишет:
Я исправил по совету везде, однако результата нет.

А веб-сервер случано, не кеширует страницы?

Я поставил запрет кеширования веб серверу.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB