Autor Zpráva
dragon124
Profil
Dobrý den,
Pro zábavu programuji webovou aplikaci v PHP, která Vás vyzkouší z Francouzkých nepravidelných sloves. Již jsem se tu na ni ptal a proto bych chtěl poděkovat všem, co mi poradily.
Momentálně mám problém s tím, že to správně napíše - pro příklad - "Já jsem", ale pak mi to řekne "Spatně, správně je to ils sont" (například, v překladu znamená oni jsou). Ještě k tomu se mi to hned poté zeptá na na oni jsou. Jako kdyby byla ta proměnná s francouskou verzí slovesa nějak napřed (nebo česká pozadu). Pro ty, co neumí francouzky je:
ja jsem - je suis
ty jsi - tu est
on je - il es
ona je elle es
my jsme - nout sommes
vy jste - vous etes
oni jsou - ils sont

Tich dvou čísel si nevšímejte.

odkaz na to je http://fj.tuxpages.cz
na uložená slovesa česky zde
a francousky zde

zdroják je:
<html>
<head>

</head>
<body>
<?php
$a=rand(1,8);
echo $a;
echo $a;
$b=$a;
$filecj = fopen("etre.cj", "r");
while($a>0){

if($a==1) {
    $cj = trim(fgets($filecj));
        goto koneccj;
    }else {
fgets($filecj);
    }
$a--;
}
koneccj:

fclose($filecj);

$filefj = fopen("etre.fj", "r");
while($a>0){

if($b==1) {
    $fj = trim(fgets($filefj));
    goto konecfj;
    }else{
fgets($filefj);
    }
$b--;
}
konecfj:

fclose($filefj);


echo $cj;




echo "<form method='POST'><input type='text' name='odpoved' /><input type='submit' /></form>";

$spravne=0;
$spatne=0;
if(isset($_POST["odpoved"])){
    if($_POST["odpoved"] == $fj) {
        
        echo "spravne";
        $spravne++;
    }else {
        echo "spatne, spravne je to ".$fj.".<br>";
        $spatne++;
    }}
    echo "mate spatne $spatne , dobre $spravne";
?>
</body>
</html>
Vím, že bych měl používat sql, ale dělám to pouze pro zábavu, takže to nevadí.
Předem děkuji za všechny odpovědi...
yFang
Profil
Podle mě je chyba v tom, že to kontroluje s tím aktuálně vygenerovaným a ne s tím předchozím, nebo tam snad někde předáváš, na co ses ptal?

Jinak echo "mate spatne $spatne , dobre $spravne"; ti vypíše vždycky maximálně 1, protože to nijak nepřádáváš dál. Pro každé načtení stránky (= odeslání formuláře) probíhá celý skript nanovo.

goto konecfj; zkus se podívat, co dělá příkaz break, tohle je docela dost prasárna.
SeparateSK
Profil
Skús predávať ID otázky v input type hidden, aby si script pamätal aká bola naposledy položená otázka.

Inak smola, že goto je iba od 5.3.0.
Inak takto to bude o niečo ľahšie, lebo to načíta toľko otázok, koľko riadkov je v súbore etre.cj:
<html>
    <style>
        *{font-family:verdana}
    </style>
<?php
    function nahraj_preklady(array &$cz,array &$fr,&$ctr){
        $cjf=fopen("etre.cj","r");
        $fjf=fopen("etre.fj","r");
        while(!feof($cjf)&&!feof($fjf)){            
            $cesky=trim(fgets($cjf));
            if($cesky!=""){
                $francuzsky=trim(fgets($fjf));
                $cz[$ctr]=$cesky;
                $fr[$ctr]=$francuzsky;
                $ctr++;
            }
        }
        fclose($cjf);
        fclose($fjf);
    }
    function patchni_otazku(&$_otazka,&$qid,$cz,$fr,$max){
        if(strlen($_otazka)==0){
            $qid=rand(0,$max);
            $_otazka=$cz[$qid];
            if(strlen($_otazka)==0)
                patchni_otazku($_otazka,$qid,$cz,$fr,$max);
        }
    }
    $max=0;
    $cz=array();
    $fr=array();
    nahraj_preklady($cz,$fr,$max);
    $dobre=0;
    $zle=0;
    $qid=rand(0,$max);
    $_otazka=$cz[$qid];
    /*patchni_otazku: //PHP 5.3.0 iba!!!    
    if(strlen($_otazka)==0){
        $qid=rand(0,$max);
        $_otazka=$cz[$qid];
        if(strlen($_otazka)==0)
            //goto patchni_otazku;
    }*/
    patchni_otazku($_otazka,$qid,$cz,$fr,$max); //PHP_VERSION<5.3.0
    echo "<form method='post'>Ako sa po francuzsky povie: $_otazka?<br>";
    echo "<input type='text' name='odpoved'>";
    echo "<input type='submit' name='submit'><br>";
    if($_POST["submit"]){
        $otazka=$_POST["otazka"];
        $dobre=$_POST["dobre"];
        $zle=$_POST["zle"];
        $odpoved=$_POST["odpoved"];
        if($fr[$otazka]==$odpoved){
            echo "Spravne!<br>";
            $dobre++;
        } else {
            echo "Zle! Spravna odpoved je $fr[$otazka]<br>";
            $zle++;
        }
    }
    echo "<input type='hidden' name='dobre' value='$dobre'>";
    echo "<input type='hidden' name='zle' value='$zle'>";
    echo "<input type='hidden' name='otazka' value='$qid'></form>";
    echo "Dobre: $dobre,zle: $zle<br>";
?>
</html>
Keby si náhodou nevedel, čo je to "&" v array &$cz,array &$fr,&$ctr, to je referencia na premennú, bez toho by sa vo funkcií vytvorili celkom iné premenné(teda na inej adrese), toto rovno mení premennú, ktorú predáš v parametroch. Hodí sa to najmä vtedy, keď chceš aby ti funkcia vrátila viac ako 1 hodnotu (takto dokáže meniť premenné, ktoré predáš v parametroch :) ).
preca1
Profil
dragon124:
Doporučení: prvně se nauč česky a pak až se pusť na jinej jazyk.
Doporučení 2: prvně se nauč cizí jazyk a pak až začni dělat nějaké výukové materiály.

Správně to je
1: je suis
2: tu es
3: il/elle est
1: nous sommes
2: vous êtes
3: ils/elles sont

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: