351

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

Запрос есть, когда я сливаю таблицы вместе просто как его с етим условием соединить чтоб при пустых чекбоксах и пустых списках по нему выводилось , при таком условии

if (count($aUnion) > 0) {
    $sql = '( ' . implode(' ) UNION ( ', $aUnion) . ' ) ';
} else {$sql = '(
  
    SELECT * FROM `achilles`  WHERE ' . implode('AND', $aSQL) . ' GROUP BY model
  ) UNION (
    SELECT * FROM `amtel`  WHERE ' . implode('AND', $aSQL) . 'GROUP BY model
  )

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

352

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

Выше я уже показывал как.

if (count($aUnion) > 0) {
} else if (count($aUnion) <= 0 && count($aSQL) <= 0) {
// Списки и галочки не выбраны.
} else {
}

353

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

Да при етом запросе действует точно также как и при моем ничего не меняется

354

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

Нет теперь при таком запросе если выбрать чекбокс и какой либо параметр в списках то выводит ошибку

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\autoshina\sravnit.php on line 493

355

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

Разбирайтесь.

356

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

Да не получяется разобраться вот ставлю запрос вроде все правильно , а всеравно не работает

if (count($aUnion) > 0) { $sql = '( ' . implode(' ) UNION ( ', $aUnion) . ' ) ';
} else if (count($aUnion) <= 0 && count($aSQL) <= 0) { $sql = '(
  
    SELECT * FROM `achilles`  WHERE ' . implode('AND', $aSQL) . ' GROUP BY model
  ) UNION (
    SELECT * FROM `amtel`  WHERE ' . implode('AND', $aSQL) . 'GROUP BY model
  )
   UNION (
    SELECT * FROM `autoguard`  WHERE ' . implode('AND', $aSQL) . 'GROUP BY model
  )';
} else {
$sql = '(
  
    SELECT * FROM `achilles`  WHERE ' . implode('AND', $aSQL) . ' GROUP BY model
  ) UNION (
    SELECT * FROM `amtel`  WHERE ' . implode('AND', $aSQL) . 'GROUP BY model
  )';

357

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

если ничего не выбрано нигде ошибка указывает на ету строку

while ($row = mysql_fetch_array($result)) {

358

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

Получилось вот так

if (count($aUnion) > 0) { $sql = '( ' . implode(' ) UNION ( ', $aUnion) . ' ) ';
} else if (count($aUnion) <= 0 && count($aSQL) <= 0) {$sql = '(
  
    SELECT * FROM `achilles`  GROUP BY model
  ) UNION (
    SELECT * FROM `amtel` GROUP BY model
  )';
} else if (count($Union) > 0 && count($aSQL) <= 0) {$sql = '(
  
    SELECT * FROM `achilles`  GROUP BY model
  ) UNION (
    SELECT * FROM `amtel` GROUP BY model
  )';

}
 else {
$sql = '(
  
    SELECT * FROM `achilles`  WHERE ' . implode('AND', $aSQL) . ' GROUP BY model
  ) UNION (
    SELECT * FROM `amtel`  WHERE ' . implode('AND', $aSQL) . 'GROUP BY model
  )';

И теперь здесь нужно последнее условие если список пуст а в чекбоксах чтото выбрано вывести все строки по тому что в чекбоксах ставлю ето условие но не действует

else if (count($Union) > 0 && count($aSQL) <= 0) {$sql = '(
  
    SELECT * FROM `achilles`  GROUP BY model
  ) UNION (
    SELECT * FROM `amtel` GROUP BY model
  )';

359

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

Может что посоветуете по паследнему условию?

360

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

Наверное так:
else if (count($Union) <= 0 && count($aSQL) > 0)

361

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

Нет так не вышло да и в етом запросе указано что пустой чекбокс а список не пустой а нужно наоборот но и наоборот тоже не действует.

Подскажите как понимать етот запросс с условием

