Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]Pobieranie wartości z bazy jeśli jest równe 0 i 1.
Kerth
post 1.07.2014, 22:30:32
Post #1





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


  1. $zadanie1 = $db->query("SELECT `zadanie1` FROM `zadania` WHERE `Nick` = '$nick'");
  2. if($zadanie1->rowCount() == 0) {
  3. echo '<div class="lightgreen">Nie masz wykonanego zadania 1.</div>';
  4. return $zadanie1;
  5. }else if($zadanie1->rowCount() == 1) {
  6. echo '<div class="lightgreen">Masz wykonane zadani 1</div>';
  7. return $zadanie1;
  8. }

Dlaczego nawet gdy jest w rekordzie ustawione 1 to pojawia się: Nie masz wykonanego zadania 1.? Ma ktoś jakieś pomysły?

Ten post edytował Kerth 1.07.2014, 22:31:02
Go to the top of the page
+Quote Post
PawelC
post 1.07.2014, 22:47:12
Post #2





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


a gdzie masz execute??

Do wglądu smile.gif
  1. $result=$this->db->prepare("select * from users where login=:user and pass=:pass");
  2. $result->bindParam(':user', $user, PDO::PARAM_STR);
  3. $result->bindParam(':pass', $pass, PDO::PARAM_STR);
  4.  
  5. if(!$result->execute()){
  6. throw new Exception("Wystąpił błąd podczas logowania.");
  7. }else{
  8. if($result->rowCount() == 1)
  9. {
  10. header('Location: index.php'); //Przekierowanie po poprawnym zalogowaniu
  11. }else{
  12. throw new Exception("Podany login lub hasło, jest błędne. Proszę spróbować ponownie.");
  13. }
  14. }
Go to the top of the page
+Quote Post
Kerth
post 1.07.2014, 22:53:47
Post #3





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Ale o to chodzi, że ten kod nie działa ani na mysql ani na pdo. Możesz poradzić mi jak zrobić coś takiego, że jeśli zostanie z pola pobrane 0 to wyświetli Zadanie1: NIE. Jeśli pobierze 1 to: Zadanie1 : TAK.
Go to the top of the page
+Quote Post
PawelC
post 1.07.2014, 23:07:36
Post #4





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


Pisane w locie bez sprawdzania, ale powinno działać smile.gif
  1. $result = $this->db->prepare("select zadanie from zadania where Nick=:nick");
  2. $result->bindParam(":nick", $nick, PDO::PARAM_STR);
  3.  
  4. if(!$result->execute()){
  5. throw new Exception("Błąd zapytania");
  6. }else{
  7. $data = $result->fetch();
  8. $zadanie = $data['zadanie'];
  9. if($zadanie == 0){
  10. echo "Zadanie1: Nie";
  11. }else{
  12. echo "Zadanie1: Tak";
  13. }
  14. }
Go to the top of the page
+Quote Post
Kerth
post 1.07.2014, 23:16:48
Post #5





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Edytowałem trochę zmienne, bo mi nie pasowały do pliku i były błędy. Lecz z tym kodem:

  1. $zadanie1 = $db->prepare("select zadanie1 from zadania where Nick=:nick");
  2. $zadanie1->bindParam(":nick", $nick, PDO::PARAM_STR);
  3.  
  4. if(!$zadanie1->execute()){
  5. throw new Exception("Błąd zapytania");
  6. }else{
  7. $pobierz_zad1 = $zadanie1->fetch();
  8. $zadanie = $pobierz_zad1['zadanie1'];
  9. if($zadanie == 0){
  10. echo '<span class = "tab"><span class="red">NIE</span></span>';
  11. }else{
  12. echo '<span class = "tab"><span class="lightgreen">TAK</span></span>';
  13. }
  14. }


Pojawia się cały czas NIE.

Ten post edytował Kerth 1.07.2014, 23:17:18
Go to the top of the page
+Quote Post
PawelC
post 1.07.2014, 23:29:31
Post #6





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


  1. $zadanie1 = $this->db->prepare("select `zadanie1` from `zadania` where `Nick`=:nick");
  2. $zadanie1->bindParam(":nick", $nick, PDO::PARAM_STR);
  3.  
  4. if(!$zadanie1->execute()){
  5. throw new Exception("Błąd zapytania");
  6. }else{
  7. $data = $zadanie1->fetch();
  8. $wynik = $data['zadanie1'];
  9.  
  10. if($wynik == 0){
  11. echo '<span class = "tab"><span class="red">NIE</span></span>';
  12. }else{
  13. echo '<span class = "tab"><span class="lightgreen">TAK</span></span>';
  14. }
  15. }


Ten post edytował ExPlOiT 2.07.2014, 00:27:24
Go to the top of the page
+Quote Post
MatKus
post 2.07.2014, 07:26:27
Post #7





Grupa: Zarejestrowani
Postów: 63
Pomógł: 3
Dołączył: 27.08.2008

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


A ja bym zaczął od przeanalizowania zawartości bazy danych i wartości zmiennej $nick, bo skoro wchodzi do warunku
if($zadanie1->rowCount() == 0) {
to znaczy, że z bazy nic nie wyciągnął, więc albo wartośc zmiennej $nick jest nieodpowiednia, albo w bazie nie ma odpowiedniego wpisu.
Go to the top of the page
+Quote Post
memory
post 2.07.2014, 08:12:54
Post #8





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

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


rowCount() nie działa na mysql użyj fetchColumn();
Go to the top of the page
+Quote Post
Kerth
post 2.07.2014, 08:58:33
Post #9





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Cytat(ExPlOiT @ 2.07.2014, 00:29:31 ) *
  1. $zadanie1 = $this->db->prepare("select `zadanie1` from `zadania` where `Nick`=:nick");
  2. $zadanie1->bindParam(":nick", $nick, PDO::PARAM_STR);
  3.  
  4. if(!$zadanie1->execute()){
  5. throw new Exception("Błąd zapytania");
  6. }else{
  7. $data = $zadanie1->fetch();
  8. $wynik = $data['zadanie1'];
  9.  
  10. if($wynik == 0){
  11. echo '<span class = "tab"><span class="red">NIE</span></span>';
  12. }else{
  13. echo '<span class = "tab"><span class="lightgreen">TAK</span></span>';
  14. }
  15. }


Ta linijka:
  1. $zadanie1 = $this->db->prepare("select `zadanie1` from `zadania` where `Nick`=:nick");

powoduje błąd:

  1. Fatal error: Using $this when not in object context in C:\WebServ\httpd\strona4\zadania.php on line 41


Co to jest to this?
Go to the top of the page
+Quote Post
nospor
post 2.07.2014, 09:02:34
Post #10





Grupa: Moderatorzy
Postów: 36 442
Pomógł: 6290
Dołączył: 27.12.2004




U ciebie nie $this->db a samo $db. NIe wiem czemu expoloit uparl sie na tego $this...


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kerth
post 2.07.2014, 13:24:21
Post #11





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Rzeczywiście, bez $this nie ma błędu lecz cały czas pobiera i wyświetla NIE. Nawet jak jest 1.
Go to the top of the page
+Quote Post
Turson
post 2.07.2014, 13:27:13
Post #12





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


  1. $zadanie1 = $db->prepare("select `zadanie1` from `zadania` where `Nick`=:nick");
  2. $zadanie1->bindParam(":nick", $nick, PDO::PARAM_STR);
  3.  
  4. if(!$zadanie1->execute()){
  5. print_r($zadanie1->errorInfo());
  6. }
  7. else{
  8. $data = $zadanie1->fetch();
  9. var_dump($data);
  10. }


Ten post edytował Turson 2.07.2014, 13:27:48
Go to the top of the page
+Quote Post
nospor
post 2.07.2014, 13:29:03
Post #13





Grupa: Moderatorzy
Postów: 36 442
Pomógł: 6290
Dołączył: 27.12.2004




$data = $zadanie1->fetch();
var_dump($data);

I pokaz co zwraca

ps: sprawdzales w ogole czy zmienna $nick jest ustawiona poprawnie?
var_dump($nick);


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Michael2318
post 2.07.2014, 13:29:53
Post #14





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Ale czekaj, co Ty chcesz osiągnąć bo już się pogubiłem. Chcesz zliczyć czy ogółem ilość rekordów jest równa 0 czy chcesz sprawdzić czy pole zadanie1 wyciągane z bazy zawiera liczbę 0 ?

  1. if($wynik == 0){


zapisz to tak dla pewności:

  1. if(intval($wynik) == 0){
Go to the top of the page
+Quote Post
Kerth
post 2.07.2014, 13:42:26
Post #15





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Może jakoś źle się wypowiedziałem.Tak wygląda rekord z tabeli z zadaniami:
http://iv.pl/images/60061820085198445963.png
Jest tam kolumna Zadanie1 i wniej wartość 0. Typ pola to TINYINT(1). I chcę teraz, że jeśli z tego pola zostanie pobrane 0 to gracz nie wykonał zadania, jeśli pobierze się 0 to gracz wykonał zadanie.

Tak zwraca to co kazaliście:

http://iv.pl/images/96105924160075573419.png

false - czyli 0
string (0) "" - czyli nick(nie wiem czemu)
Go to the top of the page
+Quote Post
Michael2318
post 2.07.2014, 13:44:25
Post #16





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Cytat
string (0) "" - czyli nick(nie wiem czemu)


A wiesz co to oznacza...? Że Twoje zapytanie wygląda tak:

  1. SELECT `zadanie1` FROM `zadania` WHERE `Nick` = '';


innymi słowy pobierasz pole zadanie1, gdzie nick jest równy NICZEMU.
My Ci nie powiemy czemu ta zmienna nic nie zwraca, sam musisz znaleźć błąd w swojej aplikacji.
Go to the top of the page
+Quote Post
Kerth
post 2.07.2014, 13:54:52
Post #17





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Nie rozumiem. Wszędzie tak samo pobieram nick i jest w porządku.

Sama zmienna wygląda tak:
  1. $nick = isset($_POST['nick']) ? htmlentities($_POST['nick']) : "";


zapytanie:
  1. $zadanie1 = $db->prepare("SELECT `zadanie1` FROM `zadania` WHERE `nick`= :nick");
  2. $zadanie1->bindParam(":nick", $nick, PDO::PARAM_STR);


Ten post edytował Kerth 2.07.2014, 13:55:09
Go to the top of the page
+Quote Post
nospor
post 2.07.2014, 14:00:39
Post #18





Grupa: Moderatorzy
Postów: 36 442
Pomógł: 6290
Dołączył: 27.12.2004




Widac w $_POST nie ma nicka,
albo zmienną $nick inicjalizujesz w funkcji i poza funkcją nie jest dostepna
albo na odwrot
albo cala masa innych rzeczy....

Masz tu ciekawy link
Temat: Jak poprawnie zada pytanie
zapoznaj sie z nim i zastosuj, bo rzeby tyle czasu z taką pierdułką walczyc to lekka przesada


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
nospor
post 2.07.2014, 14:11:50
Post #19





Grupa: Moderatorzy
Postów: 36 442
Pomógł: 6290
Dołączył: 27.12.2004




@memory, staraj sie czytac dokladnie.... zmienna $nick jest pusta


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kerth
post 2.07.2014, 14:14:53
Post #20





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Cytat(nospor @ 2.07.2014, 15:00:39 ) *
Widac w $_POST nie ma nicka,
albo zmienną $nick inicjalizujesz w funkcji i poza funkcją nie jest dostepna
albo na odwrot
albo cala masa innych rzeczy....

Masz tu ciekawy link
Temat: Jak poprawnie zada pytanie
zapoznaj sie z nim i zastosuj, bo rzeby tyle czasu z taką pierdułką walczyc to lekka przesada


w sesji przesłanej postem jest trzymany nick:
  1. var_dump($_SESSION['nick'])

ustawiłem tak i zwróciło mi:
Cytat
string(5) "Kerth"


Natomiast gdy w bindParam ustawię:

  1. $zadanie1->bindParam(":nick", $_SESSION['nick'], PDO::PARAM_STR);


zwraca mi jakieś:
Cytat
array(2) { ["zadanie1"]=> string(1) "0" [0]=> string(1) "0" }
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 18.04.2024 - 07:43