Pomoc - Szukaj - U¿ytkownicy - Kalendarz
Pe³na wersja: [sql] Zle wybiera rekordy
Forum PHP.pl > Forum > Przedszkole
Bojakki
Mam najprostsze z mozliwych zapytan:

$query = mysql_query("SELECT * FROM image WHERE genre = $g") or die(mysql_error());

kolumna 'genre' moze miec tylko 2 wartosci: 1 lub 0. Gdy zmienna $g wynosi 1 to wybiera dobre rekordy z bazy tzn. te, ktore w kolumnie 'genre' mam 1. Ale gdy zmienna $g ma wartosc 0 to wybiera wszytskie rekordy, tzn i te co maja wartosc 0 i te co maja wartosc 1. Jak dla mnie jest to sytuacja paranormalna. Wie moze ktos czym to mzoe byc spowodowane?
Amorph
  1. <?php
  2. $query = mysql_query("SELECT * FROM image WHERE genre like '".$g."'") or die(mysql_error());
  3. ?>
nospor
Wstaw se takie zapytanie:
  1. SELECT * FROM image WHERE genre = 0

do PHPMyAdmin czy tez do innego klienta jakiego uzywasz i sprawd¼ czy tam rowniez ci zwraca taki wynik. Jesli zwraca dobrze, znaczy ze jednak w php cos namieszales, moze wczesniej cos masz i takie tam.
Jesli jednak nadal zwraca ci ¼le, to pokaz strukture tabeli, przykladowe inserty z danymi
Bojakki
W PHPMyAdmin pokazuje dobrze, tzn tylko rekordy gdzie 'genre' jest '0';

Struktura tabeli:

  1. -- Struktura tabeli dla `image`
  2. --
  3.  
  4. CREATE TABLE `image` (
  5. `id` int(8) NOT NULL AUTO_INCREMENT,
  6. `exp` text,
  7. `idc` int(8) DEFAULT NULL,
  8. `region` int(8) DEFAULT NULL,
  9. `genre` int(1) DEFAULT NULL,
  10. `skyline` int(1) DEFAULT NULL,
  11. `year` int(4) DEFAULT NULL,
  12. `month` int(2) DEFAULT NULL,
  13. `day` int(2) DEFAULT NULL,
  14. `author` varchar(32) DEFAULT NULL,
  15. PRIMARY KEY (`id`)
  16. ) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=latin2 AUTO_INCREMENT=21 ;
  17.  
  18. --
  19. -- Zrzut danych tabeli `image`
  20. --
  21.  
  22. INSERT INTO `image` VALUES (3, 'jpg', 2, 1, 0, 0, 2003, 4, 16, 'fgbgfb');
  23. INSERT INTO `image` VALUES (2, 'jpg', 2, 1, 0, 0, 1994, 4, 16, 'hhh2');
  24. INSERT INTO `image` VALUES (4, 'jpg', 1, 1, 0, 0, 1993, 3, 4, 'wed');
  25. INSERT INTO `image` VALUES (5, 'jpg', 1, 1, 0, 0, 2003, 5, 14, 'thtyhty');
  26. INSERT INTO `image` VALUES (6, 'jpg', 1, 1, 0, 0, 2002, 5, 6, 'tyhth');
  27. INSERT INTO `image` VALUES (7, 'jpg', 1, 1, 0, 0, 1993, 4, 4, 'tyhtyh');
  28. INSERT INTO `image` VALUES (8, 'jpg', 3, 1, 1, 0, 1992, 3, 25, 'hyuiio');
  29. INSERT INTO `image` VALUES (9, 'jpg', 3, 15, 1, 0, 1991, 6, 27, 'fhfg');
  30. INSERT INTO `image` VALUES (10, 'jpg', 3, 16, 0, 0, 1992, 3, 23, 'jjj');
  31. INSERT INTO `image` VALUES (11, 'jpg', 3, 17, 0, 0, 1990, 3, 3, 'boja');
  32. INSERT INTO `image` VALUES (12, 'jpg', 3, 17, 0, 0, 2003, 4, 14, 'yhyhyh');
  33. INSERT INTO `image` VALUES (14, 'jpg', 3, 21, 1, 1, 2006, 1, 28, 'ppp');
  34. INSERT INTO `image` VALUES (15, 'jpg', 1, 23, 1, 0, 1991, 3, 27, 'ccgcghcgh');
  35. INSERT INTO `image` VALUES (16, 'jpeg', 3, 24, 1, 0, 1990, 5, 3, 'ole');
  36. INSERT INTO `image` VALUES (17, 'jpg', 3, 24, 1, 0, 2002, 4, 15, 'olol');
nospor
Skoro w PMA ci pokazuje dobrze, znaczy ze w php cos zrąbales. pokaz wiekszy kawalek kodu, bo byc moze cos mieszasz po drodze

