Avatar billede i11uzion Nybegynder
04. februar 2003 - 00:24 Der er 13 kommentarer og
1 løsning

Hmm, den er svær at forklare... Noget med random

Hejsa.

Undskyld den vage titel på spørgsmålet, men jeg har svært ved at gøre det helt klart for mig selv, hvad det er mit problem er. I hvertfald hvis jeg skal oversætte det til PHP-sprog.

Som i måske kan regne ud, er jeg totalt grøn inden for PHP, så beskrivelser i pap er foretrukket...

Anyways, mit problem kan ses på http://dan3dphp.starthotel.dk/phptest_03/ . Det er, som i nok kan regne ud, et meget simpelt lille script, og mit første uden hjælp fra tutorials. Mit problem er, at det jo ikke er meningen at siden skal konkludere "rigtigt" før man har tastet noget ind og trykket "svar".

Nogen forslag ?

Jeg ved ikke om det er kutyme at poste sit script her, men nu tager jeg chancen. Det skulle vel gøre det lettere at hjælpe mig:

<!-- random generator -->
<?php
$antalFlodheste = rand(2, 20);
echo "Én flodhest koster 5kr. Hvad koster $antalFlodheste flodheste ?";
?>

<!-- form til indtastning af svar -->
<form action="<?=$php_self?>" method="post">
Svar <input type="text" name="svar">
<input type="hidden" name="flodhest" value="<? echo $antalFlodheste; ?>"
<br>
<input type="submit" value="svar">
</form>

<!-- evaluering af svar -->
<?php
$svar = $_REQUEST["svar"];
$antalFlodheste2 = $_REQUEST["flodhest"];
if ($svar == ($antalFlodheste2 * 5))
{
$resultat = "rigtigt";
}
elseif ($svar == "")
{
echo "-";
}
else
{
$resultat = "forkert";
}
?>
<br>
<br>
<br>
<u>
         
<!-- farvekode ved rigtigt svar -->
<font face="verdana" color="#008800" size="3">
<?
if ($resultat == "rigtigt")
{
echo "$resultat";
}
?>
         
<!-- farvekode ved forkert svar -->
<font face="verdana" color="#990000" size="3">
<?
if ($resultat == "forkert")
{
echo "$resultat";
}
?>


Jeg håber i kan hjælpe :]
Avatar billede jakoba Nybegynder
04. februar 2003 - 00:36 #1
giv din submitknap et navn:
<input type="submit" value="svar" name="givet_gaet">

så kan du teste på: $_REQUEST["givet_gaet"]  om den der knap er blevet trykket på.

<!-- evaluering af svar -->
<?php
if ( isset $_REQUEST["givet_gaet"] ) { 
    // dette kode udføres kun hvis brugen har svaret
    $svar = $_REQUEST["svar"];
    $antalFlodheste2 = $_REQUEST["flodhest"];
    if ($svar == ($antalFlodheste2 * 5))
    {
        $resultat = "rigtigt";
    }
    elseif ($svar == "")
    {
        echo "-";
    }
    else
    {
        $resultat = "forkert";
    }
}
?>

mvh JakobA
Avatar billede jakoba Nybegynder
04. februar 2003 - 00:42 #2
ups. jeg glemte en ( og en ) i linien
if ( isset( $_REQUEST["givet_gaet"] ) ) {
Avatar billede i11uzion Nybegynder
04. februar 2003 - 02:17 #3
Hmmm, tak for dit hurtige svar Jakob

Jeg har fulgt dine instruktioner, som egentlig også virker dejligt logiske, men nu sker der bare det, at der ikke sker noget... Prøv at tjekke siden nu, og der vil hverken komme et "rigtigt" eller "forkert", selvom man har svaret.

Nogen der kan forklare mig, hvad der nu er sket ?
Avatar billede jakoba Nybegynder
04. februar 2003 - 08:25 #4
Det lukkedes da at komme af med evalueringen af svaret :-)  bare lovlig grundigt.

hvordan ser php-koden ud nu?
Avatar billede i11uzion Nybegynder
04. februar 2003 - 08:48 #5
Hehe jeps, og tak for det da :D

Her er koden, i dens nuværende form:

<!-- random generator -->
<?php
$antalFlodheste = rand(2, 20);
echo "Én flodhest koster 5kr. Hvad koster $antalFlodheste flodheste ?";
?>

<!-- form til indtastning af svar -->
<form action="<?=$php_self?>" method="post">
Svar <input type="text" name="svar">
<input type="hidden" name="flodhest" value="<? echo $antalFlodheste; ?>"
<br>
<input type="submit" value="svar" name="gaet">
</form>
               
<!-- evaluering af svar -->
<?php
$svar = $_REQUEST["svar"];
$antalFlodheste2 = $_REQUEST["flodhest"];
if (isset ($_REQUEST["givet_gaet"]))
{
  if ($svar == ($antalFlodheste2 * 5))
  {
  $resultat = "rigtigt";
  }
  else
  {   
  $resultat = "forkert";
  }
}                 
?>
<br>
<br>
<br>
<u>

<!-- farvekode ved rigtigt svar -->
<font face="verdana" color="#008800" size="3">
<?
if ($resultat == "rigtigt")
{
echo "$resultat";
}
?>
       
<!-- farvekode ved forkert svar -->
<font face="verdana" color="#990000" size="3">
<?
if ($resultat == "forkert")
{   
echo "$resultat";
}
?>
</u>
</b>
</font>


