Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> odświeżanie strony, zapis
skowron-line
post 26.03.2006, 21:56:00
Post #1





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


napisalem prosty skrypt dodawania komentarzy na stronke i mam pytanie jak zrobic zeby skrypt nie dodawal ciagle tygo samego po nacisnieciu odswieżania??

----
Posty będące duplikacją postów już zawartych w temacie, będą bez ostrzeżenia usuwane. Ma to zapobiedz tworzeniu się zbędnego śmietnika
moderator


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
TomASS
post 26.03.2006, 22:24:54
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Możesz albo zablokować możliwość dwóch postów tego samego usera na dany temat pod sobą, albo sprawdzać np. czy pierwsze (powiedzmy) 50 znaków poprzedniego posta, różnią się od tego właśnie dodawanego.


--------------------
Go to the top of the page
+Quote Post
mike
post 27.03.2006, 10:09:24
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Ponowny zapis do bazy po odświeżeniu strony
Go to the top of the page
+Quote Post
huntercs
post 27.03.2006, 11:23:36
Post #4





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 6.02.2005

Ostrzeżenie: (0%)
-----


w prosty sposób można to osiągnąć, mianowicie:
np.:
  1. <?php
  2. if(isset($_POST['AddReply']) && !isset($_POST['Re'])) $class->AddReply();
  3. ?>

a w forumularzu:
  1. <form action="" method="post">
  2. <?php if(!empty($_POST)) echo '<input name="Re" type="hidden" value="1">'; ?>
  3. <input name="AddReply" type="hidden" value="1">
  4. ...
  5. </form>

teraz po odświeżeniu strony, 2 raz nie doda się wpis do bazy guitar.gif

Ten post edytował huntercs 27.03.2006, 11:25:08


--------------------


Go to the top of the page
+Quote Post
skowron-line
post 27.03.2006, 21:35:11
Post #5





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


a jezeli chcem zrobic to przy zapisie do pliku .txt??
Moze jest to banalne pytanie ale naprawde niewiem


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
erix
post 28.03.2006, 07:27:16
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




to nie ma znaczenia, co robisz po submicie formularza, w skrypcie


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
nospor
post 28.03.2006, 07:34:02
Post #7





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Cytat(huntercs @ 2006-03-27 12:23:36)
w prosty sposób można to osiągnąć, mianowicie:
np.:
  1. <?php
  2. if(isset($_POST['AddReply']) && !isset($_POST['Re'])) $class->AddReply();
  3. ?>

a w forumularzu:
  1. <form action="" method="post">
  2. <?php if(!empty($_POST)) echo '<input name="Re" type="hidden" value="1">'; ?>
  3. <input name="AddReply" type="hidden" value="1">
  4. ...
  5. </form>

teraz po odświeżeniu strony, 2 raz nie doda się wpis do bazy guitar.gif

no nie do konca tak jest. tu chodzi o taki refresh przez wcisniecie F5 lub ctrl+r, a nie ponowne wcisniecie ręcznie submita.
Taki refresh o którym mowa, wysyla jeszcze raz ten sam formularz, z tymi samymi polami i wartościami. Tu nic nie da, ze ty dodasz dodatkowe pole, gdyż ono nie zostanie przy refreshu uwzględnione


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
skowron-line
post 28.03.2006, 11:11:27
Post #8





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


to chyba najlepszym sposobem jest po nacisnieci submita zrobic zapis i przekierowac na stronke na ktorej sa wyswielane komentarze

Ten post edytował skowron-line 28.03.2006, 11:13:59


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
nospor
post 28.03.2006, 12:14:16
Post #9





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Ja to robię jeszcze inaczej.
PRzy tworzeniu formularza, generują unikalny identyfikator, na podsawie chociazby timestampa i czegos tam jeszcze. Identyfikator ten dokladam do formularza, jako wartość pola ukrytego. Po wyslaniu formularza sprawdzam, czy dany identyfikator jest zapisany w sesji. jesli nie, zapisuję go do sesji a formularz akceptuję jako prawidlowy. jesli jednak ten identyfikator jest juz zapisany w sesji, znaczy ze jest to refresh i dane z formularza odrzucam.
Dzieki takiemu podejsciu, mogę pozostac dalej na stronie z formularzem, bez przekierowania. Jest to mi czasami potrzebne.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
skowron-line
post 28.03.2006, 20:52:50
Post #10





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


a do bazy danych to wymyslilem ze moge wyciagnac ostatni rekord z bazy i porownac go z wpisywanym i jesli bedzie identczny to odrzucic. to chyba nienajgorsze rozwiazanie

