476

Re: Выпадающий список

print $sql;

477

Re: Выпадающий список

function sub_func($r, $aSQL, $aName) {
    global $db;

    $aSub = array();
    $aSQL[] = ' `brand` = "' . $r['brand'] . '" ';
    $aSQL[] = ' `br` = "' . $r['md'] . '" ';
    foreach ($aName as $checkbox) {
      if (isset($_POST[$checkbox])) {
       $aSub[] = mysql_real_escape_string($checkbox);
      }
    }

  if (count($aSub) > 0) {
    $sql = 'SELECT * FROM `proba`
      WHERE `br` IN("' . implode('","', $aSub) . '")
      AND ' . implode('AND', $aSQL);
  } else {
    $sql = 'SELECT * FROM `proba`
      WHERE ' . implode('AND', $aSQL);
  }
  
 
      print $sql;
        
      }

формирует такой запрос

SELECT * FROM `proba` WHERE `br` IN("amtel","barum") AND `shirina` = "175" AND `brand` = "" AND `br` = "" 

478

Re: Выпадающий список

Ошибка в вызове функции. Строка с данными должна передаваться в переменной $row.
sub_func($row, $aSQL, $aName);

479

Re: Выпадающий список

Да я тоже так подумал,

function sub_func($row, $aSQL, $aName) {
    global $db;

    $aSub = array();
    $aSQL[] = ' `brand` = "' . $row['brand'] . '" ';
    $aSQL[] = ' `md` = "' . $row['md'] . '" ';
    foreach ($aName as $checkbox) {
      if (isset($_POST[$checkbox])) {
       $aSub[] = mysql_real_escape_string($checkbox);
      }
    }

  if (count($aSub) > 0) {
    $sql = 'SELECT * FROM `proba`
      WHERE `brand` IN("' . implode('","', $aSub) . '")
      AND ' . implode('AND', $aSQL);
  } else {
    $sql = 'SELECT * FROM `proba`
      WHERE ' . implode('AND', $aSQL);
  }
  
 
        print $sql;
      }

SELECT * FROM `proba` WHERE `brand` IN("amtel","barum") AND `shirina` = "175" AND `profil` = "65" AND `brand` = "" AND `md` = ""

но не помогло.  Еще я заметил что вот ета строка

 WHERE `brand` IN("amtel","barum")

  выводится под каждой таблицей заглавления, значит что под таблицей амтел выведется строки из двух производителей ето правильно? Ведь под таблицей amtel должны выводится все строки у которых параметр amtel, или я не правильно читаю

480

Re: Выпадающий список

если убрать вот ету строку

AND ' . implode('AND', $aSQL);

то выводятся строки из двух производителей под одной таблицей заглавления

481

Re: Выпадающий список

Да мне долго доходит, ето какраз тот параметр что пустым передается отвечает за сортировку по брендам

482

Re: Выпадающий список

нашел все нормально, ето моя невнимательность, дописал в строке подключения функции, $row получилось!

483

Re: Выпадающий список

немогу написать групировку по модели выдает ошибку

if (count($aUnion) > 0 && count($aSQL) > 0) {
  $sql = 'SELECT *   FROM `proba` 
    WHERE `brand` IN("' . implode('","', $aUnion) . '") 
     AND ' . implode('AND', $aSQL)' GROUP BY model ' ;
}

что не так? по всякому перепробовал

484

Re: Выпадающий список

решил ету проблему таким образом

 $sql = 'SELECT DISTINCT brand, model,br,md 

485

Re: Выпадающий список

Написал все 4 условия , теперь пробую подключить листалку.

if (count($aUnion) > 0 && count($aSQL) > 0) {
  $sql = 'SELECT DISTINCT brand, model,br,md   FROM `proba` limit '.$start_pos.', '.$perpage.' 
    WHERE `brand` IN("' . implode('","', $aUnion) . '") 
     AND ' . implode('AND', $aSQL);
}

else if (count($aUnion) > 0  ) {
$sql = 'SELECT DISTINCT brand, model,br,md   FROM `proba` 
    WHERE `brand` IN("' . implode('","', $aUnion) . '") 
     ';
}

