Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] sprawdzenie istnienia rekordu
Terrorizer
post
Post #1





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

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


Chcę sprawdzić czy dany użytkownik zagłosował już na dane zdjęcie.
Do zmiennej votecheck pobieram głos(vote) przypisany do konkretnego użytkownika(voter) oraz id zdjęcia(photoid).
Instrukcja IF ma sprawdzać czy votecheck jest pusta tzn. czy wpis z danym głosem istnieje w bazie. Jeśli nie, to go doda.
Jednak gdzieś tutaj zatrzymuje mi się kod.
Próbowałem użyć isset, !$ oraz ==null natomiast nic nie skutkuje.
Vardump nie pokazuje mi nic kompletnie, chyba że wywalę dopisek ['vote'] albo mysqlfetchassoc, wtedy pokazuje mi null ale wtedy też coś jest nie halo bo można głosować bez końca.
Mógłby mi ktoś podpowiedzieć jaki tu jest problem?
Siedzę już chyba z 16 godzin przy tym dzisiaj idę spać i mam nadzieję, że rano mnie oświeci haha.gif
p.s. wiem ,że to jest podatne na injection tongue.gif

  1. $votecheck = mysql_fetch_assoc(mysql_query("SELECT vote FROM votes WHERE photoid = '$photoid' AND voter = '$voter' ")) or die(mysql_error());
  2. if ($votecheck['vote'] == null){
  3. //skrypt dodania głosu do bazy
  4. }


Dla bardziej wnikliwych tutaj jest cały skrypt:

  1. <?php session_start(); ?>
  2. <?php include 'connect.php'; ?>
  3.  
  4. <?php
  5. ini_set('display_errors','1');
  6.  
  7. $photoid = $_GET['id'];
  8. $nick = mysql_fetch_array(mysql_query('SELECT nick FROM users WHERE id = "'.$_SESSION['id'].'"')) or die(mysql_error());
  9. $voter = $nick['nick'];
  10. $votesinfo = mysql_query('SELECT * FROM votes') or die(mysql_error());
  11. $photoinfo = mysql_fetch_array(mysql_query('SELECT * FROM photos WHERE id="'.$photoid.'" ')) or die(mysql_error());
  12. $photoowner = $photoinfo['user'];
  13.  
  14. $votecheck = mysql_fetch_assoc(mysql_query("SELECT vote FROM votes WHERE photoid = '$photoid' AND voter = '$voter' ")) or die(mysql_error());
  15. var_dump($votecheck['vote']);
  16. if ($votecheck['vote'] == null){
  17. mysql_query('UPDATE photos SET likes=likes+1 WHERE id="'.$photoid.'" ');
  18.  
  19. mysql_query("INSERT INTO votes (voter, photoid, photoowner, vote) VALUES ('$voter', '$photoid', '$photoowner', 'yes')") or die(mysql_error());
  20. }
  21.  
  22. ?>


Ten post edytował Terrorizer 14.12.2014, 03:17:05
Go to the top of the page
+Quote Post
fastlone
post
Post #2





Grupa: Zarejestrowani
Postów: 95
Pomógł: 15
Dołączył: 3.06.2010

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


