Kde je chyba? – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kde je chyba? – PHP – Fórum – Programujte.comKde je chyba? – PHP – Fórum – Programujte.com

 

VelkyBubak
~ Anonymní uživatel
40 příspěvků
10. 8. 2015   #1
-
0
-

mám kód

   foreach ($mdl_zanr as $mdl_zanrVal)
         {
         //$mdl_zanrVal = TRIM(ucfirst($mdl_zanrVal));
         $mdl_zanrQ = TRIM(ucfirst($mdl_zanrVal));
         
         switch($mdl_zanrVal) {
		default: $occup[] = $mdl_zanrQ; break;
            	
            }
         echo $mdl_zanrVal.", ";
         echo $mdl_zanrQ."; ";
         }


takto nefunguje a pokud odkomentuju třetí řádek, tak funguje - izoloval jsem chybu, ale pořád nechápu v čem spočívá

Nahlásit jako SPAM
IP: 94.113.99.–
VelkyBubak
~ Anonymní uživatel
40 příspěvků
10. 8. 2015   #2
-
0
-

#1 VelkyBubak
hm, přestože pořád netuším v čem byla chyba, zdá se že souvisí s ucfirst, protože když to neodkomentuju a přepíšu řádek 4 na 

$mdl_zanrQ = ucfirst(TRIM($mdl_zanrVal));

také to funguje

Nahlásit jako SPAM
IP: 94.113.99.–
smiesek0
Newbie
10. 8. 2015   #3
-
+1
-
Zajímavé
Kit +

já se v tom sice tolik nevyznám, ale napadá mě, jestli to nebude nějakou souviset s diakritikou, pokud máte první písmeno s diakritikou, tak to může souviset s tím. Zkuste to testovat na prvním písmenu s diakritikou a pak bez prvního písmena s diakritikou   

V souvislosti s použitím to pak může způsobovat i problém to, jestli máte kódování v UTF-8, pokud ano, tak to jsem se dočetla, že není pro to použitelná standardní funkce, ale je třeba to změnit na  

mb_ucfirst($string)
Nahlásit jako SPAM
IP: 109.81.209.–
sakal910
Stálý člen
10. 8. 2015   #4
-
0
-

Zdravim,  pokud to zpusobi nejakou chybu tak ti ji php urcite vypise a ten vypis sem postni... Pokud u te chyby vidis jen bilou stranku tak si zapni v php.ini zobrazovani chyb ;-)

Nahlásit jako SPAM
IP: 31.222.0.–
VelkyBubak
~ Anonymní uživatel
40 příspěvků
10. 8. 2015   #5
-
0
-

#4 sakal91
jediná chyba byla v tom že se pomocí ucfirst zvětšilo první písmeno prvního prvku pole a ostatní zůstaly s malými - dost pochybuji, že by v tomto případě php nějakou chybu vypsalo (i kdybych to zkusil; mimochodem když už se mi stane, že místo chyby vidím jen bílou stránku, pak zapnutí chyb v php.ini nepomáhá, a vidím bílou stránku dále)

#3 smiesek
hm, v utf-8 to je, takže by to mohl být jedn z problémů

ale opravdu by mne zajímalo, proč daný příklad může fungovat i po odkomentování řádku 3 (ještě bych pochopil, proč nefunguje před trim - pravděpodobně bere cokoliv za mezerou jako další slovo)

Nahlásit jako SPAM
IP: 94.113.99.–
VelkyBubak0
Newbie
10. 8. 2015   #6
-
0
-

#5 VelkyBubak
Aha, ok už chápu. Ve třetím řádku se totiž nad proměnnou použitou ve čtvrtém řádku použije trim (které se tak použije před ucfirst ve čtvrtém řádku), což způsobí že to funguje (pravděpodobně jen na písmena bez diakritiky)

Nahlásit jako SPAM
IP: 94.113.99.–
smiesek0
Newbie
10. 8. 2015   #7
-
0
-

#6 VelkyBubak
lze to prosím napsat ještě i jinak po česky? Ráda bych to pochopila, co jste tím chtěl říci ale nějak si to čtu pořád dokola a dokola Vaši větu, ale nemohu ji pochopit.

Odpovědí, už to funguje, není třeba dále nad tím bádat mě nepostačí   

Nahlásit jako SPAM
IP: 84.242.78.–
sakal910
Stálý člen
10. 8. 2015   #8
-
0
-

#6 VelkyBubak
Pokud pouzijes trim pred nebo po ucfirst je uplne jedno, chybne to neni akorat ze pokud to pouzijes az po ucfirst a jako prvni znak mas mezeru, tak se "zvetsi" ta mezera a pak se oreze... Vis ono je tezke ti poradit kdyz tady nenapises jake jsou vsupni data (je urcite $mod_zanrVal string a ne treba pole atd?)... Jinak predpokladam ze to neni cely kod toho foreach (pokud ano nechapu vyznam toho switche :D )

Zkousel sis vubec dumpnout ty promene?

Nahlásit jako SPAM
IP: 195.144.106.–
peter
~ Anonymní uživatel
4014 příspěvků
10. 8. 2015   #9
-
0
-