if (count($aUnion) > 0) { $sql = '( ' . implode(' ) UNION ( ', $aUnion) . ' ) ';

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

362

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

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

363

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

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

Нет так не вышло да и в етом запросе указано что пустой чекбокс а список не пустой а нужно наоборот но и наоборот тоже не действует.

Если не работает, то покажите что выбрано на странице и что в этих переменных.
Массивы выводятся так:
print_r($aUnion);

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

если чекбокс больше ноля тоесть не пустой, а про список здесь ничего не сказано

Сказано выше в коде.
$aUnion[] = ' SELECT * FROM `' . $checkbox . '`  WHERE ' . implode('AND', $aSQL) . ' GROUP BY `model` ';

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

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

У вас есть галочки.
$aName = array('achilles','amtel','autoguard','gislaved','barum','bf_goodrich','falken','nokian','goodyear','hercules','lassa','daewoo',''
,'dunlop','kama','kingstar','kormaran','maragoni','maxtrek','pirelli','semperit','tigar','unirojal','viking','nokian','michelin');
// Собираем массив $aUnion.
foreach ($aName as $checkbox) {
    $aUnion[] = ' SELECT * FROM `' . $checkbox . '`  WHERE ' . implode('AND', $aSQL) . ' GROUP BY `model` ';
}

364 (изменено: павелsimon, 2012-04-26 20:58:47)

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

Да, все ето у меня написано в коде,

if (isset($_POST['nokian'])) {
  echo '<p>nokian <input type="checkbox" checked="checked" name="nokian" value="" onchange="this.form.submit();">';
} else {
  echo '<p>nokian <input type="checkbox" name="nokian" value="" onchange="this.form.submit();">';
}
if (isset($_POST['michelin'])) {
  echo '<p>michelin <input type="checkbox" checked="checked" name="michelin" value="" onchange="this.form.submit();">';
} else  {
  echo '<p>michelin <input type="checkbox"  name="michelin" value="" onchange="this.form.submit();">';
}
//echo '<p> bf_goodrich <input type="checkbox"  name="bf_goodrich" value="" onchange="this.form.submit();" '.Checked("bf_goodrich").'  >';
echo "</form>";
$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('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('achilles','amtel','autoguard','gislaved','barum','bf_goodrich','falken','nokian','goodyear','hercules','lassa','daewoo','dunlop','kama','kingstar','kormaran','maragoni','maxtrek','pirelli','rosava','semperit','tigar','unirojal','viking','nokian','michelin');
$aUnion = array();
foreach ($aName as $checkbox) {
  if (isset($_POST[$checkbox])) {
    $aUnion[] = ' SELECT * FROM `' . $checkbox . '`  WHERE ' . implode('AND', $aSQL) . ' GROUP BY `model` ';
  }
}
if (count($aUnion) > 0 ) { $sql = '( ' . implode(' ) UNION ( ', $aUnion) . ' ) ';
} else if (count($aUnion) > 0 ) {$sql = '(
  
    SELECT * FROM `achilles` GROUP BY model
  ) UNION (
    SELECT * FROM `amtel` GROUP BY model
  )
   UNION (
    SELECT * FROM `autoguard` GROUP BY model
  )
   UNION (
    SELECT * FROM `bf_goodrich`  GROUP BY model
  )';
} 



else if (count($aUnion) > 0 && count($aSQL) < 0 ) { // что сюда вписать чтоб при пустых списках и
// выбраных чекбоксах вывело все как при етом запросе (if (count($aUnion) > 0 ) { $sql = '( ' . implode(' ) UNION ( ', $aUnion) . ' ) ';)
// в нем все выводит как надо только строка размера выводится в зависимости от выбора в списке а нужно чтоб все вывелось
// чтоже нужно дописать для такого вывода?
   
  
  
}
 
 else {
$sql = '(
  
    SELECT * FROM `achilles`  WHERE ' . implode('AND', $aSQL) . ' GROUP BY model
  ) UNION (
    SELECT * FROM `amtel`  WHERE ' . implode('AND', $aSQL) . 'GROUP BY model
  )
   UNION (
    SELECT * FROM `autoguard`  WHERE ' . implode('AND', $aSQL) . 'GROUP BY model
  )
   UNION (
    SELECT * FROM `bf_goodrich`  WHERE ' . implode('AND', $aSQL) . 'GROUP BY model
  )';
   
}
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {

    print "<table width='900' border='1'>
      <tr>
        <td colspan='9'>  Шины " . $row["brand"] . " ...  Модель " . $row["model"] . "</td>
      </tr>
      <tr>
        <td colspan='2'>фото</td>
        <td colspan='7' rowspan='2'>текст</td>
      </tr>
      <tr>
        <td>" . $row["sezon"] . "</td>
        <td>" . $row["tip"] . "</td>
      </tr>
      <tr>
        <td  width='100'>Ширина</td>
        <td width='100'>Профиль</td>
        <td width='100'>Диаметр</td>
        <td width='150'>Инд.нагр</td>
        <td width='150'>Инд.скор</td>
        <td width='100'>Остаток</td>
        <td width='100'>Цена за 1</td>
        
        <td>Заказать</td>
      </tr>
      <tr>
      </tr>
    </table>" ;
    sub_func($row, $aSQL, $aName, $aUnion);
    print "<br><br>";
    }
   

?>

365

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('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]) . '" ';
}

Займитесь оформлением кода. Его невозможно прочесть в таком виде.

366

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

простите то просто опечатка, суть не в ней суть в етой части

if (count($aUnion) > 0 ) { $sql = '( ' . implode(' ) UNION ( ', $aUnion) . ' ) ';
} else if (count($aUnion) > 0 ) {$sql = '(
  
    SELECT * FROM `achilles` GROUP BY model
  ) UNION (
    SELECT * FROM `amtel` GROUP BY model
  )
   UNION (
    SELECT * FROM `autoguard` GROUP BY model
  )
   UNION (
    SELECT * FROM `bf_goodrich`  GROUP BY model
  )';
} 



