Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Losowe podwójne zapisywanie do pliku
Forum PHP.pl > Forum > PHP
Zawleka
Witam.

Mam taki problem. Otóż mam dane pobierane z formularza, oraz kod, który ma zapisywać dane do pliku. Wszystko jest niby dobrze, ale co kilka wpisów dane są zapisywane 2x nie wiedzieć dlaczego.

Oto kod

  1. <?php
  2. $nazwa = $_SESSION['nazwa'];
  3.  
  4. $miasto = $_SESSION['miasto'];
  5.  
  6. $powierzchnia = $_SESSION['powierzchnia'];
  7.  
  8.  $file = 'db.rtq';
  9.  
  10.  $fp =fopen ($file, 'r' );
  11.  
  12.  $stareDane = fread($fp, filesize($file));
  13.  
  14.  fclose($fp);
  15.  
  16.  
  17. $dane = '
  18.  
  19. <!-- $nazwa -->
  20.  <tr><td class=kol_1> '.$nazwa.' </td>
  21.  <td class=kol_2> '.$miasto.' </td>
  22.  <td class=kol_3> '.$powierzchnia.' m<sup>2</sup></td>
  23.  </tr>
  24.  <!-- $nazwa --> ';
  25.  
  26.  $dane .= $stareDane;
  27.  
  28.  
  29.  $fp =fopen($file, 'w' );
  30.  
  31.  rewind($fp); 
  32.  
  33.  fputs($fp, $dane);
  34.  
  35.  fclose($fp);
  36. ?>


Oczywiście na początku pliku jest deklaracja rozpoczęcia sesji.

Gdzie leży problem ? Dlaczego dane czasmi dodają się 2x ? Dokładnie tworzą się dwa takie same wpisy.


Proszę o pomoc. Będę bardzo wdzięczny.
wipo
A nie wykonujesz 2x tego skryptu?
Nie mówie że robisz to ty ale możliwe że ktoś prz okazji.
Albo gdzieś masz include 2x
Zawleka
Nie nie właśnie nie

na stronie nigdzie nie ma zrobionego include

musiał bym przeładować, żeby 2x się wykonał

no ale widocznie się wykonuje 2x ale dlaczego, gdzie leży problem

najdziwniejsze jest to, że to się robi losowo, np 3 wpisy są dobrze a 4 jest źle, 5 też a nastepne 10 też dobrze i potem jeden źle i następne 5 dobrze. Nie ma na to reguły.
wipo
A daj taki warunek na początku
if (($nazwa2!= $_SESSION['nazwa'])|| ($miasto2!=$_SESSION['miasto'])||
($powierzchnia3!=$_SESSION['powierzchnia'])){
$nazwa2 = $_SESSION['nazwa'];
$miasto2 = $_SESSION['miasto'];
$powierzchnia2 = $_SESSION['powierzchnia'];
....poniżej to co jest teraz
Zawleka
Właśnie przed chwilą się z tym uporałem smile.gif

Błąd nie leżał w tym kodzie. Stronę wcześniej, gdzie trzeba było potwierdzić poprawność wprowadzanych danych, zamiast normalnego linka do tej strony dałem przycisk submit taki jak w formularzach smile.gif

To najwyraźniej był błąd ponieważ teraz już po 15 wpisach jest ok smile.gif


Przy okazji, może ktoś mi powie jak zrobić aby kiedy skrypt tej strony się wykona, aby po jej przeładowaniu nie wykonał się jeszcze raz, czyli nie dodał wpisu ponownie.
nospor
Cytat
Przy okazji, może ktoś mi powie jak zrobić aby kiedy skrypt tej strony się wykona, aby po jej przeładowaniu nie wykonał się jeszcze raz, czyli nie dodał wpisu ponownie.


Problem czesto poruszany. przyklady:
http://forum.php.pl/index.php?showtopic=44383
http://forum.php.pl/index.php?showtopic=36933&hl=1062
Zawleka
@nospor

Twoja metoda bardzo mi się spodobała, chodzi o to generowanie unikalnego klucza

lecz samemu nie wiem ja kto zrobić a w tych tematach przykładów zabrakło na ten temat

mógłbyś zarzucić kawałkiem porządnego kodu w tej kwestii ?
nospor
Cytat
Twoja metoda bardzo mi się spodobała, chodzi o to generowanie unikalnego klucza

lecz samemu nie wiem ja kto zrobić a w tych tematach przykładów zabrakło na ten temat
Ale chodzi ci o generowanie unikalnego Identyfikatora? Bylo wiele razy. Najprosciej walnij md5 z time() smile.gif (albo nawet bez md5)
Mozesz do tego dorzucic jeszcze np. IP kolesia i wiele innych.

edit: a tu masz jakis banalny skrypcik na GUID:
  1. <?php
  2. function GenerateGuid()
  3. {
  4.  mt_srand((double)microtime()*10000);
  5.  $charid = strtoupper(md5(uniqid(rand(), true)));
  6.  $uuid = substr($charid, 0, 8).'-'
  7.  .substr($charid, 8, 4).'-'
  8.  .substr($charid,12, 4).'-'
  9.  .substr($charid,16, 4).'-'
  10.  .substr($charid,20,12);
  11. return $uuid;
  12. }
  13. ?>
od razu mowie ze mozna lepiej
Zawleka
Ja zrobiłem jeszcze prościej, chyba najprościej i prymitywnej jak się dało smile.gif ale do moich potrzeb jest w sam raz smile.gif

otóż robię tak

na stronie gdzie potwierdza się poprawność danych, które zaraz zostaną wprowadzone rejestruję do sesji zmienną $zm i nadaje jej wartość 1 smile.gif

potem w pliku ze skryptem który wprowadza do pliku, sprawdzam czy $zm == 1, jeżeli tak to zapisuje do pliku, na końcu zapisu do pliku nadaje zmiennej $zm = 0; tym samym jak ktoś odświeży zapis się nie wykona ponieważ $zm = 0 smile.gif

bardzo proste i logiczne i dla mnie wystarczające smile.gif

niemniej dziękuje wszystkich za pomoc 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.