Ten post edytował skowron-line 28.03.2006, 20:53:48


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
huntercs
post 28.03.2006, 23:01:57
Post #11





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 6.02.2005

Ostrzeżenie: (0%)
-----


tylko po co mieszać do tego bazę? dodaktowe zapytanie... smile.gif
lepiej zrobić z COOKIE/SESSION
coś podobnego do tego co zaproponował nospor


--------------------


Go to the top of the page
+Quote Post
Kuziu
post 28.03.2006, 23:15:40
Post #12





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

Ostrzeżenie: (0%)
-----


A nie prościej zrobić np. dodanie commenta po czym header("Location: adres.php");

I wszystkie F5 z głowy ?


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
Go to the top of the page
+Quote Post
mike
post 29.03.2006, 08:56:34
Post #13





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(huntercs @ 2006-03-28 23:01:57)
tylko po co mieszać do tego bazę? dodaktowe zapytanie... smile.gif

Ależ jakie dodatkowe zapytanie?
Wystarczy nałożyć kluch UNIQUE.

Kliknij w linka, którego dałem na górze wątku.
Ja uważam że to jest najlepsze rozwiązanie.

Nie angażujesz żadnej sesji, ciasteczek ani niczego.

Po prostu działa biggrin.gif
Go to the top of the page
+Quote Post
nospor
post 29.03.2006, 08:59:38
Post #14





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Cytat
Wystarczy nałożyć kluch UNIQUE.
Ale nalozysz klucz na wszystkie pola? a co jesli rekord moze sie powtorzyc poprzez jawne wpisanie? A co jesli nie mozna zalozyc unique na zadne pole, gdyz kazde z osobna moze sie powtarzac. Osobiscie nie podoba mi ten sposob zabezpieczenia przed refreshem. Nie bedziemy przeciez zmieniac struktury bazy tylko pop to by uniknać refresha. Do tego są inne rzeczy juz tu wymienione


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mike
post 29.03.2006, 09:12:59
Post #15





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 2006-03-29 08:59:38)
a co jesli rekord moze sie powtorzyc poprzez jawne wpisanie? A co jesli nie mozna zalozyc unique na zadne pole, gdyz kazde z osobna moze sie powtarzac.

Więc należy wybarć kombinacją pól, które powtarzać się nie powinny.
W 99% przypadków kombinacja taka istnieje.

Cytat(nospor @ 2006-03-29 08:59:38)
Osobiscie nie podoba mi ten sposob zabezpieczenia przed refreshem. Nie bedziemy przeciez zmieniac struktury bazy tylko pop to by uniknać refresha. Do tego są inne rzeczy juz tu wymienione

Prezcież to nie jest zmiana struktury bazy. Przy jej projektowaniu powinno się założyć unikalność na pola, które tego wymagają.
A poza tym gdyby to do aplikacji klienckiej miało należeć kontrolowanie unikalności wprowadzanych danych, to po co w bazach byłby w ogóle ten mechanizm.

Ja uważam że najlepiej baza zadba sama o siebie, mało tego jest to sapoób właśnie do tego stworzony, i jeszcze mniej tego smile.gif najwygodniejszy.
Nie powiesz mi ~nospor, że pisanie mechanizmów ciasteczek, zapisywanie informacji w sesji, ciągłe pilnowanie tego jest wygodniejsze niż blok try ... catch i wyrzucanie wyjątku z odpowienim kodem (1062 w tym przypadku).
Go to the top of the page
+Quote Post
nospor
post 29.03.2006, 09:18:12
Post #16





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




dalej sie z tobą nie zgadzam. Istnieją przecież tabele, w których nie może byc pol unikatowcyh. nie dlatego ze baza na to nie pozwala, ale dlatego, ze zalozenia dla danej tabeli na to nie pozwalają. a konkretnie pozwalają na takie same rekordy. moze tak byc.

Cytat
Nie powiesz mi ~nospor, że pisanie mechanizmów ciasteczek, zapisywanie informacji w sesji, ciągłe pilnowanie tego jest wygodniejsze niż blok try ... catch i wyrzucanie wyjątku z odpowienim kodem (1062 w tym przypadku).
Obys sie nie zdziwil smile.gif Zalezy czego uzywasz. Ja uzywam wlasnej klaski do formualrzy. Wiesz jak sa sprawdzam czy byl refresh czy nie? O tak:
  1. <?php
  2. if ($form->WasThisOperation()) echo 'To jest refresh';
  3. ?>
No i niepowiesz mi chyba, ze jest to nie wygodne winksmiley.jpg

