Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Kliknięcie powodujące dodanie punktu w bazie, zmiana danych z bazie
Forum PHP.pl > Forum > Przedszkole
ebate
Mam kod, który wyświetla mi 2 losowe dane z bazy MySQL obok siebie. Tymi danymi są zdjęcia. Zdjęcie te to hiperłącze, więc po kliknięciu na któreś ze zdjęć przechodzi mi na tą samą stronę(odświeża ją) i automatycznie losuje mi inne dane.
Chcę, aby po kliknięciu na pierwsze zdjęcie dodawał się punkt do ogólnej liczby punktów w bazie danych, jednocześnie dodając punkt drugiemu zdjęciu, które nie zostało kliknięte. Oto przykład:
Mam 2 użytkowników zapisanych w bazie danych (id,login,hasło,zdjecie[sciezka do niego],....).Oprócz tych wszystkich pól mam 2 dodatkowe pola: click i noclick.
Klikam na pierwsze zdjęcie. Po tym do zmiennej $click(zmienna ta ma już swoja wartość np. 55) dodaje się 1 punkt (zdjęcie pierwsze użytkownika pierwszego po dodaniu ma przy zmiennej $click 56). Równocześnie dodaje się 1 punkt do zmiennej $noclick(zdjęcie drugie)-analogicznie jak przy zmiennej $click.Zaraz po dodaniu tych punktów losują sie 2 nowe zdjecia(hiperłącze).
Wie ktoś jak to zrobić? Jeśli to za dużo, to może jakieś wskazówki.
Nigdy nie edytowałem danych z bazy MySQL z poziomu PHP. Na pewno kod musi wyciągnąć aktualną wartość pola np. click, dodać punkt i zapisać zmiany.
Myślałem jeszcze nad if'ami, ale nie wiem jak to zrobić.
IF(użytkownik kliknie pierwsze zdjęcie)
{$click+1 zdjecia pierwszego;
$noclick+1 zdjecia drugiego;}
else
{$noclick+1 zdjecia pierwszego;
$click+1 zdjecia drugiego;}

No cos takiego wymyśliłem ,ale nie wiem jak to wyrazić poprawnie w jezyku php.

A oto wcześniej wspomniany kod, który losuje mi te dane:
  1. require('conn.php');
  2.  
  3.  
  4.  
  5. $wykonaj = mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 2");
  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. }
nospor
zwiekszenie o 1 dowolnego pola w tabeli:
  1. UPDATE tabela SET pole=pole+1 WHERE ID=twojeid

Nie musisz nic pobierac, zwieksza o 1 i spowrotem zapisywać. Wszystko w jednym zapytaniu
ebate
Na razie wyszedł mi kiepski kod:

  1. require('conn.php');
  2.  
  3. $wykonaj = mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 2");
  4.  
  5. while($wiersz = mysql_fetch_array($wykonaj))
  6.  
  7. {
  8.  
  9. echo '<a href=glosowaniem.php><img height="200" width="175" src="'.$wiersz['sciezka'].'"/></a>';
  10.  
  11. }
  12.  
  13. if(...)
  14.  
  15. {
  16.  
  17. mysql_query("UPDATE user SET click=click+1 WHERE sciezka='.$wiersz['sciezka'].'");
  18.  
  19. mysql_query("UPDATE user SET noclick=noclick+1 WHERE sciezka='.$wiersz['sciezka'].'");
  20.  
  21. }
  22.  
  23. else
  24.  
  25. {
  26.  
  27. mysql_query("UPDATE user SET noclick=noclick+1 WHERE sciezka='.$wiersz['sciezka'].'");
  28.  
  29. mysql_query("UPDATE user SET click=click+1 WHERE sciezka='.$wiersz['sciezka'].'");
  30.  
  31. }


I tak:
*Dalej nie wiem co w if'ie wpisać. Słownie to brzmi: jeżeli(użytkownik kliknie nie pierwsze zdjecie)
*mysql_querty w pierwszym {} zapisze (chyba) przy obydwu wylosowanych zdjęciach do dwóch pól po 1., Jeżeli zaś bedzie else to zrobi to samo.Wiec i pierwszy i drugi użytkownik będzie miał o punkt wiecej w dwóch tych polach.