else if (count($aSQL) > 0  ) {
$sql = 'SELECT DISTINCT brand, model,br,md   FROM `proba` WHERE
   ' . implode('AND', $aSQL) . ' 
     ';
     
}
else { $sql = '(
  
    SELECT DISTINCT brand, model,br,md FROM `proba`     
  ) 
   ';   
}

для нее тоже как и в том случяе с раздельными таблицами нужно масив писать? Сверху функции

486 (изменено: павелsimon, 2012-05-06 18:57:36)

Re: Выпадающий список

Я скопировал масивы и вынес их над функцией листалки.

$aName = array('nazv_auto' => 'shirina', 'nazv_model' => 'profil', 'nazv_year' => 'diametr', 'nazv_sezon' => 'sezon');
// Теперь создаем пустой массив для хранения данных формирующих запрос (имя поля = значение).
$aSQL = array();
// Проходим цикл ассоциативного массива имен и добавляем элемент в массив $aSQL, если список выбран.
foreach ($aName as $select => $field) {
  if (!empty($_POST[$select])) $aSQL[] = ' `' . $field . '` = "' . mysql_real_escape_string($_POST[$select]) . '" ';
}
$aName = array('amtel', 'barum',);
$aUnion = array();
foreach ($aName as $checkbox) {
  if (isset($_POST[$checkbox])) {
    $aUnion[] = mysql_real_escape_string($checkbox);
  }
}

function link_bar($page, $pages_count)
{
for ($j = 1; $j <= $pages_count; $j++)
{
// Вывод ссылки
if ($j == $page) {
echo ' <a style="color: #808000;" ><b>'.$j.'</b></a> ';
} else {
echo ' <a style="color: #808000;" href='.$_server['php_self'].'?page='.$j.'>'.$j.'</a> ';
}
// Выводим разделитель после ссылки, кроме последней
// например, вставить "|" между ссылками
if ($j != $pages_count) echo ' ';
}
return true;
} // Конец функции

$perpage = 2; // Количество отображаемых данных из БД

if (empty($_GET['page']) || ($_GET['page'] <= 0)) {
$page = 1;
} else {
$page = (int) $_GET['page']; // Считывание текущей страницы
}
// Здесь сейчяс действует лиш для последнего условия и запроса,  незнаю как теперь для всех сформировать


$count = mysql_numrows(mysql_query('select DISTINCT brand, model,br,md from proba ')) or die('error! Записей не найдено!');
$pages_count = ceil($count / $perpage); // Количество страниц

// Если номер страницы оказался больше количества страниц
if ($page > $pages_count) $page = $pages_count;
$start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД

// Вызов функции, для вывода ссылок на экран
link_bar($page, $pages_count);
 
 

Здесь нужна ваша помощь в формировании 4 условий с запросами в зависимости от того что выбрано в чекбоксах и всписках или ничего не выбрано

487

Re: Выпадающий список

надеюсь я вам еще не надоел, и вы мне поможете с кодом листалки?

488

Re: Выпадающий список

Один вопрос за раз. На последние вопросы я отвечать не буду. Учитесь общаться на форуме.

489 (изменено: павелsimon, 2012-05-06 21:17:37)

Re: Выпадающий список

Ясно.  С выводом и условиями все нормально. С листалкой нужна ваша помощь.
Я выше привел код где вынес масивы над функцией в каждый запрос я прицепил строки с LIMIT

if (count($aUnion) > 0 && count($aSQL) > 0) {
  $sql = 'SELECT DISTINCT brand, model,br,md   FROM `proba` limit '.$start_pos.', '.$perpage.' 
    WHERE `brand` IN("' . implode('","', $aUnion) . '") 
     AND ' . implode('AND', $aSQL);
}

else if (count($aUnion) > 0  ) {
$sql = 'SELECT DISTINCT brand, model,br,md   FROM `proba` limit '.$start_pos.', '.$perpage.' 
    WHERE `brand` IN("' . implode('","', $aUnion) . '") 
     ';
}