Spróbuj w ten sposób:
zamień
  1. $votecheck = mysql_fetch_assoc(mysql_query("SELECT vote FROM votes WHERE photoid = '$photoid' AND voter = '$voter' ")) or die(mysql_error());
  2. var_dump($votecheck['vote']);
  3. if ($votecheck['vote'] == null){

na
  1. $votecheck = mysql_num_rows(mysql_query("SELECT vote FROM votes WHERE photoid = '$photoid' AND voter = '$voter' ")) or die(mysql_error());
  2. if ($votecheck == 0){


--------------------
Nie bój się kliknąć
Go to the top of the page
+Quote Post
Terrorizer
post
Post #3





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

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


To co mi pokazałeś faktycznie jest rozsądniejsze, jednak vardump nie pokazuje nic, podczas gdy wpis nie istnieje.
Dopiero gdy dodam wpis, pokazuje INT(1)
Zrobiłem warunek który wydaje mi się pewniejszy:
  1. if ($votecheck != 1) {

Jednak gdy tego wpisu nie ma, to ten IF jakby nie przechodzi wcale sad.gif

Ten post edytował Terrorizer 14.12.2014, 09:47:57
Go to the top of the page
+Quote Post
fastlone
post
Post #4





Grupa: Zarejestrowani
Postów: 95
Pomógł: 15
Dołączył: 3.06.2010

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


Cytat(Terrorizer @ 14.12.2014, 09:13:05 ) *
To co mi pokazałeś faktycznie jest rozsądniejsze, jednak vardump nie pokazuje nic, podczas gdy wpis nie istnieje.
Dopiero gdy dodam wpis, pokazuje INT(1)
Zrobiłem warunek który wydaje mi się pewniejszy:
  1. if ($votecheck != 1) {

Jednak gdy tego wpisu nie ma, to ta pętla jakby nie przechodzi wcale sad.gif

Nie dziw się, że vardump Ci nic nie pokazuje, jeśli nie ma czego pokazać.
O której pętli mówisz, że nie przechodzi?
Do tego warunek sprawdzający, czy liczba głosów różni się od jedynki jest trochę niebezpieczny, bo w razie, jeśli zdubluje Ci zapytanie z głosem to dana osoba będzie mogła głosować w nieskończoność.


--------------------
Nie bój się kliknąć
Go to the top of the page
+Quote Post
Terrorizer
post
Post #5





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

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


Często błędnie nazyam instrukcję IF pętlą biggrin.gif
Rzecz w tym, że wciąż ten IF nie chce działać.
Jeśli go skasuję, to instrukcje normalnie się wykonują, więc kod się zatrzymuje na samym IF
Go to the top of the page
+Quote Post
fastlone
post
Post #6





Grupa: Zarejestrowani
Postów: 95
Pomógł: 15
Dołączył: 3.06.2010

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


Może niepotrzebnie pytam, ale najpewniej wcześniej oddałeś głos, więc IF może blokować Ci wykonanie poleceń zawartych w nim, bo masz już ten rekord w bazie danych? smile.gif


--------------------
Nie bój się kliknąć
Go to the top of the page
+Quote Post
Terrorizer
post
Post #7





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

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


Skasowałem wszystkie rekordy i cały czas obserwuję bazę danych.
Ciągle kombinuję, jednak coś mi to nie wychodzi.
Robię coraz dziwniejsze rzeczy haha.gif
  1. $votecheck = mysql_num_rows(mysql_query("SELECT vote FROM votes WHERE photoid = '$photoid' AND voter = '$voter' ")) or die(mysql_error());
  2. var_dump($votecheck);
  3. if ($votecheck !=2){
  4. if ($votecheck !=3){
  5. if ($votecheck !=1){
  6.  
  7. }}}


Teraz mam tak i też nie działa chociaż uważam, że powinno:
  1. $votecheck = mysql_num_rows(mysql_query("SELECT vote FROM votes WHERE photoid = '$photoid' AND voter = '$voter' ")) or die(mysql_error());
  2. var_dump($votecheck);
  3. if (!votecheck){
  4.  
  5.  
  6. }


Ten post edytował Terrorizer 14.12.2014, 10:35:10
Go to the top of the page
+Quote Post
fastlone
post
Post #8





Grupa: Zarejestrowani
Postów: 95
Pomógł: 15
Dołączył: 3.06.2010

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


Nie mam pojęcia w czym jest błąd, spróbuj tak.
  1. <?php
  2. include 'connect.php';
  3.  
  4. ini_set('display_errors','1');
  5.  
  6. $photoid = mysql_real_escape_string($_GET['id']);
  7. $nick = mysql_fetch_array(mysql_query('SELECT nick FROM users WHERE id = "'.$_SESSION['id'].'"')) or die(mysql_error());
  8. $voter = $nick['nick'];
  9. $votesinfo = mysql_query('SELECT * FROM votes') or die(mysql_error());
  10. $photoinfo = mysql_fetch_array(mysql_query("SELECT * FROM photos WHERE id=$photoid ")) or die(mysql_error());
  11. $photoowner = $photoinfo['user'];
  12.  
  13. $votecheck = mysql_num_rows(mysql_query("SELECT * FROM votes WHERE photoid = '$photoid' AND voter = '$voter' ")) or die(mysql_error());
  14. if ($votecheck == 0){
  15. mysql_query('UPDATE photos SET likes=likes+1 WHERE id="'.$photoid.'" ');
  16.  
  17. mysql_query("INSERT INTO votes (voter, photoid, photoowner, vote) VALUES ('$voter', '$photoid', '$photoowner', 'yes')") or die(mysql_error());
  18. }
  19.  
  20. ?>


--------------------
Nie bój się kliknąć
Go to the top of the page
+Quote Post
Terrorizer
post
Post #9





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

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


EDIT:
Nawet to nie działa... WTF?!
  1. $votecheck = "ok";
  2. if ($votecheck == "ok"){
  3. echo "it works";
  4. }


Ten post edytował Terrorizer 14.12.2014, 10:53:15
Go to the top of the page
+Quote Post
fastlone
post
Post #10





Grupa: Zarejestrowani
Postów: 95
Pomógł: 15
Dołączył: 3.06.2010

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


Jeśli nawet ten if Ci nie działa to nie wiem, co począć.


--------------------
Nie bój się kliknąć
Go to the top of the page
+Quote Post
Terrorizer
post
Post #11





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

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


MAM!!!!!!!!!!!!!!!!!!!!!!!
mysql_num_row zwraca false zamiast zera, ja próbowałem sprawdzić warunkiem czy zmienna równa się false i nie wychodziło, bo OR DIE zatrzymywał działanie skryptu smile.gif
20 godzin walki, a jaka radość biggrin.gif otwieram szampana haha


Ten post edytował Terrorizer 14.12.2014, 11:20:56
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 Aktualny czas: 20.08.2025 - 11:52