Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Sprawdzanie zawartości/treści komórki z bazy danych
artkow00
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

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


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" (IMG:style_emoticons/default/smile.gif)

Pozdrawiam.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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']
Go to the top of the page
+Quote Post
artkow00
post
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

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


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.. (IMG:style_emoticons/default/smile.gif)



Ten post edytował artkow00 8.11.2013, 13:31:52
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




if($check1['active'] ==0) {
Z tego kodu wynika, ze logujesz usera jak ma ACTIVE = 0.... Nie powinno byc 1?
Go to the top of the page
+Quote Post
artkow00
post
Post #5





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

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


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`...
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
artkow00
post
Post #7





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

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


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 (IMG:style_emoticons/default/smile.gif)
Miłego dnia
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




(IMG:style_emoticons/default/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.....
Go to the top of the page
+Quote Post
artkow00
post
Post #9





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 5.11.2013

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 16:46