else if (count($aUnion) > 0 && count($aSQL) < 0 ) { // что сюда вписать чтоб при пустых списках и
// выбраных чекбоксах вывело все как при етом запросе (if (count($aUnion) > 0 ) { $sql = '( ' . implode(' ) UNION ( ', $aUnion) . ' ) ';)
// в нем все выводит как надо только строка размера выводится в зависимости от выбора в списке а нужно чтоб все вывелось
// чтоже нужно дописать для такого вывода?
   
  
  
}
 
 else {
$sql = '(
  
    SELECT * FROM `achilles`  WHERE ' . implode('AND', $aSQL) . ' GROUP BY model
  ) UNION (
    SELECT * FROM `amtel`  WHERE ' . implode('AND', $aSQL) . 'GROUP BY model
  )
   UNION (
    SELECT * FROM `autoguard`  WHERE ' . implode('AND', $aSQL) . 'GROUP BY model
  )
   UNION (
    SELECT * FROM `bf_goodrich`  WHERE ' . implode('AND', $aSQL) . 'GROUP BY model
  )';
   
}

367

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

Внутри условия надо собрать новый массив:

if ...
} else if (count($aUnion) > 0 && count($aSQL) < 0 ) {

$aName = array('achilles','amtel','autoguard','gislaved','barum','bf_goodrich','falken','nokian','goodyear','hercules','lassa','daewoo','dunlop','kama','kingstar','kormaran','maragoni','maxtrek','pirelli','rosava','semperit','tigar','unirojal','viking','nokian','michelin');
$aIfUnion = array();
foreach ($aName as $checkbox) {
    $aIfUnion[] = ' SELECT * FROM `' . $checkbox . '` GROUP BY `model` ';
}
$sql = '( ' . implode(' ) UNION ( ', $aIfUnion ) . ' ) ';

} else ...

368

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

if (count($aUnion) > 0) { $sql = '( ' . implode(' ) UNION ( ', $aUnion) . ' ) ';
} else if ( count($aSQL) <= 0) {$sql = '(
  
    SELECT * FROM `achilles`  GROUP BY model
  ) UNION (
    SELECT * FROM `amtel` GROUP BY model
  )';


}
else if (count($aUnion) > 0 && count($aSQL) < 0 ) {

$aName = array('achilles','amtel','autoguard','gislaved','barum','bf_goodrich','falken','nokian','goodyear','hercules','lassa','daewoo','dunlop','kama','kingstar','kormaran','maragoni','maxtrek','pirelli','rosava','semperit','tigar','unirojal','viking','nokian','michelin');
$aIfUnion = array();
foreach ($aName as $checkbox) {
    $aIfUnion[] = ' SELECT * FROM `' . $checkbox . '` GROUP BY `model` ';
}
$sql = '( ' . implode(' ) UNION ( ', $aIfUnion ) . ' ) ';

}
 else {
$sql = '(
  
    SELECT * FROM `achilles`  WHERE ' . implode('AND', $aSQL) . ' GROUP BY model
  ) UNION (
    SELECT * FROM `amtel`  WHERE ' . implode('AND', $aSQL) . 'GROUP BY model
  )';
   
}

При выбраном чекбоксе и пустом списке таже ошибка

369

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

Дело даже не в новом масиве если убрать все условия и оставить только одно для выбраных чекбоксов и пустых списков всеравно не действует

370

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

Еще вопрос как сделать чтоб при первой загрузке страницы чекбокс

if (isset($_POST['goodyear'])) {
  echo '<p>goodyear <input type="checkbox" checked="checked" name="goodyear" value="" onchange="this.form.submit();">';
} else {
  echo '<p>goodyear <input type="checkbox" name="goodyear" value="" onchange="this.form.submit();">';

был уже нажат, но чтоб потом его и отжать можно былобы

371

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

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

был уже нажат, но чтоб потом его и отжать можно былобы

Для этого добавьте условие на отправку формы. Если форма отправлена нажатием кнопки, то будет заполнена глобальная переменная $_POST, например у списков.

Значит if (!isset($_POST['name'])) - страница загружена первый раз.

372

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

if (!isset($_POST['name'])) { echo '<p>achilles <input type="checkbox" checked="checked" name="achilles" value="" onchange="this.form.submit();">';
}else if (isset($_POST['achilles'])) {
  echo '<p>achilles <input type="checkbox"  name="achilles" value="" onchange="this.form.submit();">';
} else {
  echo '<p>achilles <input type="checkbox" name="achilles" value="" onchange="this.form.submit();">';
}

но теперь немогу отжать кнопку

373

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

Замените $_POST['name'] (дан для примера) на любой список или имя кнопки, но только не галочки.

if (isset($_POST['goodyear']) || !isset($_POST['name'])) {
  echo '<p>goodyear <input type="checkbox" checked="checked" name="goodyear" value="" onchange="this.form.submit();">';
} else {
  echo '<p>goodyear <input type="checkbox" name="goodyear" value="" onchange="this.form.submit();">';
}

374

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

if (isset($_POST['goodyear']) || !isset($_POST['nazv_auto'])) {
  echo '<p>goodyear <input type="checkbox" checked="checked" name="goodyear" value="" onchange="this.form.submit();">';
} else {
  echo '<p>goodyear <input type="checkbox" name="goodyear" value="" onchange="this.form.submit();">';
}

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

375

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

Думайте. Ищите решение.