Autor Zpráva
Stig001
Profil
Zdravím všechny, potřeboval bych poradit s tímto skriptem, s php nějaké malé zkušenosti mám, ale preferuji nějakou jednoduchou praktickou ukázku, protože tak si uvědomím co a jak. Problém je takový: Potřeboval bych na webu formulář, do kterého když napíšu slovo, tak aby se vykonala funkce include, ovšem slov bude několik, takže např. když napíšu "auto" vykoná se funkce include auto.php, když napíšu "škoda fabia" vykoná se funkce include skoda_fabia.php atd. Prozatím jsem tento způsob používal s formulářem, kde byly zaškrtávací tlačítka, nyní to potřebuji lehce inovovat. Doposud jsem pracoval s kódem:
<form method="post" action="?">

<table>
<tr>
<td class="rally-galerie-a"><input type="checkbox" name="vazka1">Šídélko větší</td>
<td class="rally-galerie-a"><input type="checkbox" name="vazka2">Šídélko malé</td>
<td class="rally-galerie-a"><input type="checkbox" name="vazka3">Šídélko brvonohé</td>
</tr>
 </table>                          <br>
<input type="submit" value="Zobrazit">
</form>

<?php


if (isset($_POST['vazka1'])) {
include 'vazky/sidelko_vetsi.html';
}

if (isset($_POST['vazka2'])) {
include 'vazky/sidelko_male.html';
}

if (isset($_POST['vazka3'])) {
include 'vazky/sidelko_brvonohe.html';
}

?>
a ještě se může stát, že někdo napíše nějaké slovo, které tam nebude "nadefinované" tak bych chtěl, aby to vypsalo nějakou hlášku Např. Nepřípustná kombinace slov atd.
Setkal se s tím někdo někde ? nebo ví jak jednoduše ten můj kód upravit ???
Díky moc všem
scheras
Profil *
Vlastně obdobně. Ale není to příliš elegantní řešení.
<form method="post" action="">
<input type="text" name="page" value="Zadejte výraz..."> <br>
<input type="submit" value="Zobrazit">
</form>
 
<?php
 if ($_POST['page']) {
         if ($_POST['page'] == 'auto') {
                 include 'auto.php';
         }
         elseif ($_POST['page'] == 'škoda fabia') {
                 include 'skoda_fabia.php';
         }
         elseif ($_POST['page'] == 'dalsi definovany') {
                 include 'dalsi.php';
         }
         else {
                 include 'nedefinovano.php';
         }
 }
 else {
         include 'uvod.php';
 }
Stig001
Profil
Výborně, děkuji moc, už jsem to vyzkoušel a funguje :-) .... jinak ještě by mně zajímalo, jestli by šlo jednoduše nějak udělat, aby formulář nerozlišoval velká a malá písmena, protože když napíšu "AUTO" tak to "nebere" .....
Předem díky, pokud to někdo bude vědět, je-li to vůbec možné.
abc
Profil
strtolower
Lorin
Profil *
Ten kód by šel, jednodušit tak, že by se před porovnáním odstranila interpunkce, mezery se nahradily za podtržítko a pak jen pomocí file_exists() testovat, zda soubo existuje. Vyhnul by se časem boptnající podmínce.
scheras
Profil *
Lorin:
To jsem naznačoval tím „Ale není to příliš elegantní řešení.“. Tvoje řešení by ještě bylo potřeba rozšířit o základní bezpečnost, jinak je to pochopitelně mnohem lepší.
Stig001
Profil
Tak už jsem to zkusil s tou funkcí strtlower, zde mám kod a funguje, pokud by někdo našel v něm nějakou chybu, která se týká toho php skriptu, tak mi písněte prosím:

<?php

           $pr=$_POST["page"];
           $pr = strtoupper ( $pr );

 if ($pr) {
         if ($pr == 'PASKOVANA') {
                 include 'vazky/sidlatka_paskovana.html';
         }
         elseif ($pr == 'TMAVA') {
                 include 'vazky/sidlatka_tmava.html';
         }
         elseif ($pr == 'HNEDA') {
                 include 'vazky/sidlatka_hneda.html';
         }
         else {
                 include 'vazky/sidlo_pestre.html';
         }
 }
 else {
         include 'vazky/sidlo_kralovske.html';
 }
 
