Re: Выпадающий список
print $sql;
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форум PHP-MyAdmin.RU → Работа с phpMyAdmin → Выпадающий список
Страницы Назад 1 … 18 19 20 21 22 … 41 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
print $sql;
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` = ""
Ошибка в вызове функции. Строка с данными должна передаваться в переменной $row.
sub_func($row, $aSQL, $aName);
Да я тоже так подумал,
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, или я не правильно читаю
если убрать вот ету строку
AND ' . implode('AND', $aSQL);
то выводятся строки из двух производителей под одной таблицей заглавления
Да мне долго доходит, ето какраз тот параметр что пустым передается отвечает за сортировку по брендам
нашел все нормально, ето моя невнимательность, дописал в строке подключения функции, $row получилось!
немогу написать групировку по модели выдает ошибку
if (count($aUnion) > 0 && count($aSQL) > 0) {
$sql = 'SELECT * FROM `proba`
WHERE `brand` IN("' . implode('","', $aUnion) . '")
AND ' . implode('AND', $aSQL)' GROUP BY model ' ;
}
что не так? по всякому перепробовал
решил ету проблему таким образом
$sql = 'SELECT DISTINCT brand, model,br,md
Написал все 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`
)
';
}
для нее тоже как и в том случяе с раздельными таблицами нужно масив писать? Сверху функции
Я скопировал масивы и вынес их над функцией листалки.
$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 условий с запросами в зависимости от того что выбрано в чекбоксах и всписках или ничего не выбрано
надеюсь я вам еще не надоел, и вы мне поможете с кодом листалки?
Один вопрос за раз. На последние вопросы я отвечать не буду. Учитесь общаться на форуме.
Ясно. С выводом и условиями все нормально. С листалкой нужна ваша помощь.
Я выше привел код где вынес масивы над функцией в каждый запрос я прицепил строки с 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.'
)
';
}
теперь незнаю как сформировать условия с запросом в функции листалке
Запрос должен иметь такой вид.
$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`';
Здравствуйте не получяется у меня подключить листалку. Не пойму где ошибка
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; // Начальная позиция, для запроса к БД
// Вызов функции, для вывода ссылок на экран
В запросе используется переменная $start_pos, которая формируется ниже в коде. Соответственно, в переменной $sql будет неправильный запрос.
Но перенос запроса ниже строки формирования переменных $start_pos и $perpag, недал результата.
Чтоже делать?
а в функции разьве не нужно условия прописывать если выбрано в списках то читать то, если выбрано только в чекбоксах то читать ето?
а в функции разьве не нужно условия прописывать если выбрано в списках то читать то, если выбрано только в чекбоксах то читать ето?
В какой функции?
Но перенос запроса ниже строки формирования переменных $start_pos и $perpag, недал результата.
Какого результата не дал? Переменные $start_pos и $perpag имеют значения?
НУ в етой же функции листалке вы написали как формируется запрос, я просто немогу понять как она будет считать строки если нигде не указано при каком условии и что считать? Там же для вывода данных из базы есть 4 условия и у каждого свой запрос. Я думал что для функции листалки должно быть также 4 условия с запросами. Или не так?
Я думал что для функции листалки должно быть также 4 условия с запросами. Или не так?
Разумеется, так и надо делать. Что вам мешает на первом примере так же и остальные сделать? Я не могу все четыре за вас писать.
Вот вроде написал. Посмотрите пожалуйста где у меня ошибка в граматике, сейчяс данные выводятся при 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.' ) ';
}
Почемуто выходит так что переменные $page, $pages_count передают 1 тоесть страниц всегда 1 хотя в базе гораздо больше.
Все исправил теперь новая проблема. Когда переходиш по ссылкам страниц, то происходит обнуление в чекбоксах и списках все стает пустым. Попробывал поставить метод GET вместо POST всюду в форме но при такой замене в списках так как и в чекбоксах ничего нельзя выбрать. Тоесть только чтото выбрал сразу происходит обнуление. Что можно здесь зделать?
Здравствуйе, подскажите пожалуйста. Пробую сформировать динамический вывод брендов из базы, сам вывод работает список строится но по ним нельзя нажать тоесть нажимаеш, а они сразуже отжимаются
<?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();' >";} }
?>
Страницы Назад 1 … 18 19 20 21 22 … 41 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум PHP-MyAdmin.RU → Работа с phpMyAdmin → Выпадающий список
Форум работает на PunBB, при поддержке Informer Technologies, Inc
Currently installed 7 official extensions. Copyright © 2003–2009 PunBB.