Autor | Zpráva | ||
---|---|---|---|
Gymplak Profil |
#1 · Zasláno: 24. 11. 2007, 20:41:51 · Upravil/a: Gymplak
Ahoj,
tak jsem tu zase, snažím si udělat skript na zkoušení slovíček do angličtiny, zápis do souboru i jejich celkový výpis už mám, ale nějak mi teď dělá probém právě zkoušení - porovnání zadaného slovíčka s originálem. Píše mi to, že to zadané slovíčko není dobře (i když je), a nevím v čem je problém, dřívě to fungovalo, ale dělal jsem s tím nějaké úpravy a ... už to nefunguje. Hledím na to už hodně dlouho chvíli, ale nemůžu chybu najít. Jednotlivé proměnné (anglický výraz orig. ; zadaný výraz) mi přijde z předchozí stránky z formuláře. Problém je v tom,že každé slovíčko můžu mít více synonym, takže ty rozdělím do jednotlilvých polí přes explode(podle čárek mezi výrazy). Když je v poli pouze jedno slovíčko třeba apple a stejné slovíčko zadám do formuláře vypíše to "0" - false. Nechápu. Když mám ale v poli 2 anglická slovíčka "plane,airplane" tak, když zadám to první "plane", vyhodnotí to jako "1" - true, ale když zadám to druhé "airplane" už to vyhodnotí jako "0" false. Nechápu proč to takhle nebere některé výrazy. $en_word1 - originál slovíčko brané ze souboru $en_word2 - zadané slovíčko přes formulář
Doufám, že mi pomůžete jako vždy. Díky za každou radu. Gymplák |
||
Alphard Profil |
#2 · Zasláno: 24. 11. 2007, 20:53:09 · Upravil/a: Alphard
if (in_array ($en_word2, explode (",", $en_word1))) echo 1; else echo 0;
|
||
Gymplak Profil |
#3 · Zasláno: 24. 11. 2007, 21:23:09
Díky za radu, ale bohužel to problém úplně nevyřešilo, ale už asi vím v čem je problém (nevím jak ho odstranit).
Teď jsem ještě zkoušel ty přenesené proměnné zobrazit, a zjistil jsem že za tím originálním slovíčkem načteném ze souboru je mezera, ať už to do toho souboru zapíšu ručně, či přes skript. Což způsobuje tu nerovnost při porovnání a v tomto případě mi zase funguje pouze slovíčko, které je poslední v souboru, za kterým jsem nezmáčkl enter(když zapisuju ručně). Nevím jakto se tam ta mezera vždycky přidá. Nevíš jak ji na tom konci řádků odstranit ? Přemýšlím jestli nějak uplatnit str_replace, ale protože všechny mezery zrušit nemůžu kvůli dvojslovným výrazům jako např. credit card, nevím jak Do souboru zapisuju: if (fwrite($fp,$czech_word .";". $english_word."\n")) Zkoušel jsem i s \n na začátku, ale nepomáhá to, mezera je tam furt. Gymplák |
||
Alphard Profil |
#4 · Zasláno: 24. 11. 2007, 21:31:19
trim()
|
||
Gymplak Profil |
#5 · Zasláno: 24. 11. 2007, 22:09:03 · Upravil/a: Gymplak
Už mi to přijde skoro blbé, bohužel nepomohl to, funguje pouze poslední slovíčko v souboru. Různě jsem skript upravoval, zkoušel, ale nic, teď ho mám takto:
if(!filesize($slovnik)==0) Když dám trim() i před druhý řádek (fwrite($fp,trim("\n "))); tak to nový řádek zruší úplně a jednotlivá slovíčka se spojí. Ještě bych se chtěl zeptat, jestli všehncy ty funkce znáš nebo je nějak hledáš, bo u mě hledání v googlu není vždy úspěšné anebo to najde tolik možností a každou pro jinou příležitost. Díky za trpělivost Aplhard. Gymplák |
||
Alphard Profil |
#6 · Zasláno: 24. 11. 2007, 22:52:44
tyhle znám, hledat specifickou funkci je težké, v manuálu hledám především parametry :-)
ale k tvému problému, předpokládám že soubor je nějak takhle car;auto train;vlak bus;autobus plane;letadlo konec řádku tady musí být, trim() by se použil až při kontrole težko hádat, nakopíruj sem několik řádků souboru se slovíčky a celý script na kontrolu včetně načtení dat |
||
WertriK Profil |
#7 · Zasláno: 25. 11. 2007, 00:14:09
Gymplak
Já bych chtěl hlavně doporučit použití databáze, myslim že by jsi ulehčil svým problémům. Měl by jsi tabulku anglických slovíček, českých a spojovací tabulku. Vyhledal by jsi v tabulce (anglické, české) slovíčko a pomocí spojovací tabulky by jsi vypsal všechny překlady. Jinak jak psal Alphard, napiš sem kousek obsahu toho souboru - nejslépe všechny možné typy zápisu - dvojsvloví, více slov ... |
||
Gymplak Profil |
#8 · Zasláno: 25. 11. 2007, 10:22:54 · Upravil/a: Gymplak
OK, s tou databází to zkusím jako jinou verzi.
EDIT 11:26:Když dám na konec řádku znovu ";", tak už to funguje, slovíčka již se to kontolují dobře (ta mezera se přiřadí do dalšího pole, které nepoužívám) př: letadlo;jet,plane,airplane,jambo jet; Sice to problém vyřeší, ale z principu by mě zajímalo v čem by mohla být chyba, kterou stále nemůžu najít. Pár slovíček ze souboru data.txt: letadlo;jet,plane,airplane,jambo jet Zapisuju přes formular zapis.php, který posílá data do zapsat.php, a ten zase přes header se přesměruje na zapis.php s výsledkem uloženým v session, který se pak zobrazí. Soubor zapsat.php $english_word = str_replace(' ,',',',$english_word); //pro ostranění mezer před a za čárkami mezi výrazy Soubor obsahuje ještě další větvení v podobě podmínek jestli soubour existuje, je-li zapisovatelný a jestli josu zadány správně slovíčka - když to nesplňuje, odkáže se to ne předešlou stránku s chybou. Zkoušení probíhá přes zkouseni s formularem v souboru zkouseni.php, ten vybere náhodné číslo pole do kterého jsou načtené řádky ze souboru, rozdělí přes ";". Zkoušený musí do formuláře zadat výraz -> přenesení na stránku s oveřením -> přesměrování zpěz, kde s session je opět uložený výsledek operace, který se následně zobrazí. Souborzkouseni.php: $slovicka = File ($slovnik); //$slovnik načítám ze konfiguračního souboru = data.txt $PocetSlovicek = count($slovicka)-1; $NahodneSlovicko = mt_rand (0,count($slovicka)-1); $casti = explode(";",$slovicka[$NahodneSlovicko]); $cz_word = $casti[0]; $en_word = $casti[1]; // část formuláře do kterého se zadává zkoušené slovíčko + přenos spárvného výrazy v skyrtém políčku hidden <input id="text-disabled" type=text disabled name="cz_zadani" value="<?php echo $cz_word ?>" lenght="15" /></td> <td><input id="text" type="text" name="en_word2" lenght="15" /></td> <td><input type="hidden" name="en_word1" value="<?php echo $en_word ?>" /></td> <td><input type="hidden" name="cz_word1" value="<?php echo $cz_word ?>" /></td> <td><input type="hidden" name="word_number" value="<?php echo $NahodneSlovicko ?>" /></td> .... Soubor overeni.php $vyrazy = explode (",",$en_word1); Doufám, že vás tím kódem příliš nezahltím. Gymplák |
||
Alphard Profil |
#9 · Zasláno: 25. 11. 2007, 12:14:22
ten cyklus by měl být zbytečný, co se stane, když dáš do overeni.php tohle?
if (in_array (trim ($en_word2), explode (",", trim ($en_word1)))) { $pokracuj=1; echo "1"; } else { $NEpokracuj=1; echo "0"; } |
||
Gymplak Profil |
#10 · Zasláno: 25. 11. 2007, 20:12:03
Díky už to funguje. Ale nechápu proč to u toho cyklu for chybu dělalo a teď ne ?!
Ještě jednou díky, Gymplák |
||
Časová prodleva: 16 let
|
0