edit:
Cytat
Prezcież to nie jest zmiana struktury bazy.
źle sie wyslowilem. chodzilo mi, ze nie bede zakladal uniqow jesli nie potrzebuje, tylko poto by refresha uniknąc


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mike
post 29.03.2006, 09:30:15
Post #17





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Ładnie, bardzo ładnie.

Ja to robię tak:
  1. <?php
  2.  
  3. try
  4. {
  5. $objModel->addQuestion(); // chwilowe uproszczenie
  6. }
  7. catch( SQLException $objException )
  8. {
  9. switch( $objException->getCode() )
  10. {
  11. case 1062 : 
  12. $objRequest->setError( 'question', 'Takie pytanie już istnieje.' );
  13. break;
  14.  
  15. default : 
  16. $objRequest->setError( 'error', 'Nie można dodać pytania.' );
  17. break;
  18. }
  19.  
  20. return View::ERROR;
  21. }
  22.  
  23. ?>


Połączenie Agavi i Creole'a.

Jak mi wyskoczy wyjątek to mogę z aplikacją zrobić wszystko, zależy to od tego jaki.

Każdy ma swój najlepszy sposób biggrin.gif
Go to the top of the page
+Quote Post
nospor
post 29.03.2006, 10:00:19
Post #18





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




A że ja upierdliwy jestem...
A co w przypadku, gdy mamy formularz, ale jego wynik nie jest zapisywany do bazy, tylko wysylany mailem? Jest to tzw. formularz kontaktowy. Wtedy uniqi na bazie nam nic nie dadzą winksmiley.jpg
Oczywiście można wówczas użyc header, lub sesje.

A jeszcze pytanko bo nie sprawdzalem tego nigdy. Zalozmy ze uzywamy header, zeby przekierowac po wyslaniu formularza. A czy jest mozliwa sytuacja, ze koles zanim zostanie przekierowany zdązy wcisnąć F5, czyli tym samym ponownie wysle ten sam formularz?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
skowron-line
post 29.03.2006, 10:00:31
Post #19





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


ja napisalem cos takiego i dziala
  1. <?php
  2. mysql_connect('localhost','root','');
  3. mysql_select_db('skowron');
  4.  
  5. $wpis_id = $HTTP_POST_VARS['wpis_id'];
  6. $podpis = $HTTP_POST_VARS['podpis'];
  7. $wpis = $HTTP_POST_VARS['wpis'];
  8.  
  9. echo"<form action=f5.php method=post>
  10. podpis: <input type=text name=podpis size=20><br>
  11. wpis: <br><textarea rows=5 cols=10 name=wpis></textarea>
  12. <input type=submit name=zapisz value=zapisz>";
  13.  
  14. if(isset($zapisz))
  15. {
  16. $zapytanie = 'SELECT wpis FROM wpisy ORDER BY wpis_id DESC LIMIT 1';
  17. if($a = mysql_query($zapytanie))
  18. {
  19. while($wiersz = mysql_fetch_array($a))
  20. {
  21. echo"<input type=hidden name=z_bazy value='".$wiersz['wpis']."'>";
  22. }
  23. }
  24. echo"$z_bazy";
  25. if($wpis == $z_bazy)
  26. {
  27. echo"takie same";
  28. }
  29. else
  30. {
  31. $zapytanie = 'INSERT INTO wpisy values("","'.$podpis.'","'.$wpis.'")';
  32. if(!mysql_query($zapytanie))
  33. {
  34. echo"blad ".mysql_error()."";
  35. }
  36. }
  37. }
  38. ?>

prosze o lekka krytyke jesli komus sie nie bedzie podobac winksmiley.jpg


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
nospor
post 29.03.2006, 10:20:24
Post #20





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




ale o ile dobrze wczytuje sie w ten kod, to ty zrobiles to, co zaproponowal wczesniej huntercs (i to nie dokladnie tak). Jak juz pisalem wczesniej to nie zadzial przy refreshu.

W jaki sposob ty to testowales?
Bo to wyglada tak:
jesli wcisniesz zapisz, to dogenerowujesz do formularza hiddena, z ostatnim wpisem z bazy, ale ten wpis nie jest tym, co aktualnie dodajesz. Potem sprawdzasz, czy wpis z bazy z hiddena rowny jest aktualnemu. To bedzie rowne dopiero przy ktoryms tam razie.
A wsytuacji, gdy wygenerujesz formularz pierwszy raz, wscisniesz zapisz a potem dasz refresh, to ci nie zadziala. No chyba ze mamy co innego na mysli mówiąc refresh winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 16:46