Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Sesja - błędy w kodzie
ebate
post 4.11.2011, 22:30:12
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 12.10.2011

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


Ot kod który ma działać (a powinien przynajmniej w zamyśle) następująco: losują się 2 zdjęcia, klikam na jakieś zdjęcie przez co dodaje wartość=1 do odpowiednich danych w bazie, a następnie losuje kolejne 2, itak w kólko.

Podany kod tak raczej nie działa, z sesjami bawię się od dziś więc jakby ktoś dojrzał jakieś błędy niech je napisze.
  1. require('conn.php');
  2.  
  3.  
  4.  
  5. $_SESSION['zdj_first']=("$wykonaj = mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 1");
  6.  
  7.  
  8. while($wiersz = mysql_fetch_array($wykonaj))
  9.  
  10. {
  11.  
  12. echo '<a href=glosowaniem.php><img height="200" width="175" src="'.$wiersz['sciezka'].'"/></a>';
  13.  
  14. }");
  15.  
  16. $_SESSION['zdj_second']=("$wykonaj1 = mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 1");
  17.  
  18.  
  19. while($wiersz1 = mysql_fetch_array($wykonaj1))
  20.  
  21. {
  22.  
  23. echo '<a href=glosowaniem.php><img height="200" width="175" name="przycisk" src="'.$wiersz1['sciezka'].'"/></a>';
  24.  
  25. }");
  26.  
  27. if($_SESSION['zm_sesji']) {
  28.  
  29. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='.$wiersz['sciezka'].'");
  30.  
  31. mysql_query("UPDATE user SET przegrana=przegrana+1 WHERE sciezka='.$wiersz1['sciezka'].'");
  32.  
  33. }
  34.  
  35. if($_SESSION['zdj_second']) {
  36.  
  37. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='.$wiersz['sciezka'].'");
  38.  
  39. mysql_query("UPDATE user SET przegrana=przegrana+1 WHERE sciezka='.$wiersz1['sciezka'].'");
  40.  
  41. }
  42.  
  43.  
Go to the top of the page
+Quote Post
kadlub
post 5.11.2011, 11:26:24
Post #2





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


Nie wiem jaki masz błąd bo nie napisałeś ale
daje się na samym początku pliku
Go to the top of the page
+Quote Post
ebate
post 5.11.2011, 12:03:33
Post #3





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 12.10.2011

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


Rozumiem, że session_start(); ma być przed require('conn.php');. Poprawiony kod wygląda następująco:

  1. <?php
  2.  
  3. require('conn.php');
  4.  
  5.  
  6. $_SESSION['zdj_first']=("$wykonaj = mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 1");
  7.  
  8. while($wiersz = mysql_fetch_array($wykonaj))
  9.  
  10. {
  11.  
  12. echo '<a href=glosowaniem.php><img height="200" width="175" src="'.$wiersz['sciezka'].'"/></a>';
  13.  
  14. }");
  15.  
  16. $_SESSION['zdj_second']=("$wykonaj1 = mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 1");
  17.  
  18. while($wiersz1 = mysql_fetch_array($wykonaj1))
  19.  
  20. {
  21.  
  22. echo '<a href=glosowaniem.php><img height="200" width="175" name="przycisk" src="'.$wiersz1['sciezka'].'"/></a>';
  23.  
  24. }");
  25.  
  26.  
  27. if($_SESSION['zdj_first']) {
  28.  
  29. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='.$wiersz['sciezka'].'");
  30.  
  31. mysql_query("UPDATE user SET przegrana=przegrana+1 WHERE sciezka='.$wiersz1['sciezka'].'");
  32.  
  33. }
  34.  
  35. if($_SESSION['zdj_second']) {
  36.  
  37. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='.$wiersz1['sciezka'].'");
  38.  
  39. mysql_query("UPDATE user SET przegrana=przegrana+1 WHERE sciezka='.$wiersz['sciezka'].'");
  40.  
  41. }
  42.  
  43.  
  44. ?>

Go to the top of the page
+Quote Post
kadlub
post 5.11.2011, 12:04:59
Post #4





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


działa questionmark.gif
a jak nie to jakie błędy??
Go to the top of the page
+Quote Post
ebate
post 5.11.2011, 12:06:33
Post #5





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 12.10.2011

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


Niestety, ciągle wyskakiwał błąd:
Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\PIOTR\glosowaniem.php

Więc pousuwałem przy zmiennych $_SESSION znaki (""), a następnie znowu wyskoczył błąd:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\PIOTR\glosowaniem.php on line 30
Go to the top of the page
+Quote Post
kadlub
post 5.11.2011, 12:11:02
Post #6





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


  1.  
  2. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='".$wiersz['sciezka']."'");
Go to the top of the page
+Quote Post
ebate
post 5.11.2011, 12:20:15
Post #7





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 12.10.2011

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