zvolil jsem si proměnnou pr, kterou jsem upravil pomocí té funkce do náležitého tvaru.
Na závěr mám ještě poslední dotaz: jak je v těch uvozovkách: "HNEDA" atd. , tak to jsou slova, podle kterých se ten skript "chytne" a chci se zeptat, jestli by nešlo nějak jednoduše tam těch slov dát více (šlo by to zřejmě další podmínkou, ale nechci to zbytečně komplikovat) , zkoušel jsem tam dát čárku, mezeru, tečku atd. a nic nešlo, tak nevím, jestli je to vůbec možné. Díky
scheras
Profil *
Stig001:
Na závěr mám ještě poslední dotaz: jak je v těch uvozovkách: "HNEDA" atd. , tak to jsou slova, podle kterých se ten skript "chytne" a chci se zeptat, jestli by nešlo nějak jednoduše tam těch slov dát více (šlo by to zřejmě další podmínkou, ale nechci to zbytečně komplikovat) , zkoušel jsem tam dát čárku, mezeru, tečku atd. a nic nešlo, tak nevím, jestli je to vůbec možné. Díky

Jde to takto:
 elseif ($pr == 'HNEDA' || $pr == 'dalsipodminka') {
                 include 'vazky/sidlatka_hneda.html';
         }
Stig001
Profil
Super, díky moc


Ještě jsem narazil na drobnou nevýhodu při zkouškách skriptu a to: Při zadávání textu mi to "našeptává" ty hodnoty, které jsem tam již "v minulosti" zadal, byť byly nesprávné, takže bych se toho "našeptávače" potřeboval zbavit. Nikde jsem to na google nenašel, rep. nevím, pod čím to hledat. Takže kdyby ještě tohle někdo věděl, byl bych moc rád. Díky
Rfilip
Profil
To je funkce prohlížeče (automatické vyplňování formulářů), paměť této funkce se dá vymazat jen pro celý prohlížeč( tedy na všech stránkách).
Např v chromu na této "adrese": chrome://settings/clearBrowserData konkrétně položka "Vymazat uložené údaje Automatického vyplňování formulářů"
jenikkozak
Profil
Stig001:
Pokud chceš našeptávač vypnout všem uživatelům, použij atribut autocomplete=off.
Stig001
Profil
Díky moc už to funguje, dokonce i v kombinaci s našeptávačem s datalistem, což chci . Jen by mně zajímala úplně poslední věc a to je interpunkce, zjistil jsem, že na slova, která mají háček nebo čárku se to nechytá => Nepozná např. "á" atd. , dá se ještě tohle nějak "ošetřit" ???
lorin
Profil
Co hledat?
Stig001
Profil
Zkusil jsem to podle toho vzoru, ale moc s php zkušenosti nemám a nějak mi to nejde. Někde je tam chyba, použil jsem to prozatím jen u té první podmínky:
<?php

           $pr=$_POST["page"];
           $pr = strtoupper ( $pr );
            setlocale(LC_ALL, 'czech');
 if ($pr) {
         if (iconv("utf-8", "us-ascii//TRANSLIT", $pr) == 'PÁSKOVANÁ') {
                 include 'vazky/sidlatka_paskovana.html';
         }
         elseif ($pr == 'TMAVA') {
                 include 'vazky/sidlatka_tmava.html';
         }
         elseif ($pr == 'HNEDA') {
                 include 'vazky/sidlatka_hneda.html';
         }
         elseif ($pr == 'VELKA') {
                 include 'vazky/sidlatka_velka.html';
         }
         else {
                 include 'chybna_hlaska.php';
         }
 }
 else {
         include 'vazky/sidlo_kralovske.html';
 }

