Autor Zpráva
Kalby
Profil
Dobrý den,

řeším uz delsi dobu problem s funkci ktera nahrazuje nejaky text v retezci za dynamicky generovany text, dam priklad. V ini souboru mam napriklad toto:

EMAILREZERVACE="Dobry den %jmeno%, vas email je %email% a heslo %heslo%, zprava odeslana %datum%"


Pote si do pole ulozim hodnoty


$q['email']=$_POST['email'];
$q['heslo']=$_POST['heslo'];
$q['datum']=date('Y-m-d');

$language->p($text['EMAILREZERVACE'],$q);


A funkce p ve tride language
function p($text,$variable){

  if(count($variable)>0){
    while ($prom = current($variable)) {
        $text=str_replace('%'.key($variable).'%', $prom, $text);
        $text=str_replace('\n',PHP_EOL, $text);
      next($variable);
  }
  }

  return $text;
}

  


Takto se nahradi promene v %% za promenne v poli. Takto vytvoreny text pote posilam emailem. Obcas se ovsem nektere promenne nenahradi a zustanou v textu ve formatu %email% a vubec netusim proc. Dela to jen u nekterych promennych. Zkousel jsem to predelat uz nekolikrat ale nepodarilo se. Kdyz to testuji vzdy se vypise spravne, kdyz to hodim na web tak mi jednou za cas pisou lidi ze jim email prisel chybne. JEste bych chtel podotknout ze nektere pole muzou vyplnit i uzivatele. Emaily jsem zkousel posilat pres phpmailer i funkci mail, oboji stejny problem
Majkl578
Profil
Dost pofidérní řešení.
Když opomenu, že na tom není nic moc objektového, je tam zásadní problém:
Při použití while ($prom = current($variable)) { se v případě, že je hodnota ekvivalentní false (null, 0, '0', '') cyklus přeruší a dále nepokračuje.

Celé by to bylo lepší řešit jinak:
Language::transform($text['EMAILREZERVACE'], array(
  'email' => $_POST['email'], //neošetřené
  'heslo' => $_POST['heslo'], //neošetřené
  'datum' => date('Y-m-d'),
));

class Language
{
  public static function transform($text, array $data) //výstižný název metody
  {
    foreach ($data as $key => $value) {
          $text = str_replace("%$key%", $value, $text);
    }
    $text = str_replace("\n", PHP_EOL, $text); //není to zbytečnost?
    
    return $text;
  }
}
Kalby
Profil
Ty posty osetruju javascriptove, format emailu i delku hesla (take jestli jsou vyplnene). I kdyz je fakt ze nektera pole jsou nepovinna.

Ta funkce neni objektova, ale ostatni funkce ve tride ano, a tahle funkce se nejak do te tridy svouji funkci hodila :) Zkusim to jeste trosku pozmenit a uvidime.

Ohledne te zbytecnosti, no tenhle problem by me take zajimal protoze kdyz jsem tam nechal \n tak se vepsal normalne jako text do mailu.
sarojan
Profil
Jenom taková otázečka: Co když mám vypnutý JavaScript? :)
Kalby
Profil
Kdyz nebude mit zaply javascript, tak se mu ten formular vubec neobjevi, jelikoz se zobrazuje po kliknuti na link javascriptem, misto toho mu to ukaze at si povoli javascript :)
panther
Profil
Kalby:
misto toho mu to ukaze at si povoli javascript :)
tak to je luxusní řešení. A ti, co ho nemají blokovaný, nýbrž nepodporovaný, ať si trhnou levou zadní, co?
Kalby
Profil
Tady nejde jenom o ten formular, cela ta stranka je postavena na Google maps API, bez javasriptu je tedy prakticky k nicemu. Pokud si tedy uzivatel nepovoli javascript, prakticky nic se nedozvi

Moderátor Majkl578: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou.
js
Profil *
panther:

a že dneska je těch prohlížečů, co nepodporujou javascript :D

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