Myślałem żeby zrobić 2 kody, które by losowały po 1 danym, Czyli:
Pierwsze:
  1. $wykonaj = mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 1");
  2.  
  3. while($wiersz = mysql_fetch_array($wykonaj))
  4.  
  5. {
  6.  
  7. echo '<a href=glosowaniem.php><img height="200" width="175" src="'.$wiersz['sciezka'].'"/></a>';
  8.  
  9. }

Drugie:
  1. $wykonaj1 = mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 1");
  2.  
  3. while($wiersz1 = mysql_fetch_array($wykonaj1))
  4.  
  5. {
  6.  
  7. echo '<a href=glosowaniem.php><img height="200" width="175" src="'.$wiersz1['sciezka'].'"/></a>';
  8.  
  9. }


czy nie byłoby łatwiej tego zrobić? Oczywiscie musiałbym zrobić, że jeżeli $wiersz=$wiersz1, to od razu nowe losowanie.


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

Już mam prawie wszystko napisane, tylko w dalszym ciągu nie mam pojęcia, co wpisać w "if(...)".Tak jak mówiłem, w wolnym tłumaczeniu "if(użytkownik kliknie na pierwsze zdjęcie $wiersz['sciezka'])". Nie wie ktoś, jak to ująć w języku PHP?

Oto mój kod:
  1. require('conn.php');
  2.  
  3.  
  4.  
  5. $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. $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" src="'.$wiersz1['sciezka'].'"/></a>';
  24.  
  25. }
  26.  
  27. if(...)
  28.  
  29. {
  30.  
  31. mysql_query("UPDATE user SET click=click+1 WHERE sciezka='.$wiersz['sciezka'].'");
  32.  
  33. mysql_query("UPDATE user SET noclick=noclick+1 WHERE sciezka='.$wiersz1['sciezka'].'");
  34.  
  35. }
  36.  
  37. else
  38.  
  39. {
  40.  
  41. mysql_query("UPDATE user SET noclick=noclick+1 WHERE sciezka='.$wiersz['sciezka'].'");
  42.  
  43. mysql_query("UPDATE user SET click=click+1 WHERE sciezka='.$wiersz1['sciezka'].'");
  44.  
  45. }


Proszę, nie ma nikt pomysłu? Choćby cienia pomysłu?
nospor
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 click a drugiem noclick
ebate
No nie będę ukrywał, że nic nie wiem o sesjach. Nie wiem, w który miejscu wstawić początek sesji session_start(); i jak zrobić, żeby w sesji kliknięcie na zdjęcie dodawało punkt. Oto aktualny kod

  1. require('conn.php');
  2.  
  3.  
  4.  
  5. $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. $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(isset($_POST['przycisk']))
  28.  
  29. {
  30.  
  31. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='.$wiersz['sciezka'].'");
  32.  
  33. mysql_query("UPDATE user SET przegrana=przegrana+1 WHERE sciezka='.$wiersz1['sciezka'].'");
  34.  
  35. }
  36.  
  37. else
  38.  
  39. {
  40.  
  41. mysql_query("UPDATE user SET przegrana=przegrana+1 WHERE sciezka='.$wiersz['sciezka'].'");
  42.  
  43. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='.$wiersz1['sciezka'].'");


Coś sobie wydedukowałem w głowie, poprawcie jezeli zle myśle.

Sesja to czas przebywania użytkownika na stronie, z poziomu php możemy sami określić jakie cześci kodu mogą tworzyć sesje. Zgodnie z tą myślą: jedna sesja to wylosowanie jednego zdjęcia wraz z kliknięciem w hiperłącze, druga sesja to wylosowanie drugiego zdjęcia z kliknięciem w hiperłącze. Mając to mogę zrobic if(sesja peirwsza sie zacznie i zakonczy){ dodaje punkt klick i no clik}else{odwrotnie dodanie punktów}
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.