Re: Выпадающий список
Попробуйте добавить еще одно условие.
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
$aSQL[] = ' `brand` = "' . $r['brand'] . '" ';
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форум PHP-MyAdmin.RU → Работа с phpMyAdmin → Выпадающий список
Страницы Назад 1 … 11 12 13 14 15 … 41 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Попробуйте добавить еще одно условие.
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
$aSQL[] = ' `brand` = "' . $r['brand'] . '" ';
добавил
function sub_func($r, $aSQL, $aName) {
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
$aSQL[] = ' `brand` = "' . $r['brand'] . '" ';
global $db;
$aSub = array();
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
foreach ($aName as $checkbox) {
if (isset($_POST[$checkbox])) {
$aSub[] = ' SELECT * FROM `' . $checkbox . '` WHERE ' . implode('AND', $aSQL);
}
}
if (count($aSub) > 0) {
$sql = '( ' . implode(' ) UNION ( ', $aSub) . ' ) GROUP BY `model` ';
} else {
}
ошибка
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
может выложить дамп базы, может легче будет разобраться?
Выведите запрос и попробуйте его в phpMyAdmin выполнить.
exit($sql);
Здесь уберите, GROUP BY `model` не работает с UNION, я ошибся.
$sql = '( ' . implode(' ) UNION ( ', $aSub) . ' ) GROUP BY `model` ';
Убрал вывелось все заглавия, а размеры не вывело
тоесть не цепляет функцию самую верхнюю
Вот убрал в двух запросах
<?php
function sub_func($r, $aSQL, $aName) {
global $db;
$aSub = array();
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
foreach ($aName as $checkbox) {
if (isset($_POST[$checkbox])) {
$aSub[] = ' SELECT * FROM `' . $checkbox . '` WHERE ' . implode('AND', $aSQL);
}
}
if (count($aSub) > 0) {
$sql = '( ' . implode(' ) UNION ( ', $aSub) . ' ) ';
} else {
}
if ($result = mysql_query($sql, $db)) {
while ($row = mysql_fetch_array($result)) {
if ($row["ostatok"] > 0) {
print "<table width='900' border='1'>
<tr>
<td width='100'>" . $row["shirina"] . "</td>
<td width='100'>" . $row["profil"] . "</td>
<td width='100'>" . $row["diametr"] . "</td>
<td width='100'>" . $row["indnag"] . "</td>
<td width='150'>" . $row["indskor"] . "</td>
<td width='150'>" . $row["ostatok"] . "</td>
<td width='100'>" . $row["model"] . "</td>
<td width='100'>hhh" . $row["id"] . "</td>
<td width='100'>" . ($row["ostatok"] * $row["cena"]) . "</td>
<td >mmm" . $r["md"] . "</a></td>
</tr>
</table>";
} else {
print '';
}
}
}
}
echo '<form method="post" action="">';
$auto = "<p>Ширина <select name='nazv_auto' size='1' selected='selected' onchange=\"this.form.submit();\" >;
<option value='' >Все</option>";
$query = mysql_query("SELECT * FROM auto ORDER BY id_auto DESC");
$result = mysql_fetch_array($query);
do
{
$auto .= "<option value='".$result['nazv_auto']."' "; /* то что передается */
if (!empty($_POST['nazv_auto']) && $_POST['nazv_auto'] == $result['nazv_auto']) {
$auto .= ' selected="selected"';
}
$auto .= ">".$result['nazv_auto']."</option>"; /* то что отобразится в списке */
}
while($result = mysql_fetch_array($query));
$auto.= "</select>";
echo $auto."";
{
$model = "<p>Профиль <select name='nazv_model' size='1'onchange=\"this.form.submit();\" >;
<option value=''>Все</option>";
$query = mysql_query("SELECT * FROM automodel
WHERE id_auto = '" . addslashes($_POST['nazv_auto']) . "' ORDER BY id_model "); /* здесь нужно принять номер названия тоесть id_auto */
$result = mysql_fetch_array($query);
do
{
$model .= "<option value='".$result['nazv_model']."'";
if (!empty($_POST['nazv_model']) && $_POST['nazv_model'] == $result['nazv_model']) {
$model .= ' selected="selected"';
}
$model .= ">".$result['nazv_model']."</option>";
}
while($result = mysql_fetch_array($query));
$model .= "</select>";
echo $model.""."";
}
{
$year = "<p>Диаметр <select nazv_year name='nazv_year' size='1' onchange=\"this.form.submit();\" >;
<option value=''>Все</option>";
$query = mysql_query("SELECT nazv_year FROM year
WHERE id_model='" . addslashes($_POST['nazv_model']) . "' and id_year='" . addslashes($_POST['nazv_auto']) . "' ORDER BY id_year ");
$result = mysql_fetch_array($query);
do
{
$year .= "<option value='".$result['nazv_year']."'";
if (!empty($_POST['nazv_year']) && $_POST['nazv_year'] == $result['nazv_year']) {
$year .= ' selected="selected"';
}
$year .= ">".$result['nazv_year']."</option>";
}
while($result = mysql_fetch_array($query));
$year .= "</select>";
echo $year.""."";
$sezon = "<p>Сезонность <select name='nazv_sezon' size='1' onchange=\"this.form.submit();\" >;
<option value=''>Все</option>";
$query = mysql_query("SELECT nazv_sezon FROM sezon ");
$result = mysql_fetch_array($query);
do
{
$sezon .= "<option value='".$result['nazv_sezon']."'";
if (!empty($_POST['nazv_sezon']) && $_POST['nazv_sezon'] == $result['nazv_sezon']) {
$sezon .= ' selected="selected"';
}
$sezon .= ">".$result['nazv_sezon']."</option>";
}
while($result = mysql_fetch_array($query));
$sezon .= "</select>";
echo $sezon.""."";
}
{
}
if (isset($_POST['achilles'])) {
echo '<p> ТАБЛИЦА 1 <input type="checkbox" checked="checked" name="achilles" value="" >';
} else {
echo '<p> ТАБЛИЦА 1 <input type="checkbox" name="achilles" value="" >';
}
if (isset($_POST['amtel'])) {
echo '<p> amtel <input type="checkbox" checked="checked" name="amtel" value="" >';
} else {
echo '<p> amtel <input type="checkbox" name="amtel" value="" >';
}
if (isset($_POST['autoguard'])) {
echo '<p> таблица 3 <input type="checkbox" checked="checked" name="autoguard" value="" >';
} else {
echo '<p> таблица 3 <input type="checkbox" name="autoguard" value="" >';
}
if (isset($_POST['gislaved'])) {
echo '<p> gislaved<input type="checkbox" checked="checked" name="gislaved" value="" >';
} else {
echo '<p> gislaved 3 <input type="checkbox" name="gislaved" value="" >';
}
/* echo ' <input type="submit" name="button" value="Поехали">'; */
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('achilles','amtel','autoguard','gislaved','barum');
$aUnion = array();
foreach ($aName as $checkbox) {
if (isset($_POST[$checkbox])) {
$aUnion[] = ' SELECT * FROM `' . $checkbox . '` WHERE ' . implode('AND', $aSQL);
}
}
if (count($aUnion) > 0) {
$sql = '( ' . implode(' ) UNION ( ', $aUnion) . ' )';
} else {
$sql = 'SELECT * FROM `barum` GROUP BY `model`';
}
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
printf("<table width='900' border='1'>
<tr>
<td colspan='9'> Шины %s ... Модель %s</td>
</tr>
<tr>
<td colspan='2'>фото</td>
<td colspan='7' rowspan='2'>текст</td>
</tr>
<tr>
<td>%s</td>
<td>md=%s</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'></td>
<td width='100'></td>
<td>%s1119999</td>
</tr>
</table>",$row["brand"], $row["model"], $row["sezon"], $row["md"] , $row["md"]);
sub_func($row, $aSQL, $aName, $aUnion);
echo ('<br>');
}
?>
но теперь выводит тоже что и тогда в одно заглавие строки из разных таблиц
Вот оно добавил ваше условие
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
$aSQL[] = ' `brand` = "' . $r['brand'] . '" ';
теперь выводит нормально, спасибо!!!
Опять не то если убрать
GROUP BY `model`
то будут выводится дубликаты
function sub_func($r, $aSQL, $aName) {
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
$aSQL[] = ' `brand` = "' . $r['brand'] . '" ';
global $db;
$aSub = array();
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
foreach ($aName as $checkbox) {
if (isset($_POST[$checkbox])) {
$aSub[] = ' SELECT * FROM `' . $checkbox . '` WHERE ' . implode('AND', $aSQL);
}
}
if (count($aSub) > 0) {
$sql = '( ' . implode(' ) UNION ( ', $aSub) . ' ) ';
} else {
}
А другим способом убрать дубликаты возможно?
Добавьте здесь:
$aSub[] = ' SELECT * FROM `' . $checkbox . '` WHERE ' . implode('AND', $aSQL) . ' GROUP BY `model` ';
И обратите внимание, что дублируется строка:
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
Выводится без дубликатов теперь еще в етом запросе нужно удалить дубликаты
if (count($aUnion) > 0) {
$sql = '( ' . implode(' ) UNION ( ', $aUnion) . ' ) ';
а строку
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
не нужно дублировать?
Пробуйте заменить эту строку.
$aUnion[] = ' SELECT * FROM `' . $checkbox . '` WHERE ' . implode('AND', $aSQL);
На эту:
$aUnion[] = ' SELECT * FROM `' . $checkbox . '` WHERE ' . implode('AND', $aSQL) . ' GROUP BY `model` ';
в таком случяэ из одной модели с одинаковыми строчками размера выводится только одна строчка
какша какаято, какже с етими запросами разобраться?
в таком случяэ из одной модели с одинаковыми строчками размера выводится только одна строчка
Я не понимаю без примера.
Вродебы разобрался. Подскажите пожалуйста еще такое как правильно написать запрос если не выбрана ниодна галочка мне нужно чтоб выводились все даблицы?
<?php
function sub_func($r, $aSQL, $aName) {
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
$aSQL[] = ' `brand` = "' . $r['brand'] . '" ';
global $db;
$aSub = array();
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
foreach ($aName as $checkbox) {
if (isset($_POST[$checkbox])) {
$aSub[] = ' SELECT * FROM `' . $checkbox . '` WHERE ' . implode('AND', $aSQL) ;
}
}
if (count($aSub) > 0) {
$sql = '( ' . implode(' ) UNION ( ', $aSub) . ' ) ';
} else {
}
if ($result = mysql_query($sql, $db)) {
while ($row = mysql_fetch_array($result)) {
if ($row["ostatok"] > 0) {
print "<table width='900' border='1'>
<tr>
<td width='100'>" . $row["shirina"] . "</td>
<td width='100'>" . $row["profil"] . "</td>
<td width='100'>" . $row["diametr"] . "</td>
<td width='100'>" . $row["indnag"] . "</td>
<td width='150'>" . $row["indskor"] . "</td>
<td width='150'>" . $row["ostatok"] . "</td>
<td width='100'>" . $row["model"] . "</td>
<td width='100'>hhh" . $row["id"] . "</td>
<td width='100'>" . ($row["ostatok"] * $row["cena"]) . "</td>
<td >mmm" . $r["md"] . "</a></td>
</tr>
</table>";
} else {
print '';
}
}
}
}
echo '<form method="post" action="">';
$auto = "<p>Ширина <select name='nazv_auto' size='1' selected='selected' onchange=\"this.form.submit();\" >;
<option value='' >Все</option>";
$query = mysql_query("SELECT * FROM auto ORDER BY id_auto DESC");
$result = mysql_fetch_array($query);
do
{
$auto .= "<option value='".$result['nazv_auto']."' "; /* то что передается */
if (!empty($_POST['nazv_auto']) && $_POST['nazv_auto'] == $result['nazv_auto']) {
$auto .= ' selected="selected"';
}
$auto .= ">".$result['nazv_auto']."</option>"; /* то что отобразится в списке */
}
while($result = mysql_fetch_array($query));
$auto.= "</select>";
echo $auto."";
{
$model = "<p>Профиль <select name='nazv_model' size='1'onchange=\"this.form.submit();\" >;
<option value=''>Все</option>";
$query = mysql_query("SELECT * FROM automodel
WHERE id_auto = '" . addslashes($_POST['nazv_auto']) . "' ORDER BY id_model "); /* здесь нужно принять номер названия тоесть id_auto */
$result = mysql_fetch_array($query);
do
{
$model .= "<option value='".$result['nazv_model']."'";
if (!empty($_POST['nazv_model']) && $_POST['nazv_model'] == $result['nazv_model']) {
$model .= ' selected="selected"';
}
$model .= ">".$result['nazv_model']."</option>";
}
while($result = mysql_fetch_array($query));
$model .= "</select>";
echo $model.""."";
}
{
$year = "<p>Диаметр <select nazv_year name='nazv_year' size='1' onchange=\"this.form.submit();\" >;
<option value=''>Все</option>";
$query = mysql_query("SELECT nazv_year FROM year
WHERE id_model='" . addslashes($_POST['nazv_model']) . "' and id_year='" . addslashes($_POST['nazv_auto']) . "' ORDER BY id_year ");
$result = mysql_fetch_array($query);
do
{
$year .= "<option value='".$result['nazv_year']."'";
if (!empty($_POST['nazv_year']) && $_POST['nazv_year'] == $result['nazv_year']) {
$year .= ' selected="selected"';
}
$year .= ">".$result['nazv_year']."</option>";
}
while($result = mysql_fetch_array($query));
$year .= "</select>";
echo $year.""."";
$sezon = "<p>Сезонность <select name='nazv_sezon' size='1' onchange=\"this.form.submit();\" >;
<option value=''>Все</option>";
$query = mysql_query("SELECT nazv_sezon FROM sezon ");
$result = mysql_fetch_array($query);
do
{
$sezon .= "<option value='".$result['nazv_sezon']."'";
if (!empty($_POST['nazv_sezon']) && $_POST['nazv_sezon'] == $result['nazv_sezon']) {
$sezon .= ' selected="selected"';
}
$sezon .= ">".$result['nazv_sezon']."</option>";
}
while($result = mysql_fetch_array($query));
$sezon .= "</select>";
echo $sezon.""."";
}
{
}
if (isset($_POST['achilles'])) {
echo '<p>achilles<input type="checkbox" checked="checked" name="achilles" value="" >';
} else {
echo '<p>achilles<input type="checkbox" name="achilles" value="" >';
}
if (isset($_POST['amtel'])) {
echo '<p> amtel <input type="checkbox" checked="checked" name="amtel" value="" >';
} else {
echo '<p> amtel <input type="checkbox" name="amtel" value="" >';
}
if (isset($_POST['autoguard'])) {
echo '<p>autoguard<input type="checkbox" checked="checked" name="autoguard" value="" >';
} else {
echo '<p>autoguard<input type="checkbox" name="autoguard" value="" >';
}
if (isset($_POST['gislaved'])) {
echo '<p> gislaved<input type="checkbox" checked="checked" name="gislaved" value="" >';
} else {
echo '<p> gislaved<input type="checkbox" name="gislaved" value="" >';
}
if (isset($_POST['barum'])) {
echo '<p> barum<input type="checkbox" checked="checked" name="barum" value="" >';
} else {
echo '<p>barum<input type="checkbox" name="barum" value="" >';
}if (isset($_POST['bf_goodrich'])) {
echo '<p>bf_goodrich<input type="checkbox" checked="checked" name="bf_goodrich" value="" >';
} else {
echo '<p>bf_goodrich<input type="checkbox" name="bf_goodrich" value="" >';
}if (isset($_POST['goodyear'])) {
echo '<p>goodyear<input type="checkbox" checked="checked" name="goodyear" value="" >';
} else {
echo '<p>goodyear<input type="checkbox" name="goodyear" value="" >';
}if (isset($_POST['nokian'])) {
echo '<p>nokian<input type="checkbox" checked="checked" name="nokian" value="" >';
} else {
echo '<p>nokian<input type="checkbox" name="nokian" value="" >';
}if (isset($_POST['gislaved'])) {
echo '<p>falken<input type="checkbox" checked="checked" name="falken" value="" >';
} else {
echo '<p>falken<input type="checkbox" name="falken" value="" >';
}
if (isset($_POST['hercules'])) {
echo '<p>hercules<input type="checkbox" checked="checked" name="hercules" value="" >';
} else {
echo '<p>hercules<input type="checkbox" name="hercules" value="" >';
}
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('achilles','amtel','autoguard','gislaved','barum','bf_goodrich','falken','nokian','goodyear','hercules');
$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 {
$sql = 'SELECT * FROM `barum` GROUP BY `model`';
}
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
printf("<table width='900' border='1'>
<tr>
<td colspan='9'> Шины %s ... Модель %s</td>
</tr>
<tr>
<td colspan='2'>фото</td>
<td colspan='7' rowspan='2'>текст</td>
</tr>
<tr>
<td>%s</td>
<td>md=%s</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'></td>
<td width='100'></td>
<td>%s1119999</td>
</tr>
</table>",$row["brand"], $row["model"], $row["sezon"], $row["md"] , $row["md"]);
sub_func($row, $aSQL, $aName, $aUnion);
echo ('<br>');
}
?>
сейчяс если не выбрана ниодна галочка выводит ошибку
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\autoshina\index2.php on line 217
ТОесть где мне прописать такое условие если не выбран ниодин чекбокс и ничего из выпадающих списков то пусть выводится все таблицы из бази?
if (count($aSub) > 0) {
$sql = '( ' . implode(' ) UNION ( ', $aSub) . ' ) ';
} else {
// Здесь
}
Да я понял что там, я сам синтаксис не напишу там ведь не только через юниан вы мне напишите 2 таблицы через юнион если можно чтоб я увидел как пишется правильно
Даже наверное не так нужно начинать, ведь у меня в выпадающих списках кроме цифр по которым формируется зпрос есть параметр (ВСЕ), и под него тоже нужно условие
1. условие если в чекбоксах ничего не нажато и в списках ничего не выбрано то выводить все слитые таблицы
2. условие если выбраны один или несколько чекбоксов и в списках выбран параметр (Все) то соответственно выводить по тем таблица что выбраны все параметры.
Сейчяс у меня получяется вывести по тем таблицам что выбраны лиш по цыфрам в выпадающих списках
Как такие условия написать?
Доброе утро пробую написать запос, если не выбран ниодин из чекбоксов то выводить все записи из таблиц. Но выдает ошибку
function sub_func($r, $aSQL, $aName) {
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
$aSQL[] = ' `brand` = "' . $r['brand'] . '" ';
global $db;
$aSub = array();
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
foreach ($aName as $checkbox) {
if (isset($_POST[$checkbox])) {
$aSub[] = ' SELECT * FROM `' . $checkbox . '` WHERE ' . implode('AND', $aSQL) ;
}
}
if (count($aSub) > 0) {
$sql = '( ' . implode(' ) UNION ( ', $aSub) . ' ) ';
} else {
$sql = '(
SELECT * FROM `bf_goodrich` WHERE ' . implode('AND', $aSQL) . '
) UNION (
SELECT * FROM `barum` WHERE ' . implode('AND', $aSQL) . '
)';
}
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
Где у меня ошибка?
Где у меня ошибка?
Я не вижу ошибки.
if (count($aSub) > 0) {
$sql = '( ' . implode(' ) UNION ( ', $aSub) . ' ) ';
} else {
$sql = '(
SELECT * FROM `bf_goodrich` WHERE ' . implode('AND', $aSQL) . '
) UNION (
SELECT * FROM `barum` WHERE ' . implode('AND', $aSQL) . '
)';
}
при таком условии если есть хотябы одна кнопка нажата, то выводить то что было выбрано в списках плюс из того какая кнопка нажата. А ниже условие я неверно наверное записал, потому как хочу чтоб если не выбрана ниодна кнопка то выводить все записи из этих двух таблиц
Попробуйте так.
$sql = '(
SELECT * FROM `bf_goodrich` WHERE `md` = "' . $r['md'] . '"
) UNION (
SELECT * FROM `barum` WHERE `md` = "' . $r['md'] . '"
)';
если ничего не выбрано в чекбоксах и выбрано или не выбрано в списках то при
function sub_func($r, $aSQL, $aName) {
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
$aSQL[] = ' `brand` = "' . $r['brand'] . '" ';
global $db;
$aSub = array();
$aSQL[] = ' `md` = "' . $r['md'] . '" ';
foreach ($aName as $checkbox) {
if (isset($_POST[$checkbox])) {
$aSub[] = ' SELECT * FROM `' . $checkbox . '` WHERE ' . implode('AND', $aSQL) ;
}
}
if (count($aSub) > 0) {
$sql = '( ' . implode(' ) UNION ( ', $aSub) . ' ) ';
} else {
$sql = '(
SELECT * FROM `bf_goodrich` WHERE `md` = "' . $r['md'] . '"
) UNION (
SELECT * FROM `barum` WHERE `md` = "' . $r['md'] . '"
)';
}
Вывелась одна таблица оглавления без данных и без строк под нею
Страницы Назад 1 … 11 12 13 14 15 … 41 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум PHP-MyAdmin.RU → Работа с phpMyAdmin → Выпадающий список
Форум работает на PunBB, при поддержке Informer Technologies, Inc
Currently installed 7 official extensions. Copyright © 2003–2009 PunBB.