Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]podwójne wykonanie skryptu
lordvanyuri
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 11.12.2008

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


Witam, w php jestem początkujący i nie znam wielu spraw. Poniższy problem już analizowałem jak sie tylko da i nic. Nie rozumiem gdzie jest błąd.

Chodzi o podwójne wykonanie skryptu. Dotyczy to komentarzy i np. głosowania.

Na stronie A jest OBIEKT, który można skomentować i ocenić na + i -.
Z bazy danych jest odczytywana odpowiednia wartość i wyświetlana.

Głosowanie.
Chcąc zagłosować np. na +. Klika się w link www.nazwa.pl/glosuj.php?id=12&akcja=plus

Na stronie glosuj.php jest prosty skrypt, który ma tylko zwiększyć wartość o jeden, a czasem zwiększa o 2. Dlaczego?
I to tylko zazwyczaj za pierwszym razem, bo dalej poruszając się po stronie, sytuacja się normalizuje i już działa poprawnie.
Oto skrypt na stronie glosuj.php:
  1. <?php
  2. [b]$akcja=$_GET['akcja'];
  3. $id=$_GET['id'];[/b]
  4.  
  5. [b]if ($akcja=='plus') {
  6. $wynik=mysql_query("UPDATE pytania SET glos=glos+1 WHERE id='$id'");
  7. }[/b]
  8.  
  9. [b]if ($akcja=='minus') {
  10. $wynik=mysql_query("UPDATE pytania SET glos=glos-1 WHERE id='$id'");
  11. }
  12. ?>

[/b]Nic prostszego, prawda? Więc dlaczego, gdy skrypt się wykonuje, to zamiast zwiększyć/zmniejszyć wartość w bazie danych o jeden, zmienia ją o dwie jednostki?

Przy głosowaniu to tak źle nie wygląda, ale w systemie komentarzy już tak. Ponieważ dodaje mi dodatkowo jeden pusty komentarz, co już nie wygląda zbyt fajnie i estetycznie wizualnie... i go zlicza w bazie jako normalny.

O co w tym chodzi? gdzie jest błąd? Przecież ze strony z OBIEKTEM przekazuję wartość id przypisująca obiekt w bazie, oraz akcje, która identyfikuje, co ma być zrobione, a pomimo prostoty, gdzieś jest zapętlenie i czasem skrypt wykonuje się podwójne?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? Dlaczego?

Z góry będę wdzięczy za rozjaśnienie tej sprawy.

Pozdrawiam

Ten post edytował lordvanyuri 1.06.2009, 23:33:14
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
lordvanyuri
post
Post #2





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 11.12.2008

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


kkuba , dzięki , wkleiłem ten kod, osobiście jeszcze go nie rozumiem w pełni i dużo mi nie mówi, nie na tym etapie, wątpiłem, że będzie działał, ale działa , tylko wciąż, jeśli pierwszy raz klikam w plus, zwiększa mi o 2jednostki, a jeśłi klikam w minus zmniejsza o 2 jednostki, ale dalej już jest ok, działa o jedną, hmm.

Oto kod ze strony, na której są obiekty do oceny:
  1. <?php
  2. [b] $idget=$_GET['id'];
  3.        $wynik=mysql_query("SELECT * FROM pytania");    
  4.  
  5.        while ($wynik && $rekord=mysql_fetch_assoc ($wynik)) {
  6.        $id=$rekord['id'];
  7.        $pytanie=$rekord['pytanie'];
  8.        $koment=$rekord['koment'];
  9.        $glos=$rekord['glos'];
  10.        
  11.        if ($idget==$id) {
  12.        print '
  13.        <p align="center">
  14.        <font size="6" color="FFFF00"><b>'.$pytanie.'</b></font></p>';
  15.        
  16.        print '
  17.      <p> <center>
  18.      <a href="glosuj.php?id='.$idget.'&akcja=plus">
  19.      <img border="0" src="plus3v.png" width="250" height="85"></a>&nbsp;&nbsp;
  20.      <a href="glosuj.php?id='.$idget.'&akcja=minus">
  21.      <img border="0" src="minusv.png" width="250" height="85"></a></p>
  22.      <p> <font size="4">Głosów: </font> <b><font size="5" color="#FFFFFF">'.$glos.'</font></b></center></p>';
  23.      }
  24. }[/b]
  25. ?>


na stronie glosuj.php jest to co zaproponował kkuba i to co wcześniej zamieściłem - i wciąż przy pierwszym kliknięciu nalicza podwójnie. I jak to wygląda? pewnie zalatuje grafomanią.

Ten post edytował lordvanyuri 1.06.2009, 23:34:01
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 12.10.2025 - 21:59