Při nastavení výchozích hodnot, se nastaví jen některé

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Lawondyss
Člen | 106
+
0
-

Při definici formuláře bez MVP, nastavuju výchozí hodnoty:

<?php
	if(!$form->isSubmitted())
	{
		$form->setDefaults($defaults);
	}
?>

Proměnná $defaults obsahuje tyto pole

array(23) {
  'id' => string(2) '27'
  'cislo' => string(2) '15'
  'titul' => string(0) ''
  'jmeno' => string(5) 'Hana'
  'prijmeni' => string(9) 'Honzová'
  'pohlavi' => string(1) 'Z'
  'narozeni' => string(10) '1951-08-26'
  'statni_obcanstvi' => string(2) 'CR'
  'dosazene_vzdelani' => string(8) 'uciliste'
  'ulice' => string(12) 'Mimoňská 281'
  'mesto' => string(17) 'Stráž pod Ralskem'
  'psc' => string(5) '47127'
  'k_ulice' => string(0) ''
  'k_mesto' => string(0) ''
  'k_psc' => string(0) ''
  'mobil' => string(9) '725702591'
  'email' => string(0) ''
  'ucet' => string(15) '1227570051/0800'
  'nastup' => string(10) '2009-06-10'
  'id_okres' => string(1) '3'
  'id_urad_prace' => string(2) '11'
  'id_zprostredkovatelka' => string(1) '0'
  'id_user' => string(4) '1006'
}

A přesto se ve formuláři naplní jen některá políčka.

<form action="" method="post" id="frm-" onsubmit="return nette.validateForm(this)">

<div class="section">

<div class="ln">
	<div class="ln_1_1"><label for="frm-cislo">Číslo</label></div>

	<div class="ln_1_2"><input type="text" size="5" maxlength="10" class="text" name="cislo" disabled="disabled" id="frm-cislo" value="15" /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label for="frm-titul">Titul</label></div>

	<div class="ln_1_2"><input type="text" size="5" maxlength="30" class="text" name="titul" id="frm-titul" value="" /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label class="required">Pohlaví</label></div>

	<div class="ln_1_2"><input type="radio" name="pohlavi" id="frm-pohlavi-0" value="M" /><label for="frm-pohlavi-0">Muž</label><br /><input type="radio" name="pohlavi" id="frm-pohlavi-1" checked="checked" value="Z" /><label for="frm-pohlavi-1">Žena</label><br /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label class="required" for="frm-jmeno">Jméno</label></div>

	<div class="ln_1_2"><input type="text" size="25" maxlength="70" class="text" name="jmeno" id="frm-jmeno" value="Hana" /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label class="required" for="frm-prijmeni">Příjmení</label></div>

	<div class="ln_1_2"><input type="text" size="25" maxlength="70" class="text" name="prijmeni" id="frm-prijmeni" value="" /></div>
</div>

</div>

<div class="section">

<div class="ln">
	<div class="ln_1_1"><label class="required" for="frm-narozeni">Datum narození</label></div>

	<div class="ln_1_2"><input type="text" size="12" name="narozeni" id="frm-narozeni" value="26.08.1951" /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label onclick="document.getElementById(this.htmlFor).focus();return false" class="required" for="frm-dosazene_vzdelani">Dosažené vzdělání</label></div>

	<div class="ln_1_2"><select onfocus="this.onmousewheel=function(){return false}" name="dosazene_vzdelani" id="frm-dosazene_vzdelani"><option value="">-- vyberte --</option><option value="zakladni">základní škola</option><option value="uciliste" selected="selected">učiliště</option><option value="uciliste_maturita">učiliště s maturitou</option><option value="stredni">střední škola</option><option value="vyssi">vyšší odborná škola</option><option value="vysoka">vysoká škola</option></select></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label onclick="document.getElementById(this.htmlFor).focus();return false" for="frm-statni_obcanstvi">Státní občanství</label></div>

	<div class="ln_1_2"><select onfocus="this.onmousewheel=function(){return false}" name="statni_obcanstvi" id="frm-statni_obcanstvi"><option value="CR" selected="selected">ČR</option><option value="SK">SK</option></select></div>
</div>

</div>

<div class="section">
<em>Trvalý pobyt</em>


<div class="ln">
	<div class="ln_1_1"><label class="required" for="frm-ulice">Ulice</label></div>

	<div class="ln_1_2"><input type="text" size="25" maxlength="35" class="text" name="ulice" id="frm-ulice" value="" /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label class="required" for="frm-mesto">Město</label></div>

	<div class="ln_1_2"><input type="text" size="25" maxlength="35" class="text" name="mesto" id="frm-mesto" value="" /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label class="required" for="frm-psc">PSČ</label></div>

	<div class="ln_1_2"><input type="text" size="5" maxlength="5" class="text" name="psc" id="frm-psc" value="47127" /></div>
</div>

</div>

<div class="section">
<em>Kontaktní adresa - odlišná od trvalého pobytu</em>


<div class="ln">
	<div class="ln_1_1"><label for="frm-k_ulice">Ulice</label></div>

	<div class="ln_1_2"><input type="text" size="25" maxlength="35" class="text" name="k_ulice" id="frm-k_ulice" value="" /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label for="frm-k_mesto">Město</label></div>

	<div class="ln_1_2"><input type="text" size="25" maxlength="35" class="text" name="k_mesto" id="frm-k_mesto" value="" /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label for="frm-k_psc">PSČ</label></div>

	<div class="ln_1_2"><input type="text" size="5" maxlength="5" class="text" name="k_psc" id="frm-k_psc" value="" /></div>
