Autor Zpráva
Kukusak
Profil
Zdravím,
Mám:
<form name="doktorskej" method="post">
                  <select name="doktor">
                               <option selected="selected" name="vse">Všichni</option>
                               <option name="doc1">Doktor1</option>
                               <option name="doc2">Doktor2</option>
                               ...
                   </select>
                   <select name="rok">
                               <option selected="selected" name="vse">Všechny</option>
                               <option name="2012">2012</option>
                                ...
                    </select>
                               <input type="submit" value="Hledej...">
                               </form>
                              

a pak php: načtení z POSTu, připojení DB, ...
Chci, aby se vypsalo to co uživatel navolí. Tzn. např. pokud vybere Doktor1 a rok 2011, tak aby se vypsali jen zápisy s Doktor1 s rokem 2011 a když někdo zvolí/nechá zvolené Všechny/Všichni, tak aby se vypsali všechny. A když někdo zvolí Doktor1 a všechny roky, tak aby se vypsali všechny zápisy Doktora1...

Výpis funguje krásně, ale buď mi funguje všechno, kromě možnosti kdy se má zobrazit všechno a nebo právě se zobrazí, zase jen všechno. Googlím a hledám to celý vodpoledne, je to nějaká jednoduchá kravina a já si nevzpomenu, poraďte prosím....

Stačí klidně odkaz na nějakou dokument se stejnym případem, já nemohl najít ani to... :-(

Dík všem za radu
Tori
Profil
Ukažte, jak zpracováváte údaje z formu, konkrétně rozlišení mezi "vše" a ostatními hodnotami.
Chamurappi
Profil
Asi už jsem kokot - filtr dat z databáze....
Uprav si ten titulek na něco, co vystihuje podstatu dotazu, jinak budeš smazán.
Kukusak
Profil
Tori:
            $doc = $_POST['doc'];                                     
            $rok = $_POST['rok'];

A odlišení "vše" jsem zkoušel několikero...

        if ( !isset( $_POST["doc"] ))
        $_POST["doc"] = NULL;
        if ( !isset( $_POST["rok"] ))
        $_POST["rok"] = NULL;
- tady jsem ve formu umazal ty name pro "vse" a zkusil to uhrát na NULL


- pak jsem zkoušel všemožný podmínky, ale v tom jsem to vždycky zamotal, že to ukazovalo jen všechno, nebo nic...


Chamurappi:

Omlouvám se...
Tori
Profil
Kukusak:
Nedoporučuje se měnit data v $_POST/$_GET/... (s výjimkou ošetření zapnutých magic_quotes) - další části programu mohou očekávat nějakou hodnotu, kterou jim přemažete.

Poskládejte si podmínku WHERE do dotazu třeba takhle:
$where = '';
if (!empty($_POST['doc']) && $_POST['doc'] !== 'vse') {
  $where .= ' WHERE `doktor` = "'.mysql_real_escape_string($_POST['doc']).'"';
}
if (!empty($_POST['rok']) && $_POST['rok'] !== 'vse') {
  $where .= (!empty($where) ? ' AND ' : ' WHERE ');
  $where .= '`rok` = '.intval($_POST['rok']);
}

$sql = "SELECT * FROM tabulka $where";

Jinak v HTML máte u <option> hodnoty v atributu name, ale mají být ve value.

↓ Alphard: díky za odmražení vlákna :-)
Keeehi
Profil
$dotaz = "SELECT * FROM tabulka";

if($doc != "vše" || $rok !="vše")
    $dotaz .= " WHERE";

if($doc != "vše")
    $dotaz .= " doc='$doc'";

if($doc != "vše" && $rok !="vše")
    $dotaz .= " AND";

if($rok != "vše")
    $dotaz .= " rok='$rok'";

+ u optionů si name vyměňte za value
Alphard
Profil
[#5] Tori
Ano, nebudem to mazat. Čekal jsem na Chamurappiho, ale není tady.
Kukusak
Profil
Keeehi:
Děkuji, hezky to funguje, ale pokud vyberu doc a roky nechám vše, taky to nefunguje, ale to už zmáknu :-)
A s tim value jsem to asi nepochopil, protože když jsem to přepsal, tak to nešlo, vůbec nic se neodeslalo, tak jsem nechal i name i value stejný a je klid :-)
panther
Profil
Kukusak:
3. řádek má vypadat takto:
if($doc != "vše" || $rok !="vše")
Kukusak
Profil
Tori:
Děkuji, tvoje funguje na 100% trvalo dlouho, než jsem to pochopil, ale funguje to, děkuji mnohokrát :-)


panther:
if($doc != "vše" || $rok !="vše")

To sice dává smysl, ale nefunguje to :-)
Tori
Profil
Kukusak:
To sice dává smysl, ale nefunguje to
Keehi to napsal s diakritikou, ve formuláři máte bez. Taky se dá nastavit té možnosti prázdnou hodnotu a v PHP ověřovat pouze if (!empty($_POST['doc']))
Kukusak
Profil
Tori:
Keehi to napsal s diakritikou, ve formuláři máte bez

Tím to není, ale nevadí... Děkuji všem mnohokrát za užitečné řešení!!! :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0