Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pobieranie wartości z bazy jeśli jest równe 0 i 1.
Forum PHP.pl > Forum > Przedszkole
Kerth
  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?
PawelC
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. }
Kerth
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.
PawelC
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. }
Kerth
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.
PawelC
  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. }
MatKus
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.
memory
rowCount() nie działa na mysql użyj fetchColumn();
Kerth
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?
nospor
U ciebie nie $this->db a samo $db. NIe wiem czemu expoloit uparl sie na tego $this...
Kerth
Rzeczywiście, bez $this nie ma błędu lecz cały czas pobiera i wyświetla NIE. Nawet jak jest 1.
Turson
  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. }
nospor
$data = $zadanie1->fetch();
var_dump($data);

I pokaz co zwraca

ps: sprawdzales w ogole czy zmienna $nick jest ustawiona poprawnie?
var_dump($nick);
Michael2318
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){
Kerth
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)
Michael2318
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.
Kerth
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);
nospor
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
nospor
@memory, staraj sie czytac dokladnie.... zmienna $nick jest pusta
Kerth
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" }
nospor
No i brawo, wkoncu....
No to juz rekord jest zwracany poprawnie i widac, ze wartosc jest 0
Kerth
No działa. Tylko mam kilka pytań jeszcze odnośnie tego co zdołało mi się "wypocić".
Czy pobieranie nicku z sesji jest poprawnym rozwiązaniem?

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


Nie jestem na tyle dobry w PHP, żeby to zrozumieć. Możesz mi łopatologicznie wytłumaczyć co to znaczy:

  1. array(2) { ["zadanie1"]=> string(1) "1" [0]=> string(1) "1" }


nospor
No jesli nick jest w sesji, to tak, masz go pobrac z sesji...

array(2) { ["zadanie1"]=> string(1) "1" [0]=> string(1) "1" }
Jest to wynik dzialania funkcji VAR_DUMP - polecam zajrzec do manuala
Kerth
Cytat(nospor @ 2.07.2014, 15:25:24 ) *
No jesli nick jest w sesji, to tak, masz go pobrac z sesji...

array(2) { ["zadanie1"]=> string(1) "1" [0]=> string(1) "1" }
Jest to wynik dzialania funkcji VAR_DUMP - polecam zajrzec do manuala


Tak wiem, wszyscy mi mówią o manualu i chyba zaraz do niego zajrzę smile.gif

Zmienną $nick wykorzystuję przy rejestracji zanim jeszcze nie jest w sesji(no logiczne- masło maślane). Teraz to rozumiem.

Dzięki wszystkim za pomoc i za wytrwałość smile.gif
johny_s
a co ma sesja do posta? nick trzymasz w w sesji a pobierasz z posta?
nospor
facepalmxd.gif
@johny, tak trudno sie domyslic, ze przy rejestracji nick byl w post, bo szedl formularz, potem zapisal go z posta do sesji, a potem na innych stronach pobiera z sesji?
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.