</div>

</div>

<div class="section">

<div class="ln">
	<div class="ln_1_1"><label for="frm-mobil">Mobil/Tel.</label></div>

	<div class="ln_1_2"><input type="text" size="12" maxlength="15" class="text" name="mobil" id="frm-mobil" value="725702591" /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label for="frm-email">E-mail</label></div>

	<div class="ln_1_2"><input type="text" size="25" maxlength="50" class="text" name="email" id="frm-email" value="" /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label for="frm-ucet">Číslo účtu</label></div>

	<div class="ln_1_2"><input type="text" size="25" maxlength="50" class="text" name="ucet" id="frm-ucet" value="1227570051/0800" /></div>
</div>

</div>

<div class="section">

<div class="ln">
	<div class="ln_1_1"><label class="required" for="frm-nastup">Vstup do programu</label></div>

	<div class="ln_1_2"><input type="text" size="12" class="datepicker" name="nastup" id="frm-nastup" value="10.06.2009" /></div>
</div>

</div>

<div class="ln_but">

<label>
	<img src="img/bt_apply.png" alt="ikona" />
<input type="submit" class="button" name="save" id="frm-save" value="Uložit" /></label>

</div>

<div><input type="hidden" name="id" id="frm-id" value="27" /></div>
</form>

Shodnost pojmenovaných formulářových políček i indexů v předaném poli jsem kontroloval. Vůbec mě nenapadá, jak je to možné.

Lawondyss
Člen | 106
+
0
-

Tak se mi podařilo přijít na to, že to způsobuje kódování. Projekt je v win1250 ale formuláře jedou v utf8.

Zkusil jsem na hodnoty v proměnné $defaults použít funkci utf8_encode. Už to zobrazuje všechny zadané hodnoty, ale s nesmyslnými znaky.

<div class="section">
<em>Trvalý pobyt</em>


<div class="ln">
	<div class="ln_1_1"><label class="required" for="frm-ulice">Ulice</label></div>

	<div class="ln_1_2"><input type="text" size="25" maxlength="35" class="text" name="ulice" id="frm-ulice" value="Mimoòská 287" /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label class="required" for="frm-mesto">Město</label></div>

	<div class="ln_1_2"><input type="text" size="25" maxlength="35" class="text" name="mesto" id="frm-mesto" value="Strហpod Ralskem" /></div>
</div>

<div class="ln">
	<div class="ln_1_1"><label class="required" for="frm-psc">PSČ</label></div>

	<div class="ln_1_2"><input type="text" size="5" maxlength="5" class="text" name="psc" id="frm-psc" value="47127" /></div>
</div>

</div>
David Grudl
Nette Core | 8147
+
0
-

Pokud používáš Nette 0.9, lze nastavit kódování po vytvoření formuláře přes $form->setEncoding('WINDOWS-1250'); (nicméně uvnitř PHP budou všechny metody jako setDefaults nebo getValues() nadále pracovat s UTF-8). Ve verzi 2 je podporované už jen UTF-8.

Lawondyss
Člen | 106
+
0
-

$form->setEncoding(‚WINDOWS-1250‘); pomohlo hodnotám :-)

Ale teď trpí popisky. Postrádají všechna písmenka s diakritikou. :-(

Petr Mašát
Člen | 101
+
0
-

Nebylo by rozumnější překódovat celý projekt z win1250 do utf8 a v ní poté budeš mít vše → odpadnou ti všechny tyto problémy. Plus umožníš si budoucí přesun na nette2.
A nebo existuje nějaký rozumný důvod zůstávat na win1250?

Filip Procházka
Moderator | 4668
+
0
-

tachyon napsal(a):

A nebo existuje nějaký rozumný důvod zůstávat na win1250?

o tom silně pochybuji :)

Lawondyss
Člen | 106
+
0
-

HosipLan napsal(a):

tachyon napsal(a):

A nebo existuje nějaký rozumný důvod zůstávat na win1250?

o tom silně pochybuji :)

Bohužel tím důvodem je čas. Je to totiž jeden starší IS po mém předchůdci, který se tu znova a znova zakládá s různými obměnami. Rád bych do něj zakomponoval Nette pro snazší úpravy, ale vzhledem k tomu, že už brzo se spustí další a tentokrát opravdu velký, mám jen málo času na zakomponování a současně potřebné úpravy.

Petr Mašát
Člen | 101
+
0
-

Každé rozumné IDE na PHP ti umožní hromadně nastavit celému projektu kódování. Poté stačí změnit meta tag v head a je hotovo. Práce na cca pět minut? Ušetříš si tím spousty probdělých nocí.

Majkl578
Moderator | 1364
+
0
-

tachyon napsal(a):

Práce na cca pět minut?

Myslím, že i to je moc. Stačí v linuxové konzoli spustit:

$ find -type f -exec iconv --from-code=CP1250 --to-code=UTF-8 -o {} {} \;

Případně si napsat ekvivalentní PHP script asi na 3 řádky.