W końcu nie wywala błędów. Tylko, że dalej jest pewnie problem. W zamyśle po kliknięciu na jedno ze zdjęć dodaje 1 punkt do odpowiedniego pola bazie (wygrana lub przegrana). Niestety, nic nie dodaje. Czy błędem jest to, że aktualnie pole wygrana bądź przegrana nie mają żadnej wartości?
Go to the top of the page
+Quote Post
kadlub
post 5.11.2011, 12:22:12
Post #8





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


pokaż kod po wszystkich poprawkach
Go to the top of the page
+Quote Post
ebate
post 5.11.2011, 12:22:51
Post #9





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 12.10.2011

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


  1. <?php
  2.  
  3. require('conn.php');
  4.  
  5.  
  6. $_SESSION['zdj_first']=$wykonaj = mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 1");
  7.  
  8. while($wiersz = mysql_fetch_array($wykonaj))
  9.  
  10. {
  11.  
  12. echo '<a href=glosowaniem.php><img height="200" width="175" src="'.$wiersz['sciezka'].'"/></a>';
  13.  
  14. };
  15.  
  16. $_SESSION['zdj_second']=$wykonaj1 = mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 1");
  17.  
  18. while($wiersz1 = mysql_fetch_array($wykonaj1))
  19.  
  20. {
  21.  
  22. echo '<a href=glosowaniem.php><img height="200" width="175" name="przycisk" src="'.$wiersz1['sciezka'].'"/></a>';
  23.  
  24. };
  25.  
  26.  
  27. if($_SESSION['zdj_first']) {
  28.  
  29. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='".$wiersz['sciezka']."'");
  30.  
  31. mysql_query("UPDATE user SET przegrana=przegrana+1 WHERE sciezka='".$wiersz1['sciezka']."'");
  32.  
  33. }
  34.  
  35. if($_SESSION['zdj_second']) {
  36.  
  37. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='".$wiersz1['sciezka']."'");
  38.  
  39. mysql_query("UPDATE user SET przegrana=przegrana+1 WHERE sciezka='".$wiersz['sciezka']."'");
  40.  
  41. }
  42.  
  43.  
  44. ?>
Go to the top of the page
+Quote Post
kadlub
post 5.11.2011, 12:30:40
Post #10





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


myślę że jak losujesz z bazy jeden rekord to pętle while nie są ci potrzebne w warunkach zapytania masz .$wiersz['sciezka']. a to chyba będzie dostępne tylko wewnątrz pętli a i jeszcze jedno nie wiem skąd skrypt ma wiedzieć kiedy został wciśnięty przycisk.
Go to the top of the page
+Quote Post
ebate
post 5.11.2011, 12:35:06
Post #11





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 12.10.2011

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


No właśnie nad tym głowie się już trochę. Może pomoże Ci to, co nospor napisał:

Przedewszystkim, to w sesji musisz zapisać wylosowane rekordy. Przecież jak user kliknie w obrazek, to ty po przeładowaniu strony znowu losujesz i wylosowane rekordy są już inne niż z paczki dwóch co koleś klikał.

Po kliknieciu sprawdzasz w sesji, czy dany klik jest i jak jest to juz wszystko masz co chciałeś. Jednemu dajesz wygrana a drugiem przegrana
Go to the top of the page
+Quote Post
mortus
post 5.11.2011, 14:05:57
Post #12





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


1. Identyfikator użytkownika, którego zdjęcie zostało kliknięte musisz przekazać w adresie url:
  1. <a href="glosowaniem.php?id=ID">...</a>

2. Do wylosowania dwóch unikalnych użytkowników posłuż się zapytaniem:
  1. SELECT * FROM `user` WHERE `plec` = 'mężczyzna' ORDER BY RAND() LIMIT 2

Pamiętaj jednak, że przy dużej liczbie rekordów w bazie danych tego rodzaju zapytania są bardzo wolne.
3. W sesji zapisujesz identyfikator wyniku zapytania, a powinieneś raczej zapisać po prostu odpowiedni wiersz z bazy danych
  1. // korzystając z powyższego zapytania
  2. $wynik = mysql_query($zapytanie);
  3. while($wiersz = myslq_fetch_assoc($wynik)) {
  4. $_SESSION['wylosowani_uzytkownicy'][$wiersz['id']] = $wiersz;
  5. // a tutaj wyświetlanie adresu url w odpowiedniej formie (wspomniałem wyżej) oraz zdjęcia
  6. }

4. Teraz po kliknięciu na któreś ze zdjęć w tablicy $_GET['id'] powinieneś mieć identyfikator użytkownika, którego zdjęcie zostało kliknięte. Porównujesz ten identyfikator z danymi zapisanymi w sesji (a dokładniej w $_SESSION['wylosowani_uzytkownicy']) i wykonujesz odpowiednie UPDATE-y.
5. W zapytaniach UPDATE powinieneś się posługiwać raczej identyfikatorami (id), które są przechowywane w sesji, aniżeli ścieżką do zdjęcia/obrazka, jak to robisz teraz.
Go to the top of the page
+Quote Post
kadlub
post 5.11.2011, 14:49:17
Post #13





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


Cytat(mortus @ 5.11.2011, 14:05:57 ) *
Porównujesz ten identyfikator z danymi zapisanymi w sesji (a dokładniej w $_SESSION['wylosowani_uzytkownicy']) i wykonujesz odpowiednie UPDATE-y.



hmmm nie wiem czy to będzie działało bo po kliknięciu na link zostaną wylosowane nowe rekordy i przypisane do sessi a w get będzie wynik wcześniejszego losowania więc ten warunek nie będzie spełniony
Go to the top of the page
+Quote Post
mortus
post 5.11.2011, 15:06:03
Post #14





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(kadlub @ 5.11.2011, 14:49:17 ) *
hmmm nie wiem czy to będzie działało bo po kliknięciu na link zostaną wylosowane nowe rekordy i przypisane do sessi a w get będzie wynik wcześniejszego losowania więc ten warunek nie będzie spełniony

Przecież można najpierw porównać $_GET['id'] z zawartością sesji, a dopiero później wylosować nowe wartości, a można nawet i ich nie losować. Punkty nie oznaczały kolejności działań.

Ten post edytował mortus 5.11.2011, 15:06:21
Go to the top of the page
+Quote Post
ebate
post 5.11.2011, 18:08:29
Post #15





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 12.10.2011

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


A więc oto mój aktualny kod. Niestety, w dalszym ciągu nie dodaje punktów w bazie

  1. <?php
  2.  
  3.  
  4. require('conn.php');
  5.  
  6. $wynik = mysql_query("SELECT * FROM `user` WHERE `plec` = 'mężczyzna' ORDER BY RAND() LIMIT 2");
  7.  
  8. while($wiersz = mysql_fetch_assoc($wynik))
  9.  
  10. {
  11.  
  12. $_SESSION['wylosowani_uzytkownicy'][$wiersz['id']] = $wiersz;
  13.  
  14. echo '<a href="glosowaniem.php?id=ID"><img height="200" width="175" name="przycisk" src="'.$wiersz['sciezka'].'"/></a>';
  15.  
  16. }
  17.  
  18. if($_SESSION['wylosowani_uzytkownicy']==$_GET['id'])
  19.  
  20. {
  21.  
  22. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE id='".$_GET['id']==$_GET['id']."'");
  23.  
  24. }
  25.  
  26.  
  27. ?>


Zaktualizowałem kod

Ten post edytował ebate 5.11.2011, 18:08:10
Go to the top of the page
+Quote Post
kadlub
post 5.11.2011, 19:26:15
Post #16





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


  1. $wykonaj=mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 1")or die(mysql_error());
  2. $wiersz = mysql_fetch_array($wykonaj);
  3.  
  4. $wykonaj1=mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 1")or die(mysql_error());
  5. $wiersz1 = mysql_fetch_array($wykonaj1);
  6.  
  7. echo '<a href=glosowaniem.php?pierwszy=1&wyg='.$wiersz['sciezka'].'&prze='.$wiersz1['sciezka'].'><img height="200" width="175" src="'.$wiersz['sciezka'].'"/></a>';
  8. echo '<a href=glosowaniem.php?drugi=1&wyg='.$wiersz['sciezka'].'&prze='.$wiersz1['sciezka'].'><img height="200" width="175" name="przycisk" src="'.$wiersz1['sciezka'].'"/></a>';
  9.  
  10. if(isset($_GET['pierwszy'])) {
  11.  
  12. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='".$_GET['wyg']."'")or die(mysql_error());
  13.  
  14. mysql_query("UPDATE user SET przegrana=przegrana+1 WHERE sciezka='".$_GET['prze']."'")or die(mysql_error());
  15.  
  16. }
  17.  
  18. if(isset($_GET['drugi'])) {
  19.  
  20. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='".$_GET['prze']."'") or die(mysql_error());
  21.  
  22. mysql_query("UPDATE user SET przegrana=przegrana+1 WHERE sciezka='".$_GET['wyg']."'")or die(mysql_error());
  23.  
  24.  
  25. }


zobacz to tylko jest z tym jeden problem po kliknięciu odświeżenia strony zaktualizuje znów ten rekord


Go to the top of the page
+Quote Post
ebate
post 6.11.2011, 14:55:38
Post #17





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 12.10.2011

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


Powiem Ci że.... DZIAŁA!

Wszystko jest ok,tylko, jak wspomniałeś, Po kliknięciu rozdaje odpowiednio po punkcie i losuje inne zdjecia (jak powinno być), zaś przy ręcznym odświeżaniu dodaje punkty poprzednim zdjęciom, które dostało ostatnio punkty i losuje nowe, więc prawie wszystko jest OK!

I dzięki wszystkim za dotychczasowe poświęcenie mi waszego czasu.

Kurcze, nie rozumiem dlaczego tak się dzieje. Przecież przy odświeżaniu zaczyna się nowa sesja, więc nie powinno nic dodawać.
Go to the top of the page
+Quote Post

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: 13.06.2025 - 10:17