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
Форумы портала PHP.SU :: Версия для печати :: Удалить запись...
Форумы портала PHP.SU » » Вопросы новичков » Удалить запись...

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

1. android - 16 Ноября, 2011 - 18:03:04 - перейти к сообщению
Привет, есть файл test.xml в нем есть данные:
PHP:
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <testimonials>
  3.         <test id="1">
  4.                 <name>test1</name>
  5.                 <content>1</content>
  6.                 <tid>1</tid>
  7.         </test>
  8.         <test id="2">
  9.                 <name>test2</name>
  10.                 <content>2</content>
  11.                 <tid>2</tid>
  12.         </test>
  13. </testimonials>


Нужно удалить запись с ID 1 (число может быть разное в зависимости сколько материала в файле) Результат должен быть таким:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <testimonials>
  4.         <test id="2">
  5.                 <name>test2</name>
  6.                 <content>2</content>
  7.                 <tid>2</tid>
  8.         </test>
  9. </testimonials>
  10.  
2. DeepVarvar - 16 Ноября, 2011 - 18:49:21 - перейти к сообщению
android и что, совсем никаких собственных мыслей?
(Добавление)
Нашкодил шутки ради вот такой кувалдОметр:
PHP:
скопировать код в буфер обмена
  1. $rem = "\t<test id=\"1\">\n";
  2. $rem .= "\t\t<name>test1</name>\n";
  3. $rem .= "\t\t<content>1</content>\n";
  4. $rem .= "\t\t<tid>1</tid>\n";
  5. $rem .= "\t</test>\n";
  6. $xml = file_get_contents("path/do/file.xml");
  7. $xml = str_replace($rem,"",$xml);
  8. file_put_contents("path/do/file.xml",$xml);

Только ради бога не говорите что это решение вам подошло..
В противном случае я обижусь на весь окружающий мир...
3. android - 16 Ноября, 2011 - 21:29:38 - перейти к сообщению
Вы меня полностью правильно поняли.

Но понимаете у меня сделаны коментарии считайте стена коментов в файле xml.

И для админа нужно сделать удаление.

Коментарии у меня вот так выводятся:

PHP:
скопировать код в буфер обмена
  1.         $xml = simplexml_load_file($file);
  2.         foreach($xml->user as $a) {
  3.                 $i++;
  4.                 echo '
  5.                 <tr>
  6.                 <td>'.$i.'</td>
  7.                 <td>'.$a->dat.'</td>
  8.                 <td>'.$a->name.'</td>
  9.                 <td>'.$a->content.'</td>
  10.                 </tr>
  11.                 ';
  12.         }
  13.  

и получается когда я делаю скрипт внутри цикла то сносе материалы пользователя.
(Добавление)
Можете сделать удаление по ID и имени?

Цитата:
<?xml version="1.0" encoding="UTF-8"?>
<testimonials>
<test id="1">
<name>test1</name>
<content>1</content>
<tid>1</tid>
</test>
<test id="2">
<name>test2</name>
<content>2</content>
<tid>2</tid>
</test>
</testimonials>
4. android - 19 Ноября, 2011 - 13:02:09 - перейти к сообщению
ап
5. Bio man - 19 Ноября, 2011 - 15:03:17 - перейти к сообщению
android пишет:
Можете сделать удаление по ID и имени?

Цитата:
PHP:
скопировать код в буфер обмена
  1.     $rem = "\t<test id=\"$id\">\n";
  2.     $rem .= "\t\t<name>$name</name>\n";
  3.     $rem .= "\t\t<content>$id</content>\n";
  4.     $rem .= "\t\t<tid>$id</tid>\n";
  5.     $rem .= "\t</test>\n";
  6.     $xml = file_get_contents("path/do/file.xml");
  7.     $xml = str_replace($rem,"",$xml);
  8.     file_put_contents("path/do/file.xml",$xml);
6. android - 19 Ноября, 2011 - 19:04:43 - перейти к сообщению
боже я же не такой глупый что бы не подставить $id

Прочитайте 3 пост
7. snikers987 - 19 Ноября, 2011 - 19:09:50 - перейти к сообщению
android пишет:
и получается когда я делаю скрипт внутри цикла то сносе материалы пользователя.


