Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] sprawdzenie istnienia rekordu
Forum PHP.pl > Forum > Przedszkole
Terrorizer
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. ?>
fastlone
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){
Terrorizer
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
fastlone
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ść.
Terrorizer
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
fastlone
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
Terrorizer
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. }
fastlone
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. ?>
Terrorizer
EDIT:
Nawet to nie działa... WTF?!
  1. $votecheck = "ok";
  2. if ($votecheck == "ok"){
  3. echo "it works";
  4. }
fastlone
Jeśli nawet ten if Ci nie działa to nie wiem, co począć.
Terrorizer
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
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.