Flere forslag. Hvad har jeg smadret denne gang ? ;)
Avatar billede i11uzion Nybegynder
04. februar 2003 - 09:11 #6
... Ups, det skal lige siges, at jeg har opdaget uoverensstemmelsen mellem submit knappens name og det navn "isset" checker, og det er rettet, men resultatet er det samme...
Avatar billede jakoba Nybegynder
04. februar 2003 - 09:21 #7
desværre, den med knappens navn er også den eneste fejl jeg kan finde :( ellers ser det helt fint ud.

Jo der er en fejl her:

<input type="hidden" name="flodhest" value="<? echo $antalFlodheste; ?>"

inputfeltet mangler sin afsluttende > . Det skal være:

<input type="hidden" name="flodhest" value="<? echo $antalFlodheste; ?>">

for at der er korrekt balance imellem < tegn og > tegn

mvh JakobA
Avatar billede i11uzion Nybegynder
04. februar 2003 - 09:27 #8
Hmmm godt set, og tak for det, den var smuttet...

Nedtur at jeg ikke kan få det til at fungere. Nå, men tak for hjælpen i hvert fald. :)


Jeg lader lige spørgsmålet stå åbent et par dage, og hvis der ikke har været andre forslag, får du pointene...
Avatar billede jakoba Nybegynder
04. februar 2003 - 09:39 #9
Nu ser det da eller ud til at virke.
Avatar billede i11uzion Nybegynder
04. februar 2003 - 10:17 #10
Det tror jeg ikke det gør ?

Det er nok bare fordi jeg selv sidder og roder med det, og prøver nye ting osv., men det originale problem, med at den konkluderer rigtigt/forkert, inden der er tastet et svar, står vist stadig ?
Avatar billede i11uzion Nybegynder
04. februar 2003 - 10:41 #11
jow, du har sgu ret... Det funker... Mærkeligt, det mener jeg ellers ikke, at det gjorde i første omgang...

Min fejl, tak igen :D
Avatar billede i11uzion Nybegynder
04. februar 2003 - 10:48 #12
Hehe, nu fandt jeg ud af, hvorfor det funker nu.

if (isset) skulle evaluere $svar, og ikke submit-knappen...
Avatar billede jakoba Nybegynder
04. februar 2003 - 11:00 #13
prøv denne kode:

<!-- random generator -->
<?php
$antalFlodheste = rand(2, 20);
echo "Én flodhest koster 5kr. Hvad koster $antalFlodheste flodheste ?";
?>

<!-- form til indtastning af svar -->
<form action="<?=$php_self?>" method="post">
Svar <input type="text" name="svar">
<input type="hidden" name="flodhest" value="<? echo $antalFlodheste; ?>"><br>
<input type="submit" value="svar" name="gaet">
</form>
             
<br>
<br>
<br>
<u>

<!-- evaluering af svar -->
<?php                                          // rettelse 1
var_dump( $_request );                        // rettelse 2 DEBUG LINIE
$svar = $_REQUEST["svar"];
$antalFlodheste2 = $_REQUEST["flodhest"];
if (isset ($_REQUEST["gaet"])) {
    if ($svar == ($antalFlodheste2 * 5)) {
        $resultat = "rigtigt";
    } else { 
        $resultat = "forkert";
    }
}               
if ($resultat == "rigtigt") {                  // rettelse 3
?>
<!-- farvekode ved rigtigt svar -->
<font face="verdana" color="#008800" size="3">
<?
    echo "$resultat";
} else                                          // RETTELSE 4
if ($resultat == "forkert") { 
?>
<!-- farvekode ved forkert svar -->
<font face="verdana" color="#990000" size="3">
<?                                              // rettelse 5
    echo "$resultat";
}
?>
</u>
</b>
</font>


rettelse 0:  lavet indrykninger sådan som JEG synes de bør være.
  Det varierer fra person til person hvordan man synes indrykninger skal laves.
  Det alle er enige om er at de SKAL laves og løbende vedligeholdes når man ændrer i sin kode. Det koster en smule tid, men det er decideret umagen værd.

rettelse 1:  flyttet evalueringen ned hvor den skal bruges.
  Der er i småtingsafdelingen. hjælper en lille smule på overskueligheden

rettelse 2:  indsat en debug-linie
  Debug linier er en enorm hjælp når man ikke kan hitte ud af det. Denne fortæller os hvilke felter i formen der blev udfyldt og hvilke værdier de har.
  Tilsidst når alt er rettet og korrekt, fjerner man så debug linierne

rettelse 3:  sat <font kommandoer ind i if sætninger
  Som det var før ville begge <font kommandoer blive skrevet hvadenten resultatet var rigtigt eller forker. men der blev kun skrevet een </font> kommando.
  Den kode php genererer bør være god og gyldig html-kode. En nem måde at chacke er at bruge 'view source' i browseren.

rettelse 4:    indsat 'else'
  En decideret småting.  Hvis $resultat har værdien "rigtigt" er det spild af severtid bagefter at teste om den har værdien "forkert".
  Men servertid er billig :-)) så det er ikke en førsteprioritet at undgå den slags spild.

rettelse 5:    indsat blanktegn mellem <? og echo
  Den er vigtig. Det eneste der må stå umiddelbart efter '<?' er 'php' eller 'xml' eller hvad navn der nu skal bruges til at fortælle serveren at det sæt <? og ?> omkranser en sektion med den type scriptkode i.

mvh JakobA
Avatar billede i11uzion Nybegynder
04. februar 2003 - 15:40 #14
Mange tak for den uddybende beskrivelse. Det er en stor hjælp :]

Nu vil jeg sætte mig ned, og lave noget nyt php :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester