|
|
|
|
|
для: cheops
(19.11.2011 в 03:31)
| | как просто оказывается, спасибо, еще одна проблема решена :) | |
|
|
|
|
|
|
|
для: ladan
(19.11.2011 в 00:32)
| | При перезагрузке страницы галочки следует явно выставлять в зависимости от содержимого массива $_POST. | |
|
|
|
|
|
|
|
для: ladan
(19.11.2011 в 00:29)
| | Вот только как галочки заставить быть отмечеными после отправки данных? После отправки данных они тут же слетают гады :) | |
|
|
|
|
|
|
|
для: cheops
(18.11.2011 в 19:28)
| | Ребята, спасибо за ответы, посидел еще три часа, в итоге вот какой код должен быть
<?
if(isset($_GET['blue'])) {$blue = $_GET['blue'];}
if(isset($_GET['green'])) {$green = $_GET['green'];}
if(isset($_GET['red'])) {$red = $_GET['red'];}
if(isset($_GET['black'])) {$black = $_GET['black'];}
if(isset($blue) or isset($red) or isset($green) or isset($black))
{
if (isset($blue))
{
$sql[] = "blue='$blue'";
}
if (isset($red))
{
$sql[] = "red='$red'";
}
if (isset($black))
{
$sql[] = "black='$black'";
}
if (isset($green))
{
$sql[] = "green='$green'";
}
$connect = mysql_connect("localhost","php","12345");
mysql_select_db("colorbd", $connect);
$result = mysql_query("SELECT img FROM colors WHERE ".implode(" AND ", $sql));
$myrow = mysql_fetch_array($result);
do
{
printf("<div style='border-bottom:2px solid #424242; width:200px; margin:0 auto;'><img src='%s'></div><br>\n", $myrow['img']);
}
while ($myrow = mysql_fetch_array($result));
}
else
{
echo "Ничего не выбрано";
}
?>
|
Доволен как краб :)) Можете посмотреть результат http://forma.anapa-kurort.net/index.php
Самая главная проблема решена!!! Классный форум, сам до этого бы сам не дошел :) Рек и уважуха :) | |
|
|
|
|
|
|
|
для: ladan
(18.11.2011 в 19:14)
| | Подразумевается, что у вас работает вот этот код
if(isset($_GET['blue'])) {$blue = $_GET['blue'];}
if(isset($_GET['green'])) {$green = $_GET['green'];}
if(isset($_GET['red'])) {$red = $_GET['red'];}
|
или можно напрямую писать
<?php
$sql = array();
// Динамически формируем массив $sql в зависимости
// от выбора пользователя
if(!empty($_GET['blue'])) $sql[] = "blue='$blue'";
if(!empty($_GET['green'])) $sql[] = "green='$green'";
if(!empty($_GET['red'])) $sql[] = "red='$red'";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(18.11.2011 в 17:35)
| | изучал php по урокам одного автора... они все одинаковые, просто я привык к do-while :)
Ваш код проверял, все равно результат один..
ошибку выходит(переменные неопределены), если отправлять незаполненую форму или полузаполненную
$sql = array();
// Динамически формируем массив $sql в зависимости
// от выбора пользователя
if(!isset($blue)) $sql[] = "blue='$blue'";
if(!isset($green)) $sql[] = "green='$green'";
if(!isset($red)) $sql[] = "red='$red'";
|
Пользователь выбирает что-то одно, а в массив попадает сразу все 3 значения и из базы пытается вытащить не по 1 значению, а сразу по всем...
пока не получается добиться того же самого как здесь http://forma.anapa-kurort.net/index.php (мой вариант)
Ну если другой пример привести, то мне нужно примерно следущее:
В базе есть 30 записей с авто и в каждой записи по 10 колонок(пробег, год авто, цвет, стоимость, кожаный салон, 4 двери и тд). И по нажатию галочки или галок нужно отсортировать или показать все автомобили, в которых есть эти значения.
Прописывая одни условия if(как в моем варианте), голову сломаешь :)
а если через implode(" AND ", $sql),все будет тип-топ, только если все переменые будут определены, иначе одни ошибки... Увидел у товарища Lotanaen следущее
if ($green)
$sql[] = "green='$green'";
if ($red)
$sql[] = "red='$red'";
if ($blue)
$sql[] = "blue='$blue'";
|
не знаете как с помощью условий if(isset($red/$blue/$green)) занести их в массив $sql = array(); ? Если существует переменная $blue=1, то заносим в $sql = array(); значение "blue='$blue'", а если нет, то ничего не делаем, как-то вот так.
может я не догоняю как правильно сделать :)
Посмотрите пожалуйста, вот что я хочу чтобы получилось http://forma.anapa-kurort.net/index.php Тут в моем примере вытаскиваются все картинки из таблички, в которых есть заданные значения из формы | |
|
|
|
|
|
|
|
для: ladan
(18.11.2011 в 17:17)
| | Нет-нет, не нужно убирать все if-блоки, пусть они останутся, но в меньшем количестве, сколько галок - столько и if-блоков. Я имею в виду следующую схему
<?php
...
$sql = array();
// Динамически формируем массив $sql в зависимости
// от выбора пользователя
if(!isset($blue)) $sql[] = "blue='$blue'";
if(!isset($green)) $sql[] = "green='$green'";
if(!isset($red)) $sql[] = "red='$red'";
// Если отмечена галка хотя бы одна галка
if(!empty($sql))
{
$connect = mysql_connect("localhost","php","12345");
mysql_select_db("colorbd", $connect);
$result = mysql_query("SELECT * FROM colors WHERE ".implode(" AND ", $sql));
if(!$result) echo "Ошибка выполнения SQL-запроса ".mysql_error();
if(mysql_num_rows($result))
{
while ($myrow = mysql_fetch_array($result));
{
printf("<div style='border-bottom:2px solid #424242; width:200px; margin:0 auto;'><img src='%s'></div><br>", $myrow['img']);
}
}
}
// Не отмечена ни одна галка
else
{
echo "А ничего не выбрано...";
}
...
?>
|
PS Кстати, не у вас одного я наблюдаю интересную привязанность к циклу do {...} while(), в ситуациях, когда лучше всего подходит while() - откуда она? | |
|
|
|
|
|
|
|
для: ladan
(18.11.2011 в 17:17)
| |
$sql = array("green='$green'", "red='$red'", "blue='$blue'");
if ($green)
$sql[] = "green='$green'";
if ($red)
$sql[] = "red='$red'";
if ($blue)
$sql[] = "blue='$blue'";
if(sizeof($sql)) {
$connect = mysql_connect("localhost","php","12345");
mysql_select_db("colorbd", $connect);
$result = mysql_query("SELECT * FROM colors WHERE ".implode(" AND ",@$sql));
$myrow = mysql_fetch_array($result);
do
{
printf("<div style='border-bottom:2px solid #424242; width:200px; margin:0 auto;'><img src='%s'></div><br>", $myrow['img']);
}
while ($myrow = mysql_fetch_array($result));
}
else
echo "not select";
|
| |
|
|
|
|
|
|
|
для: ladan
(18.11.2011 в 16:51)
| |
@$sql = array("green='$green'", "red='$red'", "blue='$blue'");
$connect = mysql_connect("localhost","php","12345");
mysql_select_db("colorbd", $connect);
$result = mysql_query("SELECT * FROM colors WHERE ".implode(" AND ",@$sql));
$myrow = mysql_fetch_array($result);
do
{
printf("<div style='border-bottom:2px solid #424242; width:200px; margin:0 auto;'><img src='%s'></div><br>", $myrow['img']);
}
while ($myrow = mysql_fetch_array($result));
|
Теперь по нажатию по галкам выводится только 1 запись из таблицы, либо синий, либо красный, либо зеленый, либо красно-зеленый и тд. Несколько вариантов больше не выводится( . Если я ставлю галку там где переменная $blue=1, то к базе идет обращение и вытаскивается поле с id равному 2, хотя по идеи мне нужно чтобы выводились все записи, где есть синий цвет, id=1, id=5 и id=6 не выводятся..(есть скрин таблицы, файл прикрепил)
Проблема бы решилась, если значения в массиве sql ставились бы автоматически при их выборе из формы :( Может я неправильно написал в коде... | |
|
|
|
|
|
|
|
для: ladan
(18.11.2011 в 16:03)
| | Обалдеть, сделал как вы сказали, все работает, правда если что-то не выбрано, вылазиет ошибка что переменная не определена, но исправил это значком @ присвоив к массиву sql. Попробую усложнить задачу и напишу попозже :) | |
|
|
|
|