Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z instrukcjami warunkowymi po poleceniu SELECT
Forum PHP.pl > Forum > Przedszkole
tomasz23
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 smile.gif
muniekw
A co chcesz osiągnąć?
mmmmmmm
  1. if(mysql_num_rows($result) >= 1)
tomasz23

@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.
mmmmmmm
Nie wiem, czy to nie przeszkoda, ale raz korzystasz z mysql_, a raz z mysqli_
rossecki
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) smile.gif
muniekw
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.
kalafior122
  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 smile.gif
jasin
Pytanie: jakie wartości przechowuje pole tydzień
Nie lepiej w select dać count(*) i spr czy > 0?
tomasz23
@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 :/
jasin
  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. }
Randallmaster

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. ?>
tomasz23
@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.  
muniekw
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.
mokry
  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. ?>
Michasko
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.
tomasz23
@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 :/
Michasko
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 smile.gif
mokry
Jeśli są jakieś problemy ze zmienną to może spróbuj:
  1. if((int)$ile == 1)
mmmmmmm
Wywal średnik na końcu.
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.