Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Форма с расширенным поиском по критериям

Сообщения:  [1-10]   [11-13] 

 
 автор: ladan   (19.11.2011 в 04:23)   письмо автору
 
   для: cheops   (19.11.2011 в 03:31)
 

как просто оказывается, спасибо, еще одна проблема решена :)

  Ответить  
 
 автор: cheops   (19.11.2011 в 03:31)   письмо автору
 
   для: ladan   (19.11.2011 в 00:32)
 

При перезагрузке страницы галочки следует явно выставлять в зависимости от содержимого массива $_POST.

  Ответить  
 
 автор: ladan   (19.11.2011 в 00:32)   письмо автору
 
   для: ladan   (19.11.2011 в 00:29)
 

Вот только как галочки заставить быть отмечеными после отправки данных? После отправки данных они тут же слетают гады :)

  Ответить  
 
 автор: 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

Самая главная проблема решена!!! Классный форум, сам до этого бы сам не дошел :) Рек и уважуха :)

  Ответить  
 
 автор: cheops   (18.11.2011 в 19:28)   письмо автору
 
   для: 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'";
?>

  Ответить  
 
 автор: ladan   (18.11.2011 в 19:14)   письмо автору
 
   для: 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 Тут в моем примере вытаскиваются все картинки из таблички, в которых есть заданные значения из формы

  Ответить  
 
 автор: cheops   (18.11.2011 в 17:35)   письмо автору
 
   для: 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() - откуда она?

  Ответить  
 
 автор: Lotanaen   (18.11.2011 в 17:23)   письмо автору
 
   для: 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 в 17:17)   письмо автору
 
   для: 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:51)   письмо автору
 
   для: ladan   (18.11.2011 в 16:03)
 

Обалдеть, сделал как вы сказали, все работает, правда если что-то не выбрано, вылазиет ошибка что переменная не определена, но исправил это значком @ присвоив к массиву sql. Попробую усложнить задачу и напишу попозже :)

  Ответить  

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования