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%)
-----


Ok, więc nadrabiając zaległości (już wrzucę kod w tagach)

kod na stronie pytanie.php:
  1. <?php
  2. $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. }
  25. ?>

wyświetlenie pytania o konkretnym id i poniżej tego dwie akcje, głos na plus i na minus.
Poniżej też są komentarze, ale jak się w głosowaniu wyjaśni dlaczego się podwójnie wykonuje, to będzie podobnie w komentarzach.

Po kliknięciu na jedną z akcji, plus lub minus przechodzi się na strone glosuj.php, gdzie jest tylko mały fragment w php:

  1. <?php
  2. $akcja=$_GET['akcja'];
  3. $id=$_GET['id'];
  4.  
  5. if ($akcja=='plus') {
  6. $wynik=mysql_query("UPDATE pytania SET glos=glos+1 WHERE id='$id'");
  7. }
  8.  
  9. if ($akcja=='minus') {
  10. $wynik=mysql_query("UPDATE pytania SET glos=glos-1 WHERE id='$id'");
  11. }
  12.  
  13. $napis="Twój głos został naliczony";
  14. $zobacz="<a href=pytanie.php?id=$id>$napis</a>";
  15. echo ("$zobacz");
  16. ?>


To jest mały portalik, na podstawie którego chce się nauczyć PHP, ale nie mogę przejśc dalej jak ten szczegół siedzi mi na głowie. Najczęściej zdarza się podwójne nabicie, głosu czy też komentarza przy pierwszej podjętej akcji, dalej odbywa się to normalnie.
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: 17.10.2025 - 13:13