Зачем цикл, если удаляется одна запись? Или я чего не догоняю?

может имеет смыл добавить что-то типа <comment id="1"> ?
8. Bio man - 19 Ноября, 2011 - 19:15:37 - перейти к сообщению
android, и не такой глупый, что бы правильно задать вопрос? так задайте его понятней
android пишет:
Можете сделать удаление по ID и имени?
на последний вопрос вам ответили и на первый тоже, что же вам еще надо?
9. android - 19 Ноября, 2011 - 21:05:29 - перейти к сообщению
Bio man

PHP:
скопировать код в буфер обмена
  1.  $rem = "\t<test id=\"$id\">\n";
  2.     $rem .= "\t\t<name>$name</name>\n";
  3.     $rem .= "\t\t<content>$id</content>\n";
  4.     $rem .= "\t\t<tid>$id</tid>\n";
  5.     $rem .= "\t</test>\n";
  6.     $xml = file_get_contents("path/do/file.xml");
  7.     $xml = str_replace($rem,"",$xml);
  8.     file_put_contents("path/do/file.xml",$xml);


НЕ РАБОТАЕТ
Так понятнее?

snikers987

PHP:
скопировать код в буфер обмена
  1.  $xml = simplexml_load_file($file);
  2.         foreach($xml->user as $a) {
  3.                 $i++;
  4.                 echo '
  5.                <tr>
  6.                <td>'.$i.'</td>
  7.                <td>'.$a->dat.'</td>
  8.                <td>'.$a->name.'</td>
  9.                <td>'.$a->content.'</td>
  10.                </tr>
  11.                ';
  12.         }

Это вывод на страницу комментариев. Я это дал для информации что бы было видно состав файла xml и скрипт вывода.
10. snikers987 - 19 Ноября, 2011 - 21:59:33 - перейти к сообщению
android пишет:
Это вывод на страницу комментариев.


android пишет:
и получается когда я делаю скрипт внутри цикла то сносе материалы пользователя.


Тогда я вообще нифига не понимаю..зачем удаление делать в цикле?
11. android - 19 Ноября, 2011 - 22:33:47 - перейти к сообщению
блин, тогда скажите как вы будете удалять? т.е выносить инфу с цикла!?!?!
12. snikers987 - 20 Ноября, 2011 - 00:57:14 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. function removePost($id){
  3.         $doc = new DOMDocument;
  4.         $doc->load('test.xml');
  5.         $thedocument = $doc->documentElement;
  6.         $list = $thedocument->getElementsByTagName('test');
  7.         $nodeToRemove = null;
  8.         foreach ($list as $domElement){
  9.                 $attrValue = $domElement->getAttribute('id');
  10.                 if ($attrValue == $id) {
  11.                         $nodeToRemove = $domElement;
  12.                 }
  13.         }
  14.         if ($nodeToRemove != null){
  15.                 $thedocument->removeChild($nodeToRemove);
  16.         }
  17.         $doc->save("test.xml");
  18. }
  19.  
  20.  
  21.  

как-то так, передаеш в функцию аргумент $id == id удаляемой записи
13. Panoptik - 20 Ноября, 2011 - 01:09:31 - перейти к сообщению
основной принцип удаления таких данных это перебирать все записи и складывать ТЕ, КОТОРЫЕ НУЖНЫ в одну кучку (переменную), а ТЕ, КОТОРЫЕ НУЖНО УДАЛИТЬ - ИГНОРИМ. После создаем файл на основании ПЕРВОЙ кучки. Чего вам еще не понятно?
14. android - 20 Ноября, 2011 - 12:04:42 - перейти к сообщению
snikers987, спасибо все работает!

Если не сложно можешь переделать функцию на редактирование поля name в файле?

Т.е мы не удаляем а редактируем поле name у того ид который введем
15. snikers987 - 20 Ноября, 2011 - 14:06:04 - перейти к сообщению
android пишет:
И для админа нужно сделать удаление.


Сделали, нужно больше скайп в профиле, за отдельную плату разумеется.

 

Powered by ExBB FM 1.0 RC1