Souhlasim se smiesek :)
Myslenky jsou asi spravne, ale ne moc srozumitelne resene.
(Ja to teda chapu, bavis se o prispevku asi #1.)

To kodovani je problem. Php normal funkce byli navrzene pro 1 znakove texty. UTF pouziva 2 (i vice znaku).
Š - ma tedy v utf jiny kod znaku, rekneme 012+123.
Š - v win-1250 ma rekneme 190
Ty cisla jsou jina. Takze prevodni tabulka proste nefunguje. Pro 012 nema funkce kod.

Trim je tam dulezite, kdyz tam nekdo da mezeru pred nebo za retezec. Je mozne, ze to odboura znak 012. Takze nasleduje znak 123 a pro ten uz ma asi kod.
 

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:fd44:63...–
smiesek0
Newbie
10. 8. 2015   #10
-
0
-

já jsem testovala řešení v prvním příspěvku a vložila do pole různé hodnoty a opravdu do funguje pouze na písmena bez diakritiky, tedy pokud to chce použít i na diakritiku je nutné doplnit o funkci:

if (!function_exists('mb_ucfirst') && function_exists('mb_substr')) {
    function mb_ucfirst($string) {
        return mb_strtoupper(mb_substr($string, 0, 1, 'UTF-8'),'UTF-8') . mb_substr($string, 1, mb_strlen($string), 'UTF-8');
    }
}
Nahlásit jako SPAM
IP: 84.242.78.–
VelkyBubak0
Newbie
10. 8. 2015   #11
-
0
-

#7 smiesek
Pokud jde o příspěvek #6 , opravdu jsem se vyjadřoval k příspěvku #1 kde je původní kód. Můj hlevní problém spočíval v tom, že jsem nechápal proč se kód chová tak, jak jsem taktéž v prvním příspěvku popsal.

a toto:

což způsobí že to funguje (pravděpodobně jen na písmena bez diakritiky)

bylo vyjádření ke skutečnosti že ucfirst funguje jen pokud na začátku vstupu není mezera

PS: velice se omlouvám za nepříliš pochopitelné zápisy ;)

#8 sakal91
a) a právě proto to není jedno

b) když to říkáš, budu tedy věřit že by v tomto zápisu mohlo být $mod_zanrVal i polem

c) ne, nezkoušel (ještě nejsem zvyklý to používat, takže mě to ani nenapadlo, díky)

Nahlásit jako SPAM
IP: 94.113.99.–
Kit+15
Guru
10. 8. 2015   #12
-
0
-

#10 smiesek
Dovolil jsem si tu tvoji funkci malinko zjednodušit. Výsledek mi vyšel následovně: 

<?php
mb_internal_encoding('UTF-8');
if (!function_exists('mb_ucfirst') && function_exists('mb_substr')) {
    function mb_ucfirst($string) {
        return mb_strtoupper(mb_substr($string, 0, 1)) . mb_substr($string, 1);
    }
}

$zanry = array('  Dechovka ', '  ďábelské tóny ', '  řinčení ');
foreach ($zanry as $zanr) {
    $upperZanr = mb_ucfirst(trim($zanr));
    switch ($upperZanr) {
        default: $occupation[] = $upperZanr; // break;
    }
    echo $upperZanr . ", ";
}

Nevěděl jsem, co znamenají některé zkratky a tak jsem raději proměnné přejmenoval. Vím, trochu divočina A/Č, ale fakt nevím, k čemu ten kus kódu má sloužit.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4014 příspěvků
10. 8. 2015   #13
-
0
-

Kit - Dotaz. To break u default ve switch, ma to smysl, treba kvuli rychlosti? On tam stejne switch konci.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:fd44:63...–
Kit+15
Guru
10. 8. 2015   #14
-
0
-

#13 peter
Nemá. Jen jsem to zkopíroval a ten break jsem nějak přehlédl. Do switche nedávám break nikdy, vlastně jsem ho úplně přestal používat. Ten switch je v tomto případě zcela zbytečný, ale nejspíš s ním VelkyBubak něco zamýšlí a bude ho rozšiřovat.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
smiesek0
Newbie
10. 8. 2015   #15
-
0
-

#12 Kit
v pořádku, ono to není přímo moje funkce - dohledala jsem na internetu, pouze jsem chtěla sem vložit nějakou funkci, která dokáže pracovat i s diakritikou, aby se urychlil proces dotazování, pokud by chtěl dále VelkyBubak s tím pracovat

Nahlásit jako SPAM
IP: 109.81.209.–
Kit+15
Guru
10. 8. 2015   #16
-
0
-

#15 smiesek
S těmito funkcemi moc zkušeností nemám, protože se takovou manipulaci s daty snažím vypakovat ven z PHP do nějakého jiného nástroje - v tomto případě např. do XSLT nebo CSS. Záleží na volbě správného levelu - někdy to "odskáče" i SQL.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

Podobná vlákna

Kde je chyba ? — založil sipeer

Kde je chyba? — založil DooFy93

Kde je chyba?? — založil Af_k

Kde je chyba — založil Milan

Kde je chyba? — založil Tom@sQo

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý