Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z pętlą
Forum PHP.pl > Forum > Przedszkole
zolax
Witam mam problem z tą pętlą ponieważ gdy aktualizuję posta ona robi dwa posty. Jak zrobić żeby tylko aktualizowała a nie dodawała nowego.
  1. foreach($posty as $post) {
  2. if ($line_num == $_POST['post_number']) {
  3. $post_filtrowany = preg_replace('/\r\n/', " ", $_POST['editor']);
  4. $post_filtrowany = preg_replace('/###/', "", $post_filtrowany);
  5. $data = date("Y-m-d H:i:s");
  6. $wpis = "$data###".$_POST['post_title']."###$data###$login###".$post_filtrowany."###\n";
  7. fwrite($nowy_plik, $wpis);
  8. }
  9. else
  10. fwrite($nowy_plik, $post);
  11. $line_num++;
  12. }
  13. fclose($nowy_plik);
  14. }
tolomei
Witaj.

Zdaje się, że powinieneś podać więcej kodu.

Pozdrawiam.
-Zolax-
Sorka smile.gif

  1. if (isset($_GET['action'])) {
  2. if ($_GET['action'] == 'dodaj') {
  3. $tytul_filtrowany = preg_replace('/\r\n/', " ", $_POST['post_title']);
  4. $tytul_filtrowany = preg_replace('/###/', "", $tytul_filtrowany);
  5.  
  6. $tytul_filtrowany = trim($tytul_filtrowany);
  7.  
  8. $post_filtrowany = preg_replace('/\r\n/', " ", $_POST['editor']);
  9. $post_filtrowany = preg_replace('/###/', "", $post_filtrowany);
  10.  
  11. $data = date("Y-m-d H:i:s");
  12.  
  13. $wpis = "$data###".$tytul_filtrowany."###$data###$login###".$post_filtrowany."###\n";
  14.  
  15. $nowy_plik = fopen("posts.txt", "a");
  16. fwrite($nowy_plik, $wpis);
  17. fclose($nowy_plik);
  18. echo "<script>document.location.href='./art.php';</script>";
  19. }
  20. }
  21. if (isset($_POST['post_number'])) {
  22. $posty = file("posts.txt");
  23. //tu również sortowanie, żeby się nie posypało
  24. $plik_2 = array();
  25. foreach ($plik as $element) {
  26. // debug($element);
  27. $dane = explode("###", $element);
  28. $plik_2[$dane[0]] = $element;
  29. }
  30. $plik = $plik_2;
  31. arsort($plik);
  32.  
  33. $nowy_plik = fopen("posts.txt", "w");
  34.  
  35. $line_num = 1;
  36. foreach($posty as $post) {
  37. if ($line_num == $_POST['post_number']) {
  38. $post_filtrowany = preg_replace('/\r\n/', " ", $_POST['editor']);
  39. $post_filtrowany = preg_replace('/###/', "", $post_filtrowany);
  40. $data = date("Y-m-d H:i:s");
  41. $wpis = "$data###".$_POST['post_title']."###$data###$login###".$post_filtrowany."###\n";
  42. fwrite($nowy_plik, $wpis);
  43. }
  44. else
  45. fwrite($nowy_plik, $post);
  46. $line_num++;
  47. }
  48. fclose($nowy_plik);
  49. }
tolomei
Wiesz szczerze to ja nie wiem czemu Ci dwa razy wstawia...
Może koledzy się wykażą...
crocodillo
Spróbuj przed tą linijką:
  1. foreach($posty as $post) {

wstawić:
  1. var_dump($posty,$_POST['post_number']);

i sprawdź czy na pewno indeksy się zgadzają (nie zapomnij dodać 1)
tolomei
@crocodillo dobrze kombinuje! Jeśli jest różnica o jedną pozycję w indeksach to edytowany post zostanie wpisany obok starego, a nie na jego miejscu.
Dobre.
crocodillo
Cytat(tolomei @ 14.04.2012, 22:32:25 ) *
Jeśli jest różnica o jedną pozycję w indeksach to edytowany post zostanie wpisany obok starego, a nie na jego miejscu.


A dokładniej to inny post zostanie zastąpiony nowym wpisem. Dobrze by było też zapisać sobie indeksy a nie robić tego po numerze linii, szczególnie jeśli za każdym razem edytujesz cały plik.

Możesz też przechowywać te posty w normalnej tablicy, a zapisując do pliku po prostu użyj serialize() i unserialize() odczytując z pliku.
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.