else if (count($aSQL) > 0  ) {
$sql = 'SELECT DISTINCT brand, model,br,md   FROM `proba` limit '.$start_pos.', '.$perpage.' WHERE
   ' . implode('AND', $aSQL) . ' 
     ';
     
}
else { $sql = '(
  
    SELECT DISTINCT brand, model,br,md FROM `proba`limit '.$start_pos.', '.$perpage.'     
  ) 
   ';   
}

теперь незнаю как сформировать условия с запросом в функции листалке

490

Re: Выпадающий список

Запрос должен иметь такой вид.

  $sql = 'SELECT * FROM `proba`
    WHERE `brand` IN("' . implode('","', $aUnion) . '") 
     AND ' . implode('AND', $aSQL) . ' GROUP BY `model` LIMIT ' . $start_pos . ', ' . $perpage;

Но перед его использованием необходимо подсчитать количество записей в БД и сформировать, как минимум, переменные $start_pos и $perpage. Подсчет делается отдельным запросом, который практически идентичен выборке, но вместо данных возвращает количество строк:

  $sql_count = 'SELECT COUNT(*) FROM `proba`
    WHERE `brand` IN("' . implode('","', $aUnion) . '") 
     AND ' . implode('AND', $aSQL) . ' GROUP BY `model`';

491

Re: Выпадающий список

Здравствуйте не получяется у меня подключить листалку. Не пойму где ошибка

function brands() {

$return = array();
$sql = 'SELECT `brand` FROM `baza` GROUP BY brand';

if ($result = mysql_query($sql)) {
  while ($row = mysql_fetch_assoc($result)) {
    $return[] = $row["brand"];
  }
  mysql_free_result($result);
}

return $return;
}


 $aName = array('nazv_auto' => 'shirina', 'nazv_model' => 'profil', 'nazv_year' => 'diametr', 'nazv_sezon' => 'sezon');
// Теперь создаем пустой массив для хранения данных формирующих запрос (имя поля = значение).
$aSQL = array();
// Проходим цикл ассоциативного массива имен и добавляем элемент в массив $aSQL, если список выбран.
foreach ($aName as $select => $field) {
  if (!empty($_POST[$select])) $aSQL[] = ' `' . $field . '` = "' . mysql_real_escape_string($_POST[$select]) . '" ';
}
$aName = brands();
$aUnion = array();
foreach ($aName as $checkbox) {
  if (isset($_POST[$checkbox])) {
    $aUnion[] = mysql_real_escape_string($checkbox);
  }
}

function link_bar($page, $pages_count)
{
for ($j = 1; $j <= $pages_count; $j++)
{
// Вывод ссылки
if ($j == $page) {
echo ' <a style="color: #808000;" ><b>'.$j.'</b></a> ';
} else {
echo ' <a style="color: #808000;" href='.$_server['php_self'].'?page='.$j.'>'.$j.'</a> ';
}
// Выводим разделитель после ссылки, кроме последней
// например, вставить "|" между ссылками
if ($j != $pages_count) echo ' ';
}
return true;
} // Конец функции

$perpage = 2; // Количество отображаемых данных из БД

if (empty($_GET['page']) || ($_GET['page'] <= 0)) {
$page = 1;
} else {
$page = (int) $_GET['page']; // Считывание текущей страницы
}
// Здесь сейчяс действует лиш для последнего условия и запроса,  незнаю как теперь для всех сформировать





$sql = 'SELECT * FROM `bza`
    WHERE `brand` IN("' . implode('","', $aUnion) . '") 
     AND ' . implode('AND', $aSQL) . ' GROUP BY `model` LIMIT ' . $start_pos . ', ' . $perpage;
     
     $sql_count = 'SELECT COUNT(*) FROM `baza`
    WHERE `brand` IN("' . implode('","', $aUnion) . '") 
     AND ' . implode('AND', $aSQL) . ' GROUP BY `model`';


$count = mysql_numrows(mysql_query($sql_count)) or die('error! Записей не найдено!');


$pages_count = ceil($count / $perpage); // Количество страниц

// Если номер страницы оказался больше количества страниц
if ($page > $pages_count) $page = $pages_count;
$start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД

