Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z edycją newsów
Forum PHP.pl > Forum > PHP
tomkoz11
Dopiero zaczynam swoją przygodę z php, a mój problem wygląda następująco -stworzyłem system newsów oparty na plikach tekstowych(jak na razie zrobiłem dodawanie i wyświetlanie newsów...), ale za cholibę nie wiem jak zabrać się za ich usuwanie i edycję. blink.gif
Chciałbym aby w edycji plik wyświetlał tylko nagłówki newsów tj. tytuł newsa-data dodania, a obok opcje edytuj i usuń.Mógłby mnie ktoś nakierować tak, aby udało mi się dokończyć ten skrypcik?
Obecnie skrypt przedstawia się następująco:

Plik add_news.php:
  1. <?php
  2.  
  3. // Definiowanie zmiennych
  4. $title = $HTTP_POST_VARS['title'];
  5. $news = $HTTP_POST_VARS['news'];
  6. $name = $HTTP_POST_VARS['name'];
  7. // Jeżeli zmienne są nie zapisane, wyświetlany jest formularz
  8. if(($title=='')&&($news=='')&&($name==''))
  9. {
  10. echo '<table>
  11. <tr>
  12. <form action="" method="POST" name="newsentry">
  13. <td>Tytuł:</td><td><input type="text" size="30" name="title" style="width:120px;"></td>
  14. </tr>
  15. <tr>
  16. <td>Treść:</td><td><textarea name="news" cols="40" rows="5"></textarea></td>
  17. </tr>
  18. <tr>
  19. <td>Autor:</td><td><input type="text" name="name" style="width:120px;"></td>
  20. </tr>
  21. </table>
  22. <br><br>
  23. <center>
  24. <input type="submit" name="submit" value="Dodaj news"><br>
  25. </center>
  26. </form>';
  27. }
  28. // Jeżeli pola są puste, bądź zawierają | ,to wyświetlane są komunikaty o błędach
  29. elseif($HTTP_POST_VARS['submit']) {
  30.  
  31. if(!$HTTP_POST_VARS['title']) {
  32. echo '<center><b>Musisz podać tytuł!</b></center>';
  33. }
  34. if(!$HTTP_POST_VARS['news']) {
  35. echo '<center><b>Pole tekstowe nie może pozostać puste!</b></center>';
  36. }
  37. if(strstr($HTTP_POST_VARS['title'],"|")) {
  38. echo '<center><b>Tytuł nie może zawieraćl - |</b></center>';
  39. }
  40. if(strstr($HTTP_POST_VARS['news'],"|")) {
  41. echo '<center><b>News nie może zawierać - |</b></center>';
  42. }
  43. // Natomiast jeżeli wszystko jest ok następuje zapis newsów do pliku
  44. $fp = fopen('sciezka_do_pliku','a');
  45. if(!$fp) {
  46. echo '<center><b>Wystąpił błąd przy odczycie pliku!</b></center>';
  47. }
  48. $line = $HTTP_POST_VARS['title'];
  49. $line .= "|" . $HTTP_POST_VARS['news'];
  50. $line .="|" . $HTTP_POST_VARS['name'] . "|" . date("d.m.y"); 
  51. $line = str_replace("\r\n","<br>",$line);
  52. $line .= "\r\n";
  53. fwrite($fp, $line);
  54. if(!fclose($fp)) {
  55. echo '<center><b>Wystąpił błąd przy zapisie do pliku!</b></center>';
  56. }
  57. echo '<center><b>News został dodany poprawnie!</b></center>\n';
  58. } 
  59.  
  60. ?>


Kod do wyświetlania newsów:
  1. <?php
  2.  
  3. $news_db = file('sciezka_do_pliku');
  4. $news_db = array_reverse($news_db);
  5. foreach($news_db as $element) {
  6. $element = trim($element);
  7. $pieces = explode("|", $element);
  8. echo "<table><tr><td>" . $pieces[0] . "</td></tr><tr><td>" . $pieces[1] . "</td></tr><tr><td>Dodał&nbsp;" . $pieces[2] . "&nbsp;dnia:&nbsp;" . $pieces[3] . "</td></tr></table><br><br>";
  9. }
  10.  
  11. ?>

Plik .txt z newsami:
Kod
Tytuł newsa|Zawartość tekstowa newsa|Autor newsa|Data dodania
Tytuł newsa|Zawartość tekstowa newsa|Autor newsa|Data dodania
itd...
gam3r
twój problem polega na tym że nie identyfikujesz jednoznacznie każdego newsa ( np. miałbyś w innym pliku licznik id newsów i zwiekszałbyś go po dodaniu każdego newsa, jednocześnie każdy wiersz w pliku z newsami byłby poprzedzony jeszcze dodatkową "kolumną" - 'id' ), ale to i tak w 100% nie rozwiąże problemu, bo masz wszystkie wiadomosci w jednym pliku, a co kiedy bedziesz miał 150 newsów i nagle będziesz chciał zedytować / usunąć jakiegoś newsa ze środka? wtedy będziesz musiał przeszukać cały plik w poszukiwaniu danego newsa, wczytac jego dane do formularza, ale to nie koniec, bo jeżeli chcesz miec wszystko w 1 pliku, to wtedy inne newsy z pliku tez muszą być wczytane..do formularza, i na nowo zapisane w pliku z newsami wraz ze zedytowanym newsem. Jeżeli uparłeś się aby korzystać z plików to ja kiedyś używałem innego sposobu, mianowicie:
-miałem plik który przechowywał liczbę o numerze "id" ostatnio dodanego newsa, po dodaniu nowego newsa licznik ten zwiększałem
-każdy news był w osobnym pliku, równocześnie oznaczającym jego id, np. "1.php", "2.php" itd.
-w każdym z tych plików, newsy miały format np.
  1. <?php
  2. $id = 'jakas cyfra';
  3. $tytul='tytul';
  4. $tresc='tresc';
  5. $autor='autor';
  6. ?>

