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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Не могу написать скрипт для редактирования новости
Libiros
Отправлено: 26 Августа, 2010 - 16:58:19
Post Id


Новичок


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


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




Решил самостоятельно написать скрипт для добавления/редактирования/удален ия новостей.

Алгоритм добавления такой:

если нажата кнопочка "добавить новость", то:
PHP:
скопировать код в буфер обмена
  1. $f=fopen("any.htm","r+") or die("Ошибка при открытии файла\n");
  2. fseek($f, 0, SEEK_END);
  3.  
  4. fwrite($f, "
  5. <br><hr>$text<br><a href='edit.php?i=$i'>Редактировать</a>");
  6.  
  7. fflush($f);
  8. fclose($f);


Новость добавляется, рядом с ней ссылка на редактирование. Жму ссылку и:
PHP:
скопировать код в буфер обмена
  1. $List=file('any.htm');
  2. echo "<form action=edit.php method=post>";
  3. echo "<textarea name=text rows='10' cols='45' wrap=physical>$List[$i]</textarea>";
  4. echo "<br><br><input type=submit name=go value=send>
  5. <input type=hidden name=i value=$i>";
  6.  
  7. if(isset($go)) {
  8. $f=fopen("any.htm","r+");

А дальше ступор. Не могу поставить указатель в файл any.htm (там, где хранятся новости. Причём, каждая новость - новая строка, то есть:
CODE (html):
скопировать код в буфер обмена
  1. <br><hr>Текст новости 1<br><a href='edit.php?i=0'>Редактировать</a>
  2. <br><hr>Текст новости 2<br><a href='edit.php?i=1'>Редактировать</a>
  3. <br><hr>Текст новости 3<br><a href='edit.php?i=2'>Редактировать</a>


Я думаю, что если получится поставить указатель, то всё получится. Перепробовал всё, вплоть до fseek($f,List[$i]);

Надеюсь, изложил внятно Улыбка

(Отредактировано автором: 26 Августа, 2010 - 17:01:05)

 
 Top
garvey
Отправлено: 26 Августа, 2010 - 17:21:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


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




Если каждя новость находится на своей строке, Вы можете воспользоваться функцией explode();
PHP:
скопировать код в буфер обмена
  1. $filename = 'any.htm';
  2. $handle    = fopen($filename, 'r');
  3. $data       = fread($handle, filesize($filename));
  4. $rowsArr  = explode('\n', $data);
 
 Top
Uchkuma
Отправлено: 26 Августа, 2010 - 17:21:24
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Нет, невнятно.
Libiros пишет:
Я думаю, что если получится поставить указатель, то всё получится.
Что должно получиться?
(Добавление)
garvey, какой наик explode()? У него файл считывается функцией file(), следовательно $List - это уже готовый массив со строками!
garvey пишет:
$rowsArr = explode('\n', $data);
И, кстати, это даже не сработает.

(Отредактировано автором: 26 Августа, 2010 - 17:30:49)

 
 Top
Libiros
Отправлено: 26 Августа, 2010 - 17:32:37
Post Id


Новичок


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


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




Uchkuma пишет:
Что должно получиться?

У меня $list=file('any.htm');
Сам any.htm выглядит как
1.
<br><hr>Текст новости 1<br><a href='edit.php?i=0'>Редактировать</a>
2.
<br><hr>Текст новости 2<br><a href='edit.php?i=1'>Редактировать</a>
3.
<br><hr>Текст новости 3<br><a href='edit.php?i=2'>Редактировать</a>

Если я жму во второй новости "редактировать", то у меня появляется форма, в поле которой написано
Цитата:
<br><hr>Текст новости 2<br><a href='edit.php?i=1'>Редактировать</a>
. Я должен отредактировать и нажать "Отправить". НО! Как дать программе понять, куда нужно поставить указатель?
Я пробовал ставить указатель так - fseek($f,$List[2]); , но ничего не выходит, он редактирует самую первую новость. Недовольство, огорчение
 
 Top
Uchkuma
Отправлено: 26 Августа, 2010 - 18:21:56
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Не трогайте fseek(). Вы считали файл, получили массив со строками. Отредактировали нужный элемент массива (строку) и теперь записывайте содержимое массива обратно в файл. Для этого можете пройтись в цикле по массиву, записывая данные в файл построчно.

И еще, если попробуете мне ответить, зачем вы использовали функцию fflush() в своем скрипте, то, скорее всего, поймете, что она там не нужна.
 
 Top
garvey
Отправлено: 26 Августа, 2010 - 18:33:51
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


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




Uchkuma, топикстартер, наверное, не хочет записывать содержимое файла заново. А если у нас 1000000 строк? Мы изменим один символ, и запишем всё с нуля?

Да и вообще, что за детский сад хранить данные такого типа в файлах?
 
 Top
Libiros
Отправлено: 26 Августа, 2010 - 18:41:21
Post Id


Новичок


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


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




garvey пишет:
Да и вообще, что за детский сад хранить данные такого типа в файлах?

Я по-другому не умею Улыбка Как в книжке написано, так и делаю.
Попробую ещё для каждой новости создавать новый .htm файл. Кажется, так легче...
 
 Top
Uchkuma
Отправлено: 26 Августа, 2010 - 18:46:04
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Libiros пишет:
Кажется, так легче...
Легче в MySQL.
 
 Top
garvey
Отправлено: 26 Августа, 2010 - 18:50:13
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


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




Uchkuma, и легче и правильней.
 
 Top
Libiros
Отправлено: 26 Августа, 2010 - 21:25:03
Post Id


Новичок


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


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




Пока не знаю MySQL, то стараюсь так.

Получилось осуществить задуманное, путём создания нового файла для каждой новости Улыбка
 
 Top
LEONeso
Отправлено: 27 Августа, 2010 - 02:21:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


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




ну по поводу добавления в БД
я не спец, но там ничего сложного нет и вполне все понятно ,если не читать слишком заумные мануалы, где рассчитано, на более опытных.

допустим у нас есть база данных 'name', для начала надо подключиться к базе:
PHP:
скопировать код в буфер обмена
  1. $db = mysql_connect("localhost","admin","12345"); /*хост, логин, пароль*/
  2. mysql_select_db("name",$db); /*название базы данных*/


далее в файле php нужно создать простые условия (if-else)
делаем "глобальную" выверку
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset ($_POST['add']) || isset ($_POST['save']) || isset ($_POST['edit']) || isset ($_POST['save_edit'])) //метод POST, указываем события.
  3. { } else {/*тут html разметка на случай, если ни одно из условий не выполнено*/}
  4.  

данные будут передаваться методом _POST, можно и _GET, но на стадии написания скрипта, для наглядности. Стоит обратить внимание, что условия выполняются поочередно т.е. проверяется каждое и если все дают лож, то выводится else.
isset - проверка на существование переменной.

далее добавляем html разметку. В примере укажу простую, но все делается по аналогии.
У меня будет так:
Заголовок: input
button:Добавить button:Отмена
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset ($_POST['add']) || isset ($_POST['edit']) || isset ($_POST['save'])) //метод POST, указываем события (добавить, редактировать, сохранить).
  3. {
  4.  
  5. } else {
  6.         printf ("
  7. <form name=\"form1\" method=\"POST\" action=\"index.php\">
  8.           <label>Заголовок:
  9.           <input type=\"text\" name=\"title\" id=\"title\">
  10.           </label>
  11.         <input type=\"hidden\" name=\"add\" value=\"1\"/>
  12.         <input type=\"submit\" name=\"submit\" id=\"submit\" value=\"Добавить\">
  13.         </form>
  14.  
  15.         <form name=\"form2\" method=\"POST\" action=\"index.php\">
  16.         <input type=\"submit\" value=\"Отмена\">
  17.         </form>");
  18. }
  19.  


Теперь когда форма добавления сделана, нужно подумать о базе данных =)
Создаем таблицу в БД. Можно установить Денвер. И зайти в http://localhost/Tools/phpMyAdmin

Теперь создаем базу данных ,если она еще не создана.
в форме Создать новую БД вводим имя базы данных name и жмакаем по кнопке "создать".

В левом столбце, выбираем нашу базу данных name и создаем новую таблицу.
Форма создания новой таблицы, находится снизу.
Вводим имя таблицы, пусть будет 'news' - без ковычек
Теперь вводим кол-во полей, потребуется 2 поля в нашем примере - это id и title.

Как только ввели имя: news и поля: 2
Нажимаем на кнопку "Пошел".
Перед нами появится форма для заполнения.
В столбце "Поле" - вводим id в первом и title во втором.
Мы обозвали поля они же ячейки таблицы БД, которые будут заполняться нашими данными.
Теперь выставим остальные параметры:
    Поле: id
    Тип: int
    Дополнительно: auto_increment
    radio точку, на "Первичный"

    Поле: title
    Тип: VARCHAR
    Длины/Значения*: 255


Как только все выставлено, нажимаем на кнопку "Сохранить".
Теперь можно на время забыть о базе данных. Таблица создана.


Вернемся к php
добавляем _POST['add']
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_POST['title'])) {$title = $_POST['title']; if ($title== '') {unset($title);}}
  3. if (isset ($_POST['add']) || isset ($_POST['edit']) || isset ($_POST['save']) || isset ($_POST['del'])) //метод POST, указываем события (добавить, редактировать, сохранить и удалить).
  4. {
  5. if (isset ($_POST['add']) && isset ($title))
  6. {$result = mysql_query ("INSERT INTO news (title) VALUES ('$title')");
  7. /*добавление в бд, выбор таблицы, выбор ячеек и чем их заполнять*/
  8. if ($result == true) {
  9.         echo "Данные добавлены
  10.         <form name=\"form2\" method=\"POST\" action=\"index.php\">
  11.         <input type=\"submit\" value=\"Назад\">
  12.         </form>";} else {echo "Ошибка: проверьте, что таблица БД создана.";}
  13. } else {
  14. echo "проверьте, что все поля заполнены
  15.         <form name=\"form2\" method=\"POST\" action=\"index.php\">
  16.         <input type=\"submit\" value=\"Назад\">
  17.         </form>";
  18. }
  19. } else {
  20.         printf ("
  21. <form name=\"form1\" method=\"POST\" action=\"index.php\">
  22.           <label>Заголовок:
  23.           <input type=\"text\" name=\"title\" id=\"title\">
  24.           </label>
  25.         <input type=\"hidden\" name=\"add\" value=\"1\"/>
  26.         <input type=\"submit\" name=\"submit\" id=\"submit\" value=\"Добавить\">
  27.         </form>
  28.  
  29.         <form name=\"form2\" method=\"POST\" action=\"index.php\">
  30.         <input type=\"submit\" value=\"Отмена\">
  31.         </form>");
  32. }
  33.  


в дописаном коде указал следующее:
    1. Условие на title - если найден _POST['title'], то создаем переменную title и проверяем её, что она не пустая, если пустая, то удаляем переменную title.
    2. Условие add - делаем запись в базе данных, если _POST['add'] и $title существуют.
    3. Внутри проверка результата на "истину".
    4. и вывод ошибки, в случае, если нарушены условия.


--
Ну собственно остальное по аналогии.
Простоя меняются условия.
Хотел все дописать до конца, но мой код будет кривой и на это уйдет прилично времени, когда в интернете, есть более точные примеры.


Вывод данных из базы можно сделать таким, с функцией удаления. Все кошмарно, но все таки, работает =)
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_POST['title'])) {$title = $_POST['title']; if ($title== '') {unset($title);}}
  3. if (isset ($_POST['add']) || isset ($_POST['edit']) || isset ($_POST['save']) || isset ($_POST['del'])) //метод POST, указываем события (добавить, редактировать, сохранить и удалить).
  4. {
  5. //кривое условие - если найден del, то это переменная id, которая в свое время является id строки таблицы, которая и будет удалена. Сверху прописано обновление страницы.
  6. if (isset ($_POST['del']))
  7.   {
  8.           echo "Строка удалена!<br />";
  9.         $id = intval($_POST['del']);
  10.         $result_delete = mysql_query ("DELETE FROM news WHERE id='$id'",$db);
  11.   }
  12. if (isset ($_POST['add']) && isset ($title))
  13. {$result = mysql_query ("INSERT INTO news (title) VALUES ('$title')");
  14. /*добавление в бд, выбор таблицы, выбор ячеек и чем их заполнять*/
  15. if ($result == true) {
  16.         echo "Данные добавлены
  17.         <form name=\"form2\" method=\"POST\" action=\"index.php\">
  18.         <input type=\"submit\" value=\"Назад\">
  19.         </form>";} else {echo "Ошибка: проверьте, что таблица БД создана.";}
  20. } else {
  21. echo "проверьте, что все поля заполнены
  22.         <form name=\"form2\" method=\"POST\" action=\"index.php\">
  23.         <input type=\"submit\" value=\"Назад\">
  24.         </form>";
  25. }
  26.  
  27. } else {
  28.         printf ("
  29. <form name=\"form1\" method=\"POST\" action=\"index.php\">
  30.           <label>Заголовок:
  31.           <input type=\"text\" name=\"title\" id=\"title\">
  32.           </label>
  33.         <input type=\"hidden\" name=\"add\" value=\"1\"/>
  34.         <input type=\"submit\" name=\"submit\" id=\"submit\" value=\"Добавить\">
  35.         </form>
  36.  
  37.         <form name=\"form2\" method=\"POST\" action=\"index.php\">
  38.         <input type=\"submit\" value=\"Отмена\">
  39.         </form>");
  40.  
  41. $result = mysql_query ("SELECT * FROM news ORDER BY id DESC",$db);
  42.  
  43. if ($myrow = mysql_fetch_array($result))        {echo "Действие | <b>Последние записи:</b>";}
  44. else {echo "<b>Последние записи:</b>";}
  45.  
  46. if ($myrow = mysql_fetch_array($result)) //выполняется, выводи:
  47.   {
  48.  
  49. do
  50. { //из name берет del из value берет %s где %s это $myrow['id'] т.е. id строки таблицы.
  51. printf ("       <form name=\"edit_form\" method=\"POST\" action=\"index.php\">
  52.         <input type=\"hidden\" name=\"edit\" id=\"edit\" value=\"%s\"/>
  53.         <input title=\"Редактировать строку с id %s - %s\" class=\"button\" type=\"submit\" value=\"изменить\" />
  54.         </form>
  55.         <form name=\"delete_form\" method=\"POST\" action=\"index.php\">
  56.         <input type=\"hidden\" name=\"del\" id=\"del\" value=\"%s\"/>
  57.         <input title=\"Удалить строку с id %s - %s\" class=\"button\" type=\"submit\" value=\"удалить\" />
  58.         </form>
  59.         %s ", $myrow['id'], $myrow['id'], $myrow['title'], $myrow['id'], $myrow['id'], $myrow['title'], $myrow['title']);
  60. }
  61. while ($myrow = mysql_fetch_array($result));
  62. } else {echo "<br />Записи еще не добавлены!";}
  63. }
  64.  


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
alexspb
Отправлено: 27 Августа, 2010 - 09:04:51
Post Id


Посетитель


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


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




LEONeso, избавляйтесь от такого стиля - не мешайте HTML и PHP


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
biperch
Отправлено: 27 Августа, 2010 - 09:07:53
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


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




Очень хороший стиль развивает кругозор и интуицию ))))))
 
 Top
Uchkuma
Отправлено: 27 Августа, 2010 - 10:31:22
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




alexspb, вы сразу начали писать отделяя программный код от представления?
Если вы взглянете на подпись LEONeso, то поймете, что он еще просто не дошел до этого уровня. Но зато он не стал высмеивать новичка, а попытался доступным для него языком объяснить, как можно работать с данными в mysql.
 
 Top
Libiros
Отправлено: 27 Августа, 2010 - 15:54:03
Post Id


Новичок


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


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




Спасибо, вы очень помогли Улыбка

Понял принцип написания, с помощью MySQL и сделал. Всё получилось Улыбка
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB