Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z instrukcjami warunkowymi po poleceniu SELECT
tomasz23
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 27.12.2012

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


Witam, od dłuższego problem mam z instrukcjami warunkowymi po poleceniu SELECT. Chcę by po sprawdzeniu czy w danej tabeli jest jakiś rekord tworzył się jakieś akcje (w przykładzie na razie tylko echo)

  1. <?php
  2. require_once('polaczenie.php');
  3. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die ('Blad polaczenia z baza danych');
  4. $termin = '01.06.13-08.06.13';
  5.  
  6.  
  7. $zapytanie = 'SELECT * FROM domek2 WHERE tydzien = \''.$termin.'\'';
  8. $result = mysql_query($zapytanie);
  9.  
  10. if(mysql_num_rows($result) == 1)
  11. {
  12. echo 'taki rekord juz jest';
  13. }
  14.  
  15. else {
  16. echo 'nima';
  17. }
  18. ?>


Moim zdaniem powinno działać, ale nie działa więc piszę tutaj (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
muniekw
post
Post #2





Grupa: Zarejestrowani
Postów: 243
Pomógł: 22
Dołączył: 1.06.2009
Skąd: Warszawa

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


A co chcesz osiągnąć?
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #3





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


  1. if(mysql_num_rows($result) >= 1)
Go to the top of the page
+Quote Post
tomasz23
post
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 27.12.2012

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



@muniekw
Chcę by pojawiła się informacja 'taki rekord juz jest' gdy faktycznie jest rekord z terminem '01.06.13-08.06.13' w tabeli jeżeli nie ma to ma się pojawić o tym informacja.

@mmmmmmm
poprawiłem i nadal wyświetla 'nima', mimo że taka tabela jest w bazie i to z takim terminem jakiego szukam.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #5





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Nie wiem, czy to nie przeszkoda, ale raz korzystasz z mysql_, a raz z mysqli_
Go to the top of the page
+Quote Post
rossecki
post
Post #6





Grupa: Zarejestrowani
Postów: 39
Pomógł: 3
Dołączył: 3.12.2011

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


Poczytaj w jaki sposób baza danych zwraca datę.
Spróbuj zwrócić cokolwiek w wypisaniu i zobacz format...
mysqli zamień na mysql (chyba że korzystasz z rozszerzonej bazy) (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
muniekw
post
Post #7





Grupa: Zarejestrowani
Postów: 243
Pomógł: 22
Dołączył: 1.06.2009
Skąd: Warszawa

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


Cytat(tomasz23 @ 27.12.2012, 21:19:47 ) *
@muniekw
Chcę by pojawiła się informacja 'taki rekord juz jest' gdy faktycznie jest rekord z terminem '01.06.13-08.06.13' w tabeli jeżeli nie ma to ma się pojawić o tym informacja.


Jeśli sprawdzasz czy dany rekord istnieje to musisz zmienić warunek if bo na razie w tym ifie sprawdzasz czy to co zwróciło Ci zapytanie jest równe 1, więc za każdym razem będzie wykonany else.
Go to the top of the page
+Quote Post
kalafior122
post
Post #8





Grupa: Zarejestrowani
Postów: 65
Pomógł: 1
Dołączył: 19.03.2012
Skąd: Września

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


  1. <?php
  2. require_once('polaczenie.php');
  3. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die ('Blad polaczenia z baza danych');
  4. $termin = '01.06.13-08.06.13';
  5.  
  6. $result = mysql_query("SELECT * FROM domek2 WHERE tydzien = '$termin'");
  7.  
  8. if($result)
  9. {
  10. echo 'taki rekord juz jest';
  11. }
  12.  
  13. else {
  14. echo 'nima';
  15. }
  16. ?>


pokaż jeszcze strukture mysql (IMG:style_emoticons/default/smile.gif)

Ten post edytował kalafior122 29.12.2012, 18:08:30
Go to the top of the page
+Quote Post
jasin
post
Post #9





Grupa: Zarejestrowani
Postów: 142
Pomógł: 32
Dołączył: 21.08.2008
Skąd: Toruń

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


Pytanie: jakie wartości przechowuje pole tydzień
Nie lepiej w select dać count(*) i spr czy > 0?
Go to the top of the page
+Quote Post
tomasz23
post
Post #10





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 27.12.2012

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


@mmmmmmm akurat w tym przykładzie nie ma różnicy czy korzystam z mysql czy mysqli.

@rossecki pole tydzień jest typu varchar a nie date

@kalafior122 tabela ma pole id (int, pk, autoinkrementacja), imię, nazwisko, data (wszystko varchar)

@jasin tydzień - varchar. Poszedłem za Twoją radą i poprawiłem na :

  1. <?php
  2. require_once('polaczenie.php');
  3. $dbc = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die ('Blad polaczenia z baza danych');
  4. $termin = '01.06.13-08.06.13';
  5.  
  6.  
  7. $zapytanie = 'SELECT COUNT * FROM domek2 WHERE tydzien = \''.$termin.'\'';
  8.  
  9.  
  10. if($zapytanie > 0)
  11. {
  12. echo 'taki rekord juz jest';
  13. }
  14.  
  15. else {
  16. echo 'nima';
  17. }
  18. ?>


I nadal nic :/
Go to the top of the page
+Quote Post
jasin
post
Post #11





Grupa: Zarejestrowani
Postów: 142
Pomógł: 32
Dołączył: 21.08.2008
Skąd: Toruń

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


  1. require_once('polaczenie.php');
  2. $dbc = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die ('Blad polaczenia z baza danych');
  3. $termin = '01.06.13-08.06.13';
  4.  
  5. $queryt = mysql_query("SELECT COUNT(*) AS ile FROM domek2 WHERE tydzien = '" . $termin . "'");
  6. $dane = mysql_fetch_assoc($query);
  7.  
  8.  
  9. if($dane['ile']> 0)
  10. {
  11. echo 'taki rekord juz jest';
  12. }
  13. else
  14. {
  15. echo 'nima';
  16. }


Ten post edytował jasin 29.12.2012, 20:37:21
Go to the top of the page
+Quote Post
Randallmaster
post
Post #12





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

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



powinno działać tylko popraw $r['termin']
  1. <?php
  2. require_once('polaczenie.php');
  3. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die ('Blad polaczenia z baza danych');
  4. $termin = '01.06.13-08.06.13';
  5.  
  6. $q = mysql_query("SELECT * FROM domek2 WHERE tydzien like ".$termin);
  7. while ($r = mysql_fetch_array($q)) {
  8. if($r['termin'] == $termin)
  9. {
  10. echo 'taki rekord juz jest';
  11. }
  12.  
  13. else {
  14. echo 'nima';
  15. }
  16. ?>
Go to the top of the page
+Quote Post
tomasz23
post
Post #13





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 27.12.2012

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


@jasin Nadal nie działa.

@Randallmaster czyli mam poprawić $r['termin'] na pole w tabeli czyli data? czyli coś w stylu:
  1. <?php
  2.  
  3.  
  4. require_once('polaczenie.php');
  5.  
  6. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die ('Blad polaczenia z baza danych');
  7.  
  8. $termin = '01.06.13-08.06.13';
  9.  
  10.  
  11.  
  12. $q = mysql_query("SELECT * FROM domek2 WHERE tydzien like ".$termin);
  13.  
  14. while ($r = mysql_fetch_array($q)) {
  15.  
  16. if('tydzien' == $termin)
  17.  
  18. {
  19.  
  20. echo 'taki rekord juz jest';
  21.  
  22. }
  23.  
  24.  
  25.  
  26. else {
  27.  
  28. echo 'nima';
  29.  
  30. }
  31. }
  32.  
  33. ?>
  34.  
  35. ?
  36.  
  37.  
Go to the top of the page
+Quote Post
muniekw
post
Post #14





Grupa: Zarejestrowani
Postów: 243
Pomógł: 22
Dołączył: 1.06.2009
Skąd: Warszawa

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


Sprawdź co Ci zwraca dany rekord tzn wyświetl to co masz w zapytaniu i dopiero stwórz warunek.

jak tam masz:
  1. while ($r = mysql_fetch_array($q)) {
  2. ...
  3. }

to wyświetl sobie to co masz w zmiennej $r. Np:
  1. while ($r = mysql_fetch_array($q)) {
  2. print_r($r);
  3. }


Będziesz wiedział co Ci zwraca baza i na tej podstawie powinieneś już dobrze stworzyć ifa.
Go to the top of the page
+Quote Post
mokry
post
Post #15





Grupa: Zarejestrowani
Postów: 374
Pomógł: 23
Dołączył: 3.06.2006
Skąd: Katowice

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


  1. <?php
  2. require_once('polaczenie.php');
  3. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die ('Blad polaczenia z baza danych');
  4. $termin = '01.06.13-08.06.13';
  5.  
  6. $q = mysql_query("SELECT COUNT(*) as ile FROM domek2 WHERE tydzien like ".$termin);
  7. while ($r = mysql_fetch_assoc($q)) {
  8. if($r['ile'] > 0)
  9. {
  10. echo 'taki rekord juz jest';
  11. }
  12.  
  13. else {
  14. echo 'nima';
  15. }
  16. ?>


Ten post edytował mokry 3.01.2013, 14:12:19
Go to the top of the page
+Quote Post
Michasko
post
Post #16





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

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


Albo inaczej. Zapytanie:
  1. SELECT count(*) > 0 FROM domek2 WHERE tydzien LIKE 'TwojaZmiennaTermin';


zwróci wartość 1 jeśli dany rekord już istnieje lub 0, jeśli nie istnieje. Wtedy możesz sprawdzić to tak:
  1. //łączysz się z bazą danych
  2.  
  3. $termin = '01.06.13-08.06.13';
  4.  
  5. $ile = mysql_result(mysql_query("SELECT count(*) > 0 FROM domek2 WHERE tydzien LIKE '".$termin."';", 0); //pobierze wartość wyniku z wiersza o indeksie 0 (zawsze będzie tylko jeden wiersz, gdyż sprawdzamy warunek)
  6. if($ile == 1)
  7. {
  8. //jeśli istnieje
  9. }
  10. else
  11. {
  12. //jeśli nie istnieje
  13. }


Jeśli takim zapytaniem chcesz sprawdzać czy np. dany domek jest w danym terminie wolny czy zajęty, to proponuje przechowywać dane w inny sposób, tzn. zamiast 1 pola `tydzien` formatowanego zawierającego 2 daty oddzielone myślnikiem, mieć 2 pola typu DATE (jedno z datą początku terminu, drugie z datą końca).

Poza tym proponuje od razu uczyć się korzystania z bibliotek do obsługi baz danych, jak np. PDO, gdyż funkcje typu mysql_* są już "depracated" (zostaną usunięte) - wg manuala PHP już od wersji PHP 5.5.0.

Ten post edytował Michasko 3.01.2013, 16:11:59
Go to the top of the page
+Quote Post
tomasz23
post
Post #17





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 27.12.2012

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


@Michasko

Zrobiłem tak jak napisałeś. Samo zapytanie w mysql zwraca wynik 1, natomiast w przeglądarce nadal zwraca wynik else... Nie mam pojęcia w czym może być problem :/
Go to the top of the page
+Quote Post
Michasko
post
Post #18





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

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


Spróbuj dać jedynkę w apostrofy i/lub zmienną $ile potraktować funkcją trim() - być może jakimś dziwnym sposobem do wyniku wkradają się białe znaki?
Ewentualnie możesz jeszcze zastosować coś takiego:
  1. if($ile)
  2. {
  3. echo ('jest');
  4. }
  5. else
  6. {
  7. echo ('nima!!');
  8. }

Jeśli wierzyć manualowi ( http://php.net/manual/en/language.types.boolean.php ), zmienna $ile będzie w tym momencie rzutowana na typ boolean, a wtedy dowolna wartość inna od 0, NULL, FALSE (i kilku innych) będzie traktowana jako prawda.
Innego pomysłu już nie mam (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mokry
post
Post #19





Grupa: Zarejestrowani
Postów: 374
Pomógł: 23
Dołączył: 3.06.2006
Skąd: Katowice

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


Jeśli są jakieś problemy ze zmienną to może spróbuj:
  1. if((int)$ile == 1)
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #20





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Wywal średnik na końcu.
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: 10.10.2025 - 03:53