oczywiscie możesz dodać sobie jakąś tam nową kolumnę
-taki format pliku umożliwia "szybkie" dodanie newsa do pliku poprzez include/require, aby wyswietlic newsa wystarczy:
  1. <?php
  2.  
  3. require("1.php");
  4. echo $tytul . $tresc . $autor ;
  5.  
  6. ?>


no to chyba w sumie wszystko, wiec musisz zmienic swoj "system" bo w takiej postaci w jakiej go teraz masz to jest zbyt wolny, mało wydajny i kłopotliwy w użyciu

ale i tak polecamy Ci wszyscy MYSQLa
tomkoz11
Głębiej się zastanawiając sądzę, że rzeczywiście muszę ci przyznać rację... tongue.gif
Jak na razie, aby wyedytować newsy z poziomu przeglądarki, edytuję bezpośrednio plik z newsami.
Przedstawia się to tak:
  1. <?php
  2.  
  3. // Pobieranie zawartości pliku z newsami
  4. $news = file_get_contents('sciezka_do_pliku');
  5. // Wyświetlanie formularza
  6. echo '<form action="" method="POST">';
  7. echo "<textarea cols=\"45\" rows=\"5\" name=\"newsy\">$news</textarea><br><br>";
  8. echo '<input type="submit" value="Edycja"><br></form>';
  9. $editnews = $_POST['newsy'];
  10. // Zapis do pliku z newsami
  11.  $fp = fopen('sciezka_do_pliku, 'w+');
  12.  fwrite($fp, $editnews);
  13.  fclose($fp);
  14.  }
  15.  
  16. ?>


Wiem, że rozwiązanie to na dłuższą metę jest niepraktyczne, więc chyba rzeczywiście muszę się jak najszybciej nauczyć korzystać z baz MySQL...
Pozdrawiam i dziękuję za poradę winksmiley.jpg
Arrow
witam,

nie jest tak zle z ta edycja usuwaniem itp., wystarczy przyjac przy wysswietlaniu newsa jakies id na podstawie wierszy z pliku, przy edycji:
  1. <?php
  2. //Tytuł newsa|Zawartość tekstowa newsa|Autor newsa|Data dodania
  3.  
  4. list($tytulNewsa, $trescNewsa, $autorNewsa, $dataDodaniaNewsa)= explode('|',$_GET['$numerWiersza']);
  5. ?>


usuniecie
  1. <?php
  2. unset($_GET['$numerWiersza']);
  3. ?>


i po sprawie smile.gif

eh a co tam poranna kawka i jej rezultat:
  1. <?php
  2. define('SCIEZKA','newsy/newsy.php');
  3.  
  4. function wyswietl_newsy()
  5. {
  6. $plik = file( SCIEZKA );
  7. $ile_newsow = count($plik);
  8.  
  9. echo '<table>';
  10.  
  11. for($i=$ile_newsow;$i>0;$i--)
  12. {
  13. list($tytulNewsa, $trescNewsa, $autorNewsa, $dataDodaniaNewsa)= explode('|',$plik[$i]);
  14.  
  15. echo '<tr><td>'. $tytulNewsa .' - '. $dataDodaniaNewsa .'</td></tr>';
  16. echo '<tr><td>'. $trescNewsa .'</td></tr>';
  17. echo '<tr><td>'. $autorNewsa .'</td></tr>';
  18. }
  19.  
  20. echo '</table>';
  21. }
  22.  
  23. function edytuj_newsa($numerNewsa)
  24. {
  25. if(!empty($numerNewsa))
  26. {
  27. $plik = file( SCIEZKA );
  28.  
  29. list($tytulNewsa, $trescNewsa, $autorNewsa, $dataDodaniaNewsa)= explode('|',$plik[$numerNewsa]);
  30. echo '<table>';
  31. echo '<tr><td><input type="text" value="'. $tytulNewsa .'" id="tytul"/></td></tr>';
  32. echo '<tr><td><textarea id="tresc">'. $trescNewsa .'</textarea></td></tr>';
  33. echo '<tr><td><input type="text" value="'. $autorNewsa .'" id="autor"/></td></tr>';
  34. echo '</table>';
  35. }
  36. }
  37.  
  38. function wyswietl_panel_administracyjny()
  39. {
  40. $plik = file( SCIEZKA );
  41. $ile_newsow = count($plik);
  42.  
  43. echo '<table>';
  44.  
  45. for($i=0;$i<$ile_newsow;$i++)
  46. {
  47. list($tytulNewsa, $trescNewsa, $autorNewsa, $dataDodaniaNewsa)= explode('|',$plik[$i]);
  48.  
  49. echo '<tr><td>'. $tytulNewsa .' - '. $dataDodaniaNewsa .'</td>';
  50. echo '<td><a href="edycja.php?id='. $i .'">Edycja</a></td>';
  51. echo '<td><a href="usun.php?id='. $i .'">Usun</a></td></tr>';
  52. }
  53.  
  54. echo '</table>';
  55. }
  56.  
  57.  //wyswietl_newsy();
  58.  //edytuj_newsa(3);
  59.  wyswietl_panel_administracyjny();
  60.  
  61. ?>


reszte sam sobie dopisz smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.