За последние 24 часа нас посетили 15886 программистов и 1313 роботов. Сейчас ищут 1494 программиста ...

Небольшой вопрос

Тема в разделе "PHP и базы данных", создана пользователем Георгий Корнев, 13 фев 2007.

  1. Георгий Корнев

    Георгий Корнев Активный пользователь

    С нами с:
    8 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    Вот кусок кода.
    Когда скрипт работает при значении

    $_GET[region] == "all"
    $_GET[what] == "all"


    скрипт выполняет (так как это логично, но все же как сделать отличие между ними...)
    isset($_GET[region])==true
    isset($_GET[what])==true



    PHP:
    1.  else if  ($_GET[sort] == "go" && isset($_GET[region])==true && isset($_GET[what])==true)
    2. {
    3. $num_count = "SELECT * FROM $var_advert_db_ WHERE region='$_GET[region]' AND what='$_GET[what]' ORDER by 'datetime' DESC";
    4. $qsql =      "SELECT * FROM $var_advert_db_ WHERE region='$_GET[region]' AND what='$_GET[what]' ORDER by 'datetime' DESC limit $page,$msg_num";
    5. }
    6.  
    7.  
    8. else  if   ($_GET[sort] == "go" && $_GET[region] == "all" && $_GET[what] == "all")
    9. {
    10. $num_count = "SELECT * from $var_advert_db_ ORDER by 'datetime' DESC";
    11. $qsql =      "SELECT * FROM $var_advert_db_ ORDER by 'datetime' DESC limit $page,$msg_num";
    12. }
    :roll: :oops:
     
  2. Битник

    Битник Активный пользователь

    С нами с:
    9 фев 2007
    Сообщения:
    103
    Симпатии:
    0
    Да полно вариантов, первое условие вот так можно изменить, а второе оставить как есть.

    PHP:
    1. if ($_GET[sort] == 'go' && $_GET['region'] != 'all' && $_GET[what] != 'all') {
    2.  
    3. }
    Так лучше не писать isset($_GET[what])==true
    Просто isset($_GET['what'])
     
  3. Георгий Корнев

    Георгий Корнев Активный пользователь

    С нами с:
    8 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    дело в том что == ALL дает другой результат вот как раз весь код

    PHP:
    1.  else if  ($_GET[sort] == "go" && $_GET[region] == "all" && isset($_GET[what]) == true)
    2. {
    3. $num_count =  "SELECT * FROM $var_advert_db_ WHERE what='$_GET[what]' ORDER by 'datetime' DESC";
    4. $qsql =       "SELECT * FROM $var_advert_db_ WHERE what='$_GET[what]' ORDER by 'datetime' DESC limit $page,$msg_num";
    5. }
    6. else if  ($_GET[sort] == "go" && isset($_GET[region])==true && $_GET[what] == "all")
    7. {
    8. $num_count = "SELECT * FROM $var_advert_db_ WHERE region='$_GET[region]' ORDER by 'datetime' DESC";
    9. $qsql =      "SELECT * FROM $var_advert_db_ WHERE region='$_GET[region]' ORDER by 'datetime' DESC limit $page,$msg_num";
    10. }
    11.  
    12.  else if  ($_GET[sort] == "go" && isset($_GET[region])==true && isset($_GET[what])==true)
    13. {
    14. $num_count = "SELECT * FROM $var_advert_db_ WHERE region='$_GET[region]' AND what='$_GET[what]' ORDER by 'datetime' DESC";
    15. $qsql =      "SELECT * FROM $var_advert_db_ WHERE region='$_GET[region]' AND what='$_GET[what]' ORDER by 'datetime' DESC limit $page,$msg_num";
    16. }
    17.  
    18.  
    19. else  if   ($_GET[sort] == "go" && $_GET[region] == "all" && $_GET[what] == "all")
    20. {
    21. $num_count = "SELECT * from $var_advert_db_ ORDER by 'datetime' DESC";
    22. $qsql =      "SELECT * FROM $var_advert_db_ ORDER by 'datetime' DESC limit $page,$msg_num";
    23. }
    надо чтобы один другому не мешал
     
  4. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    PHP:
    1. <?php
    2. $conds = array();
    3. $sort = isset($_GET['sort']) ? $_GET['sort'] : false;
    4. $region = isset($_GET['region']) ? mysql_escape_string($_GET['region']) : false;
    5. $what = isset($_GET['what']) ? mysql_escape_string($_GET['what']) : false;
    6.  
    7. $num_count = "SELECT * from $var_advert_db_ ";
    8. $qsql = "SELECT * FROM $var_advert_db_ ";
    9. if ( $sort == 'go' ) {
    10.    if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"';
    11.    if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"';
    12.    if ( sizeof($conds) > 0 ) {
    13.       $condition = 'WHERE ' . implode(' AND ', $conds);
    14.       $num_count .= $condition;
    15.       $qsql .= $condition;
    16.    }
    17. }
    18. $num_count .= ' ORDER by `datetime` DESC';
    19. $qsql .= " ORDER by `datetime` DESC limit $page,$msg_num";
    20. ?>
    оно?
     
  5. Георгий Корнев

    Георгий Корнев Активный пользователь

    С нами с:
    8 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    да.. большое спасибо! вот это сила! РЕСПЕКТ
     
  6. Георгий Корнев

    Георгий Корнев Активный пользователь

    С нами с:
    8 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    вот еще я немогу разобраться куда нужно вставить
    это получается сортировка сообщений
    я хочу еще вставить главную сортировку сообещний по разделам

    $_GET[brd] т.е. сделав запрос ?brd=msg1 и выводились сообщения из этой категории + ко всему этому прибавить эту сортировку

    PHP:
    1. $conds = array();
    2. $sort = isset($_POST['sort']) ? $_POST['sort'] : false;
    3. $region = isset($_POST['region']) ? mysql_escape_string($_POST['region']) : false;
    4. $what = isset($_POST['what']) ? mysql_escape_string($_POST['what']) : false;
    5.  
    6. $num_count = "SELECT * from $var_advert_db_ ";
    7. $qsql = "SELECT * from $var_advert_db_ ";
    8. if ( $sort == 'go' ) {
    9.  
    10.    if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"';
    11.    if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"';
    12.    if ( sizeof($conds) > 0 ) {
    13.       $condition = 'WHERE ' . implode(' AND ', $conds);
    14.       $num_count .= $condition;
    15.       $qsql .= $condition;
    16.    }
    17. }
    18. $num_count .= "  ORDER by `datetime` DESC";
    19. $qsql .= "  ORDER by `datetime` DESC limit $page,$msg_num";
    т.е. запрос $_GET[brd] должен всегда присутствовать по умолчанию
    чтобы можно было сортировать сообщения по разделам, и в этом разделе уже сортировка по регионам,
     
  7. pel

    pel Активный пользователь

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
    где именно присутствовать?
     
  8. Георгий Корнев

    Георгий Корнев Активный пользователь

    С нами с:
    8 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    к примеру у меня 10 сообщений в таблице есть 2 раздела РАЗДЕЛ1 РАЗДЕЛ2

    РАЗДЕЛ1 = 4 сообщения
    РАЗДЕЛ2 = 6 сообщений

    значит $_GET[brd] = РАЗДЕЛ1
    выводит 4 сообщения + ко всему чтобы работал скрипт сортировки который я выложил.
    т.е. объявления сортируются по разделу + ко всему еще и в этом разделе по региону и типу
     
  9. pel

    pel Активный пользователь

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
    если это, то
    PHP:
    1. $num_count .= " AND category=$brd ORDER by `datetime` DESC";
    2. $qsql .= " AND category=$brd ORDER by `datetime` DESC limit $page,$msg_num";
    $brd определить в начале скрипта, как $region, $what ...

    если это, то
    PHP:
    1. $num_count .= "  ORDER BY category,datetime DESC";
    2. $qsql .= "  ORDER by category,datetime DESC limit $page,$msg_num";
     
  10. Георгий Корнев

    Георгий Корнев Активный пользователь

    С нами с:
    8 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    в действительности скрипт выглядит так..
    и я сделал как ты посоветовал но результат отрыцательный =( не работет говорит что запрос не принят

    PHP:
    1. $conds = array();
    2. $sort = isset($_POST['sort']) ? $_POST['sort'] : false;
    3. $region = isset($_POST['region']) ? mysql_escape_string($_POST['region']) : false;
    4. $what = isset($_POST['what']) ? mysql_escape_string($_POST['what']) : false;
    5. //$board = isset($_GET['board']) ? mysql_escape_string($_GET['board']) : false;
    6.  
    7. $num_count = "SELECT * from $var_advert_db_ ";
    8. $qsql = "SELECT * from $var_advert_db_ ";
    9. if ( $sort == 'go' ) {
    10.  
    11.    if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"';
    12.    if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"';
    13.    if ( sizeof($conds) > 0 ) {
    14.       $condition = 'WHERE ' . implode(' AND ', $conds);
    15.       $num_count .= $condition;
    16.       $qsql .= $condition;
    17.    }
    18. }
    19. $num_count .= " AND $_GET[board] ORDER by `datetime` DESC";
    20. $qsql .= " AND $_GET[board] ORDER by `datetime` DESC limit $page,$msg_num";
     
  11. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Георгий Корнев
    В скрипте не контролирюется magic_quotes_gpc() что может послужить проблемой (хотя к топику это отношения не имеет)
     
  12. Георгий Корнев

    Георгий Корнев Активный пользователь

    С нами с:
    8 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    и что можно сделать для решения этой проблемы ?
     
  13. pel

    pel Активный пользователь

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
    мм..
    я так посоветовал??
     
  14. Георгий Корнев

    Георгий Корнев Активный пользователь

    С нами с:
    8 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    ну ты написал

    PHP:
    1. $num_count .= " AND category=$brd ORDER by `datetime` DESC";
    2. $qsql .= " AND category=$brd ORDER by `datetime` DESC limit $page,$msg_num";
    а я так понимаю что category=$brd РАВНО board='$_GET[board]'

    в том примере я забыл дописать board=

    вот как у меня сейчас
    PHP:
    1. $num_count .= " AND board='$_GET[board]' ORDER by `datetime` DESC";
    2. $qsql .= " AND board='$_GET[board]' ORDER by `datetime` DESC limit $page,$msg_num";
     
  15. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Грубо говоря контролировать их :)
     
  16. Георгий Корнев

    Георгий Корнев Активный пользователь

    С нами с:
    8 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    ну а в скрипте, а то я уже запутался окончательно =(((
     
  17. Георгий Корнев

    Георгий Корнев Активный пользователь

    С нами с:
    8 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    PHP:
    1.  
    2. /*
    3. $conds = array();
    4. $sort = isset($_POST['sort']) ? $_POST['sort'] : false;
    5. $region = isset($_POST['region']) ? mysql_escape_string($_POST['region']) : false;
    6. $what = isset($_POST['what']) ? mysql_escape_string($_POST['what']) : false;
    7.  
    8. $num_count = "SELECT * from $var_advert_db_ ";
    9. $qsql = "SELECT * from $var_advert_db_ ";
    10. if ( $sort == 'go' ) {
    11.  
    12.    if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"';
    13.    if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"';
    14.    if ( sizeof($conds) > 0 ) {
    15.       $condition = 'WHERE ' . implode(' AND ', $conds);
    16.       $num_count .= $condition;
    17.       $qsql .= $condition;
    18.    }
    19. }
    20. $num_count .= " AND board='$_GET[board]' ORDER by `datetime` DESC";
    21. $qsql .= " AND board='$_GET[board]' ORDER by `datetime` DESC limit $page,$msg_num";
    22.  
    23.  
    24.                        */
    25.  
    26. //Так работает, но мне надо влепить в тот скрипт это
    27.  
    28.    $num_count                = "SELECT * from $var_advert_db_  WHERE     board='$_GET[board]' ORDER by `datetime` DESC";
    29.    $qsql                = "SELECT * from $var_advert_db_  WHERE    board='$_GET[board]' ORDER by `datetime` DESC limit $page,$msg_num  ";
     
  18. Mete0

    Mete0 Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
    Код (Text):
    1. function addsl($res)
    2. {
    3.  if (!get_magic_quotes_gpc()) $res = addslashes($res);
    4.  return $res;
    5. }
    Так понятно?
     
  19. pel

    pel Активный пользователь

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
    Георгий Корнев,
    1)
    PHP:
    1. $num_count .= " AND board='$board' ORDER by `datetime` DESC";
    2. $qsql .= " AND board='$board' ORDER by `datetime` DESC limit $page,$msg_num";
    2) B начале, после присвоений $sort, $region и $what добавить
    PHP:
    1. $board = isset($_POST['board']) ? mysql_escape_string($_POST['board']) : false;
    3) Учесть то, что сказали Vladson и Mete0

    4) В конце скрипта добавить
    PHP:
    1. print $num_count.'<br>'.$qsql
    и показать сюда результат
     
  20. Георгий Корнев

    Георгий Корнев Активный пользователь

    С нами с:
    8 фев 2007
    Сообщения:
    67
    Симпатии:
    0
    я так самого начала делал
    вот что выдало

    Код (Text):
    1. SELECT * from adverts AND board='' ORDER by `datetime` DESC
    2. SELECT * from adverts AND board='' ORDER by `datetime` DESC limit 0,5
    это из-за того что в этом скрипте нужно учитывать что REGION & WHAT это сортировка на странице. т.е. когда страница загружена пользователь для удобства отсортировывает себе страницу по региону и типу
    надо решить чтобы когда сортировки нету было как положенно

    SELECT * from adverts WHERE board='catalog1' ORDER by `datetime` DESC

    а когда сортируют соответственно типо
    SELECT * from adverts WHERE region='gorod' AND what='1' AND board='catalog1' ORDER by `datetime` DESC


    у меня сейчас вот так

    PHP:
    1. $conds = array();
    2. $board = isset($_POST['board']) ? mysql_escape_string($_POST['board']) : false;
    3. $sort = isset($_POST['sort']) ? $_POST['sort'] : false;
    4. $region = isset($_POST['region']) ? mysql_escape_string($_POST['region']) : false;
    5. $what = isset($_POST['what']) ? mysql_escape_string($_POST['what']) : false;
    6.                       function addsl($res)
    7. {
    8.  if (!get_magic_quotes_gpc()) $res = addslashes($res);
    9.  return $res;
    10. }
    11. $num_count = "SELECT * from $var_advert_db_ ";
    12. $qsql = "SELECT * from $var_advert_db_ ";
    13. if ( $sort == 'go' ) {
    14.  
    15.    if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"';
    16.    if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"';
    17.    if ( sizeof($conds) > 0 ) {
    18.       $condition = 'WHERE ' . implode(' AND ', $conds);
    19.       $num_count .= $condition;
    20.       $qsql .= $condition;
    21.    }
    22. }
    23. $num_count .= " AND board='$board' ORDER by `datetime` DESC";
    24. $qsql .= " AND board='$board' ORDER by `datetime` DESC limit $page,$msg_num";
    25.  
    26.     print $num_count.'<br>'.$qsql
     
  21. Mete0

    Mete0 Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
    можно так

    PHP:
    1.  
    2. function addsl($res)
    3. {
    4.  if (!get_magic_quotes_gpc()) $res = addslashes($res);
    5.  return $res;
    6. }
    7.  
    8. $conds = array();
    9. $board = isset($_POST['board']) ? addsl($_POST['board']) : false;
    10. $sort = isset($_POST['sort']) ? $_POST['sort'] : false;
    11. $region = isset($_POST['region']) ? addsl($_POST['region']) : false;
    12. $what = isset($_POST['what']) ? addsl($_POST['what']) : false;
    13.                      
    14. $num_count = "SELECT * from $var_advert_db_ ";
    15. $qsql = "SELECT * from $var_advert_db_ ";
    16. if ( $sort == 'go' ) {
    17.  
    18.    if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"';
    19.    if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"';
    20.    if ( sizeof($conds) > 0 ) {
    21.       $condition = 'WHERE ' . implode(' AND ', $conds);
    22.       $num_count .= $condition;
    23.       $qsql .= $condition;
    24.    }
    25. }
    26. $num_count .= " AND board='$board' ORDER by `datetime` DESC";
    27. $qsql .= " AND board='$board' ORDER by `datetime` DESC limit $page,$msg_num";
    28.  
    29.     print $num_count.'<br>'.$qsql
     
  22. pel

    pel Активный пользователь

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
    тю.
    не, ну что, _действительно_ не понятно что сделать надо? %-(

    PHP:
    1. <?
    2. function addsl($res) {
    3.     if (!get_magic_quotes_gpc()) $res = addslashes($res);
    4.     return $res;
    5. }
    6.  
    7. $conds = array();
    8. $board = isset($_POST['board']) ? addsl($_POST['board']) : false;
    9. $sort = isset($_POST['sort']) ? addsl($_POST['sort']) : false;
    10. $region = isset($_POST['region']) ? addsl($_POST['region']) : false;
    11. $what = isset($_POST['what']) ? addsl($_POST['what']) : false;
    12.  
    13.  
    14. $num_count = "SELECT * from $var_advert_db_ WHERE ";
    15. $qsql = "SELECT * from $var_advert_db_ WHERE ";
    16. if ( $sort == 'go' ) {
    17.  
    18.    if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"';
    19.    if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"';
    20.    if ( sizeof($conds) > 0 ) {
    21.       $condition = implode(' AND ', $conds);
    22.       $num_count .= $condition.' AND ';
    23.       $qsql .= $condition.' AND ';
    24.    }
    25. }
    26. $num_count .= " board='$board' ORDER by `datetime` DESC";
    27. $qsql .= " board='$board' ORDER by `datetime` DESC limit $page,$msg_num";
    28.  
    29.     print $num_count.'<br>'.$qsql
    30. ?>
    (поправьте меня кто-нть насчет addsl и mysql_escape_string)
     
  23. pel

    pel Активный пользователь

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
    :) долго пишу, отвлекаюсь

    Mete0, region и what могут быть не заданы ;)
     
  24. Mete0

    Mete0 Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    272
    Симпатии:
    0
    Адрес:
    Gatchina
    Это фиолетово :)
     
  25. pel

    pel Активный пользователь

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
    Фиолетово. Но работать не будет :)
    В твоем варианте получится запрос

    SELECT * from $var_advert_db_ AND board='$board' ORDER by `datetime` DESC
    :p