?>
Stig001
Profil
Ještě jsem zkusil něco jiného, ale nejde mi to také :-( Řekl bych, že chyba bude jen někde v nějakém znaku případně proměnné ...
<?php

           $pr=$_POST["page"];
           $pr = strtoupper ( $pr );

 function cs_utf2ascii($pr)
{
    static $p = array("\xc3\xa1"=>"a","\xc3\xa4"=>"a","\xc4\x8d"=>"c","\xc4\x8f"=>"d","\xc3\xa9"=>"e","\xc4\x9b"=>"e","\xc3\xad"=>"i","\xc4\xbe"=>"l","\xc4\xba"=>"l","\xc5\x88"=>"n","\xc3\xb3"=>"o","\xc3\xb6"=>"o","\xc5\x91"=>"o","\xc3\xb4"=>"o","\xc5\x99"=>"r","\xc5\x95"=>"r","\xc5\xa1"=>"s","\xc5\xa5"=>"t","\xc3\xba"=>"u","\xc5\xaf"=>"u","\xc3\xbc"=>"u","\xc5\xb1"=>"u","\xc3\xbd"=>"y","\xc5\xbe"=>"z","\xc3\x81"=>"A","\xc3\x84"=>"A","\xc4\x8c"=>"C","\xc4\x8e"=>"D","\xc3\x89"=>"E","\xc4\x9a"=>"E","\xc3\x8d"=>"I","\xc4\xbd"=>"L","\xc4\xb9"=>"L","\xc5\x87"=>"N","\xc3\x93"=>"O","\xc3\x96"=>"O","\xc5\x90"=>"O","\xc3\x94"=>"O","\xc5\x98"=>"R","\xc5\x94"=>"R","\xc5\xa0"=>"S","\xc5\xa4"=>"T","\xc3\x9a"=>"U","\xc5\xae"=>"U","\xc3\x9c"=>"U","\xc5\xb0"=>"U","\xc3\x9d"=>"Y","\xc5\xbd"=>"Z");
    return strtr($pr, $p);
}

 if ($pr) {
         if ($pr == 'PÁSKOVANÁ') {
                 include 'vazky/sidlatka_paskovana.html';
         }
         elseif ($pr == 'TMAVA') {
                 include 'vazky/sidlatka_tmava.html';
         }
         elseif ($pr == 'HNEDA') {
                 include 'vazky/sidlatka_hneda.html';
         }
         elseif ($pr == 'VELKA') {
                 include 'vazky/sidlatka_velka.html';
         }
         else {
                 include 'chybova_hlaska.php';
         }
 }
 else {
         include 'vazky/sidlo_kralovske.html';
 }

?>
tento kod jsem našel zde: http://knowhow.davidgrudl.com/php/charsets/charset2ascii.phps poslední možnost - pro UTF8


Tak už jsem to dokončil a funguje, jen se bojím, jestli tam není nějaká výrazná chyba, která se prozatím neprojevila, ale snad ne.
<?php





$data = $_POST['page'] ;//ziskam data z formulare
$prevodni_tabulka = Array(  'ä'=>'a',
  'Ä'=>'A',
  'á'=>'a',
  'Á'=>'A',
  'à'=>'a',
  'À'=>'A',
  'ã'=>'a',
  'Ã'=>'A',
  'â'=>'a',
  'Â'=>'A',
  'č'=>'c',
  'Č'=>'C',
  'ć'=>'c',
  'Ć'=>'C',
  'ď'=>'d',
  'Ď'=>'D',
  'ě'=>'e',
  'Ě'=>'E',
  'é'=>'e',
  'É'=>'E',
  'ë'=>'e',
  'Ë'=>'E',
  'è'=>'e',
  'È'=>'E',
  'ê'=>'e',
  'Ê'=>'E',
  'í'=>'i',
  'Í'=>'I',
  'ï'=>'i',
  'Ï'=>'I',
  'ì'=>'i',
  'Ì'=>'I',
  'î'=>'i',
  'Î'=>'I',
  'ľ'=>'l',
  'Ľ'=>'L',
  'ĺ'=>'l',
  'Ĺ'=>'L',
  'ń'=>'n',
  'Ń'=>'N',
  'ň'=>'n',
  'Ň'=>'N',
  'ñ'=>'n',
  'Ñ'=>'N',
  'ó'=>'o',
  'Ó'=>'O',
  'ö'=>'o',
  'Ö'=>'O',
  'ô'=>'o',
  'Ô'=>'O',
  'ò'=>'o',
  'Ò'=>'O',
  'õ'=>'o',
  'Õ'=>'O',
  'ő'=>'o',
  'Ő'=>'O',
  'ř'=>'r',
  'Ř'=>'R',
  'ŕ'=>'r',
  'Ŕ'=>'R',
  'š'=>'s',
  'Š'=>'S',
  'ś'=>'s',
  'Ś'=>'S',
  'ť'=>'t',
  'Ť'=>'T',
  'ú'=>'u',
  'Ú'=>'U',
  'ů'=>'u',
  'Ů'=>'U',
  'ü'=>'u',
  'Ü'=>'U',
  'ù'=>'u',
  'Ù'=>'U',
  'ũ'=>'u',
  'Ũ'=>'U',
  'û'=>'u',
  'Û'=>'U',
  'ý'=>'y',
  'Ý'=>'Y',
  'ž'=>'z',
  'Ž'=>'Z',
  'ź'=>'z',
  'Ź'=>'Z');
$pd = strtr($data, $prevodni_tabulka);

$pr = strtoupper ( $pd );


 if ($pr) {
         if ($pr == 'PASKOVANA') {
                 include 'vazky/sidlatka_paskovana.html';
         }
         elseif ($pr == 'TMAVA') {
                 include 'vazky/sidlatka_tmava.html';
         }
         elseif ($pr == 'HNEDA') {
                 include 'vazky/sidlatka_hneda.html';
         }
         elseif ($pr == 'VELKA') {
                 include 'vazky/sidlatka_velka.html';
         }
         else {
                 include 'chybova_hlaska.php';
         }
 }
 else {
         include 'vazky/sidlo_kralovske.html';
 }

?>

                                                    
           

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: