Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Sprawdzanie zawartości/treści komórki z bazy danych
Forum PHP.pl > Forum > Przedszkole
artkow00
Witam wszystkich.

W trakcie próby budowy serwisu pojawiają się przede mną kolejne przeszkody i problemy. Oto kolejny z nich:

Mam Tabelę:

Tabela "a"

id | b |
----------------
1 | 1 |
2 | 1 |
3 | 0 |
4 | 1 |

Chcę stworzyć zapytanie do bazy, które będzie mi sprawdzało, czy w polu b tabeli a jest 1 czy 0. Oto co wydziergałem własnoręcznie:

  1. $check = mysql_query("SELECT `b` FROM `a` WHERE id = '1'");
  2. $check1 = mysql_fetch_row($check);
  3. if($check1['1']=0)
  4. {...}
  5. else {...}


Spodziewam się sporej krytyki, ale bardzo proszę kogokolwiek o merytoryczną dyskusję na ten temat.. Nie bez powodu temat jest w "przedszkolu" smile.gif

Pozdrawiam.

nospor
Do porownywania w php uzywa sie == a nie =
A na przyszlosc:
Temat: Jak poprawnie zada pytanie

No i czemu $check1['1'] ? Przeciez pobierasz B wiec ma byc B....
$check1['b']
artkow00
No niby ok, dziękuję za naświetlenie sprawy, ale to nie rozwiązuje mojego problemu. Ponieważ skrypt dotyczy logowania w oparciu o sprawdzenie aktywności konta to poniżej przedstawiam całość skryptu. Korzystałem z podanego przez Ciebie poradnika, wszystkie zmienne zwracają odpowiednie wyniki tzn. np $check daje int(1) itd.
Tymczasem loguje użytkowników zarówno z 1 w polu 'active' jak i z 0 w tym polu.

  1. if(isset($_POST['login'])) {
  2. $_POST['login'] = clear($_POST['login']);
  3. $_POST['password'] = clear($_POST['password']);
  4. $_POST['password'] = codepass($_POST['password']);
  5. $result = mysql_query("SELECT `id` FROM `user_ustawienia` WHERE `mail` = '{$_POST['login']}' AND `pass` = '{$_POST['password']}' LIMIT 1");
  6.  
  7. if(mysql_num_rows($result) > 0) {
  8. $row = mysql_fetch_assoc($result);
  9. $check = mysql_query("SELECT `active` FROM `active` WHERE `id` = '".$row['id']."'");
  10. $check1 = mysql_fetch_row($check);
  11. if($check1['active'] ==0) {
  12. $_SESSION['logged'] = true;
  13. $_SESSION['id'] = $row['id'];
  14. mysql_query ("UPDATE `user_ustawienia` SET `logtime` = NOW() WHERE `mail` = '{$_POST['login']}'");
  15. }else {
  16. echo 'Twoje konto nie zostało aktywowane. Odbierz e-mail z linkiem aktywacyjnym, aby móc się zalogować.';
  17. }
  18. } else
  19. {
  20. echo 'podałeś błędne dane logowania';
  21. }
  22. }


Przepraszam za wątpliwą przejrzystość mojego kodu.. smile.gif

nospor
if($check1['active'] ==0) {
Z tego kodu wynika, ze logujesz usera jak ma ACTIVE = 0.... Nie powinno byc 1?
artkow00
Cytat(nospor @ 8.11.2013, 13:35:56 ) *
if($check1['active'] ==0) {
Z tego kodu wynika, ze logujesz usera jak ma ACTIVE = 0.... Nie powinno byc 1?


Ta zauważyłem, ale mniemam, że to jest nieistotne dla tematu bo nie zmienia faktu, że skrypt loguje mi wszystkich bez względu na wartość `active`...
nospor
Jesli to:
$check = mysql_query("SELECT `active` FROM `active` WHERE `id` = '".$row['id']."'");
zwraca blad lub brak rekordu to porownujac to do 0 wlasnie zawsze bedzie ci logowac.

Sprawdziles czy to zapytanie zwrca ci cos? Nie widzie w kodzie zadnego sprawdzania, wiec podejrzewam ze nie.
artkow00
Cytat(nospor @ 8.11.2013, 13:53:47 ) *
Jesli to:
$check = mysql_query("SELECT `active` FROM `active` WHERE `id` = '".$row['id']."'");
zwraca blad lub brak rekordu to porownujac to do 0 wlasnie zawsze bedzie ci logowac.

Sprawdziles czy to zapytanie zwrca ci cos? Nie widzie w kodzie zadnego sprawdzania, wiec podejrzewam ze nie.


Sprawdzałem - zwraca. Nie ma sprawdzania w kodzie bo po sprawdzeniu usunąłem i doddałem suchy kod.
Znalazłem rozwiązanie - okazało się być banalne:

Zamiast:
  1. $check1 = mysql_fetch_row($check);

Potrzebowało:
  1. $check1 = mysql_fetch_assoc($check);


...

Dzięki za zainteresowanie postem smile.gif
Miłego dnia
nospor
facepalmxd.gif
Jak mozesz pisac ze zwraca, a za chwile piszesz ze potrzebna byla inna funkcja. No tak, byla potrzebna inna funkcja, bo Twoja co miales, ci nie zwracala. I miales to sprawdzic, ale nie sprawdziles. Bo jak bys sprawdzil, to bys zobaczyl, ze jednak nie zwraca...... Ale nie, ty nadal twardo piszesz ze zwraca :/ Brak slow.

Miales tak:
$check1 = mysql_fetch_row($check);
if($check1['active'] ==0) {

A sprawdzenie polaga na czym takim
$check1 = mysql_fetch_row($check);
var_dump($check1['active']);
if($check1['active'] ==0) {

I od razu widac ze nie zwraca.....
artkow00
Napisałeś wcześniej (cytuję):

"Jesli to:
$check = mysql_query("SELECT `active` FROM `active` WHERE `id` = '".$row['id']."'");
zwraca blad lub brak rekordu to porownujac to do 0 wlasnie zawsze bedzie ci logowac.

Sprawdziles czy to zapytanie zwrca ci cos? Nie widzie w kodzie zadnego sprawdzania, wiec podejrzewam ze nie."

Sprawdziłem zmienną $check czy coś zwraca zgodnie z Twoją sugestią i ZWRACA bo JEST 1 taki rekord.
Za chwilę twierdzisz, że nie sprawdziłem zmiennej, zupełnie innej niż ta, o której wcześniej rozmawialiśmy! I jeszcze narzekasz, że to ja czegoś nie rozumiem. Cholera zdecyduj się, o której zmiennej chcesz rozmawiać i odnośnie której dajesz rady, a dopiero się awanturuj.
Nie sprawdzałem
var_dump($check1['active']);
i gdybyś się o to zapytał to bym Ci powiedział, że nie sprawdziłem. Ale Ty zapytałeś czy sprawdziłem zapytanie
$check = mysql_query("SELECT `active` FROM `active` WHERE `id` = '".$row['id']."'");

Więc nie rób ze mnie idioty, tylko przyznaj, że nie zauważyłeś błędu w moim skrypcie, czego broń boże nie mam Ci za złe - każdemu się zdarzy.

Mimo wszystko dziękuję za pomoc, trochę mnie nakierowałeś.

Pozdrawiam.
nospor
Dostales ode mnie linka do tematu, ktory mowi co i jak sprawdzac. Nie bede za kazdym razem ci pisal, ze masz sprawdzic to czy to. Jak sie pytam, czy sprawdziles zapytanie i wynik to mam to wlasnie na mysli. A wszystko w zgodzie z tematem do ktorego cie odeslalem.

Nawet jesli nie zrobiles sprawdzenia $check['active'], tylko zrobiles sprawdzenie samego $check to wowczas tez by bylo widac, ze owszem zwraca rekord, ale z innym indeksem niz ty sie do niego odwolujesz. Naprawde wszystko ale to wszystko trzeba podawac na tacy? Samemu juz nie mozna chwile pomyslec? Nie mozna napisac poprostu: sprawdz? Trzeba podawac: sprawdz to, sprawdz to i jeszcze sprawdz to....

W temacie miales tez info by wyswietlac wszystkie bledy. Ale tego nie zrobiles. Jakbys zrobil, to na ekranie bys mial wlasnie bledy, ktore od razu by wskazaly gdzie jest zle. Po to powstal ten temat, by nie trzeba bylo wszystkiego powtarzac za kazdym razem, ale i tak znajda sie tacy jak ty, ktorym trzeba wszystko palcem wskazac, bo samym sie nie chce doczytac prostych rzeczy, ktore mają czarno na bialym napisane
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.