Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Filtr ... wyszukiwanie w jednej tabeli ...
Luke
post 14.11.2003, 15:06:39
Post #1





Grupa: Przyjaciele php.pl
Postów: 215
Pomógł: 0
Dołączył: 28.10.2003
Skąd: -

Ostrzeżenie: (0%)
-----


Witam,

Stanąłem przed zadaniem napisania „filtru” danych wyciąganych za bazy (z jednej tabeli)

Formularz html:

[xml:1:ce3217184d]
<select name="metoda" class="mainText" id="metoda">
<option value="none">-- wybierz --</option>
<option value="kolumna1"> kolumna1</option>
<option value=" kolumna2"> kolumna2</option>
.
.
.
<option value=" kolumnaN"> kolumnaN</option>
[/xml:1:ce3217184d]

oraz

[xml:1:ce3217184d]
<input name="wyrazenie" type="text" class="textField" id="wyrazenie" size="25">[/xml:1:ce3217184d]

Wybieramy metodę szukania (odpowiednik kolumny w bazie) oraz wyrażenie.

[sql:1:ce3217184d]
SELECT * FROM table_main WHERE ".$_POST['metoda']." LIKE '%".$_POST['wyrazenie']."%'[/sql:1:ce3217184d]

Problem:

Powielamy kod html 3 razy (docelowo N razy) i otrzymujemy cos w rodzaju prostego filtru.

Problem sprowadza się do napisania możliwie efektywnego kodu php. Najprostsza metoda to rozpisanie tego na wszystkie możliwe warunki, jednak przy większej ilości „metod” i
„wyrażeń” stanowi to problem.

Dla 1
[php:1:ce3217184d]<?php
if($_POST['metoda'] && $_POST['wyrazenie'] ) {
$results = $db->GetAll("SELECT * FROM hotels_main WHERE ".$_POST['metoda']." LIKE '%".$_POST['wyrazenie']."%'");
}


?>[/php:1:ce3217184d]

Dla 2

[php:1:ce3217184d]<?php

if($_POST['metoda'] && $_POST['wyrazenie'] && $_POST['metoda1'] && $_POST['wyrazenie1']) {
$results = $db->GetAll("SELECT * FROM table_main WHERE ".$_POST['metoda']." LIKE '%".$_POST['wyrazenie']."%' AND ".$_POST['metoda1']." LIKE '%".$_POST['wyrazenie1']."%'");
}


?>[/php:1:ce3217184d]

itd.

Bardzo proszę o pomoc w rozwiązaniu tego problemu.
Z góry dziękuję.
Go to the top of the page
+Quote Post
Luke
post 16.11.2003, 15:28:33
Post #2





Grupa: Przyjaciele php.pl
Postów: 215
Pomógł: 0
Dołączył: 28.10.2003
Skąd: -

Ostrzeżenie: (0%)
-----


Kod został napisany przez Seth`a za co bardzo mu dziękuję.

A oto rozwiązanie problemu:

[php:1:037b81458c]<?php

$i = 0;
$j = 0;
$warunek = "";
foreach($_POST['metoda'] as $tmp)
{
if(!empty($_POST['metoda'][$i]) && !empty($_POST['wyrazenie'][$i]))
{
if($j != 0)
{
$warunek .= "AND ";
}

$warunek .= " ".$_POST['metoda'][$i]." LIKE '%".$_POST['wyrazenie'][$i]."%' ";
$j++;
}
$i++;
}
$results = $db->GetAll("SELECT * FROM main WHERE ".$warunek);

?>[/php:1:037b81458c]

enjoy
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 10.07.2025 - 10:05