// Вызов функции, для вывода ссылок на экран

492

Re: Выпадающий список

В запросе используется переменная $start_pos, которая формируется ниже в коде. Соответственно, в переменной $sql будет неправильный запрос.

493 (изменено: павелsimon, 2012-05-07 18:39:32)

Re: Выпадающий список

Но перенос запроса ниже строки формирования переменных $start_pos и $perpag, недал результата.
Чтоже делать?


а в функции разьве не нужно условия прописывать если выбрано в списках то читать то, если выбрано только в чекбоксах то читать ето?

494

Re: Выпадающий список

павелsimon сказал:

а в функции разьве не нужно условия прописывать если выбрано в списках то читать то, если выбрано только в чекбоксах то читать ето?

В какой функции?

павелsimon сказал:

Но перенос запроса ниже строки формирования переменных $start_pos и $perpag, недал результата.

Какого результата не дал? Переменные $start_pos и $perpag имеют значения?

495

Re: Выпадающий список

НУ в етой же функции листалке  вы написали как формируется запрос, я просто немогу понять как она будет считать строки если нигде не указано при каком условии и что считать? Там же для вывода данных из базы есть 4 условия и у каждого свой запрос. Я думал что для функции листалки должно быть также 4 условия с запросами. Или не так?

496

Re: Выпадающий список

павелsimon сказал:

Я думал что для функции листалки должно быть также 4 условия с запросами. Или не так?

Разумеется, так и надо делать. Что вам мешает на первом примере так же и остальные сделать? Я не могу все четыре за вас писать.

497

Re: Выпадающий список

Вот вроде написал. Посмотрите пожалуйста где у меня ошибка в граматике, сейчяс данные выводятся при 3 условиях ошибку выдает только когда ничего не выбрано ни в списках ни в чекбоксах. А в остальных 3 условиях выводится ссылка только на 1 страницу.  Функция

function brands() {

$return = array();
$sql = 'SELECT `brand` FROM `baza` ';

if ($result = mysql_query($sql)) {
  while ($row = mysql_fetch_assoc($result)) {
    $return[] = $row["brand"];
  }
  mysql_free_result($result);
}

return $return;
}

 $aName = array('nazv_auto' => 'shirina', 'nazv_model' => 'profil', 'nazv_year' => 'diametr', 'nazv_sezon' => 'sezon');
// Теперь создаем пустой массив для хранения данных формирующих запрос (имя поля = значение).
$aSQL = array();
// Проходим цикл ассоциативного массива имен и добавляем элемент в массив $aSQL, если список выбран.
foreach ($aName as $select => $field) {
  if (!empty($_POST[$select])) $aSQL[] = ' `' . $field . '` = "' . mysql_real_escape_string($_POST[$select]) . '" ';
}
$aName = brands();
$aUnion = array();
foreach ($aName as $checkbox) {
  if (isset($_POST[$checkbox])) {
    $aUnion[] = mysql_real_escape_string($checkbox);
  }
}

function link_bar($page, $pages_count)
{
for ($j = 1; $j <= $pages_count; $j++)
{
// Вывод ссылки
if ($j == $page) {
echo ' <a style="color: #808000;" ><b>'.$j.'</b></a> ';
} else {
echo ' <a style="color: #808000;" href='.$_server['php_self'].'?page='.$j.'>'.$j.'</a> ';
}
// Выводим разделитель после ссылки, кроме последней
// например, вставить "|" между ссылками
if ($j != $pages_count) echo ' ';
}
return true;
} // Конец функции

$perpage = 4; // Количество отображаемых данных из БД

if (empty($_GET['page']) || ($_GET['page'] <= 0)) {
$page = 1;
} else {
$page = (int) $_GET['page']; // Считывание текущей страницы
}
// Здесь сейчяс действует лиш для последнего условия и запроса,  незнаю как теперь для всех сформировать

if (count($aUnion) > 0 && count($aSQL) > 0) {
  $sql_count = 'SELECT COUNT(*) FROM `baza`
    WHERE `brand` IN("' . implode('","', $aUnion) . '") 
     AND ' . implode('AND', $aSQL) . '  ';
}

else if (count($aUnion) > 0  ) {
$sql_count = 'SELECT COUNT(*)  FROM `baza`  
    WHERE `brand` IN("' . implode('","', $aUnion) . '") ';
}

else if (count($aSQL) > 0  ) {
$sql_count = 'SELECT COUNT(*)  FROM `baza`  WHERE
   ' . implode('AND', $aSQL) . ' ';
     
}
else { $sql_count = '(
  
    SELECT COUNT(*) FROM `baza` ';   
}
$count = mysql_numrows(mysql_query($sql_count)) or die('error! Записей не найдено!');


$pages_count = ceil($count / $perpage); // Количество страниц

// Если номер страницы оказался больше количества страниц
if ($page > $pages_count) $page = $pages_count;
$start_pos = ($page - 1) * $perpage; // Начальная позиция, для запроса к БД

Условия и запросы для вывода таблиц

$aName = array('nazv_auto' => 'shirina', 'nazv_model' => 'profil', 'nazv_year' => 'diametr', 'nazv_sezon' => 'sezon');
// Теперь создаем пустой массив для хранения данных формирующих запрос (имя поля = значение).
$aSQL = array();
// Проходим цикл ассоциативного массива имен и добавляем элемент в массив $aSQL, если список выбран.
foreach ($aName as $select => $field) {
  if (!empty($_POST[$select])) $aSQL[] = ' `' . $field . '` = "' . mysql_real_escape_string($_POST[$select]) . '" ';
}

$aName = brands();
$aUnion = array();
foreach ($aName as $checkbox) {
  if (isset($_POST[$checkbox])) {
    $aUnion[] = mysql_real_escape_string($checkbox);
  }
}

if (count($aUnion) > 0 && count($aSQL) > 0) {
  $sql = 'SELECT DISTINCT brand, model FROM `baza`
    WHERE `brand` IN("' . implode('","', $aUnion) . '") 
     AND ' . implode('AND', $aSQL) . '  LIMIT ' . $perpage . ', ' . $perpage;
}

else if (count($aUnion) > 0  ) {
$sql = 'SELECT DISTINCT brand, model   FROM `baza`  
    WHERE `brand` IN("' . implode('","', $aUnion) . '") ';
}

else if (count($aSQL) > 0  ) {
$sql = 'SELECT DISTINCT brand, model  FROM `baza`  WHERE
   ' . implode('AND', $aSQL) . ' LIMIT '.$start_pos.', '.$perpage.' ';
     
}
else { $sql = '(
  
    SELECT DISTINCT brand, model FROM `baza` LIMIT '.$start_pos.', '.$perpage.' ) ';   
}

498

Re: Выпадающий список

Почемуто выходит так что переменные $page, $pages_count  передают 1 тоесть страниц всегда 1 хотя в базе гораздо больше.

499

Re: Выпадающий список

Все исправил теперь новая проблема. Когда переходиш по ссылкам страниц, то происходит обнуление в чекбоксах и списках все стает пустым. Попробывал поставить метод GET вместо POST всюду в форме но при такой замене в списках так как и в чекбоксах ничего нельзя выбрать. Тоесть только чтото выбрал сразу происходит обнуление. Что можно здесь зделать?

500

Re: Выпадающий список

Здравствуйе, подскажите пожалуйста. Пробую сформировать динамический вывод брендов из базы, сам вывод работает список строится но по ним нельзя нажать тоесть нажимаеш, а они сразуже отжимаются

<?php 
$result = mysql_query("select brand from baza GROUP BY brand",$db);


while ($row = mysql_fetch_array($result)) {
    if (isset($_POST [$row'brand']))  {
        print"<p>" . $row["brand"] . "<input type='checkbox' checked='checked' name='".$row['brand']."' 
        value=''  onchange='this.form.submit();'  >";
        }
        else { print"<p>" . $row["brand"] . "<input type='checkbox'  name='".$row['brand']."' 
        value=''  onchange='this.form.submit();'  >";} }
          ?>