@Amorph od kiedy to liczby like sie traktuje?
Bojakki
Wyzej z istotniejszych rzeczy jest:

  1. <?php
  2. $idc = intval($_REQUEST['id']);
  3. if($_REQUEST['idr']!='') $idr = intval($_REQUEST['idr']); else $idr = $_REQUEST['idr'];
  4. if($_REQUEST['idg']!='') $idg = intval($_REQUEST['idg']); else $idg = $_REQUEST['idg'];
  5. if($_REQUEST['ids']!='') $ids = intval($_REQUEST['ids']); else $ids = $_REQUEST['ids'];
  6.  
  7. $query = mysql_query("SELECT bb_city.name, bb_city.status, bb_city.governor, bb_city.space, bb_ci
    ty.population, bb_city.density, bb_city.unemployment, bb_city.board, bb_district.
    id, bb_district.name, bb_province.id, bb_province.name
  8. FROM bb_city, bb_district, bb_province WHERE bb_city.id = $idc AND bb_city.distr
    ict = bb_district.id AND bb_district.province = bb_province.id"
    ) or die(mysql_error());
  9. $bb_cit=mysql_fetch_row($query);
  10.  
  11. $cityid = $idc;
  12. $city = htmlspecialchars(stripslashes($bb_cit[0]));
  13. $districtid = $bb_cit[8];
  14. $district = htmlspecialchars(stripslashes($bb_cit[9]));
  15. $provinceid = $bb_cit[10];
  16. $province = htmlspecialchars(stripslashes($bb_cit[11]));
  17.  
  18. $status = $bb_cit[1];
  19. $governor = htmlspecialchars(stripslashes($bb_cit[2]));
  20. $space = number_format($bb_cit[3], 0, '', ' ');
  21. $population = number_format($bb_cit[4], 0, '', ' ');
  22. $density = number_format($bb_cit[5], 0, '', ' ');
  23. $uneployment = $bb_cit[6];
  24. $board = htmlspecialchars(stripslashes($bb_cit[7]));
  25.  
  26. echo '<b><p style="margin-left: 8; margin-bottom: 2"><a class="blue" href="province.php?id='.$provinceid.'">woj. ';
  27. echo $province;
  28. echo '</a>';
  29.  
  30. echo ' <img border="0" src="layout/arrow.gif" width="13" height="15" align="absbottom"> ';
  31. echo '<a class="blue" href="district.php?id='.$districtid.'">';
  32. echo 'pow. '.$district;
  33. echo '</a>';
  34.  
  35. echo ' <img border="0" src="layout/arrow.gif" width="13" height="15" align="absbottom"> ';
  36. echo '<a class="blue" href="city.php?id='.$cityid.'">'.$city.'</a></b>';
  37.  
  38.  
  39. if($idc > '0' AND ($idr =='' AND $idg =='' AND $ids =='')){
  40. $query = mysql_query("SELECT * FROM image WHERE idc = $idc ORDER BY year DESC, month DESC, day DE
    SC, id DESC"
    ) or die(mysql_error());
  41. }
  42.  
  43. if($idr != ''){
  44. $query = mysql_query("SELECT * FROM image WHERE region = $idr AND idc = $idc ORDER BY year DESC, 
    month DESC, day DESC, id DESC"
    ) or die(mysql_error());
  45. }
  46.  
  47. if($idg != ''){
  48. $query = mysql_query("SELECT * FROM image WHERE genre like '".$idg."' AND idc = $idc ORDER BY year DESC, month DESC, day DESC, id DESC") or die(mysql_error());
  49. }
  50.  
  51. if($ids != ''){
  52. $query = mysql_query("SELECT * FROM image WHERE skyline = $ids AND idc = $idc ORDER BY year DESC,
     month DESC, day DESC, id DESC"
    ) or die(mysql_error());
  53. }
  54. ?>
nospor
  1. <?php
  2. if($idg != ''){
  3. ?>

tja..... a teraz wykonaj sobie ten kod:
  1. <?php
  2. $zm = 0;
  3. if ($zm !='') echo 'Wszedlem';
  4. else echo 'nie wszedlem';
  5. ?>

I sie domysl co u ciebie w logice skryptu szwankuje.

Pomijam juz taki drobny szczegol, ze u ciebie kazdy if moze nadpisac poprzedni, bo warunki mogą sie zgadzac, no chyba ze u ciebie zawsze tylko jeden if sie wykona

ps: i wyrzuc tego like ze sprawdzania liczby
Amorph
@nospor: oj, przeoczenie smile.gif Jednak w tej formie zadzia³a³oby.
Bojakki
Dalem to do sparwdzenia:

  1. <?php
  2. $zm = 0;
  3. if ($zm == '') echo 'Wszedlem';
  4. else echo 'nie wszedlem';
  5. ?>


Czemu pisze "Wszedlem" skoro warunek nie zostal spelniony? Przeciez 0 wcale nie jest rowne niczemu, a z tego co wiem to warunki sie wykonuja gdy sa spelnione.
nospor
a wlasnie ze 0 jes rowne niczemu, jesli porownujesz to przez ==. == nie sprawdza typow i dlaniego false==0==null=='' itd.

Pragne zauwazyc, ze jest jeszcze === smile.gif

ps: i dlatego wlasnie ja jako wartosci kolumny nigdy nie wale 0, bo potem zabawy ze hej smile.gif
Amorph
  1. <?php
  2. $zm = "0";
  3. if ($zm == ''){
  4. echo 'Wszedlem';
  5. }else{
  6.  echo 'nie wszedlem';
  7. }
  8. ?>

  1. <?php
  2. $zm = "";
  3. if ($zm == ''){
  4. echo 'Wszedlem';
  5. }else{
  6.  echo 'nie wszedlem';
  7. }
  8. ?>
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.