Gå til innhold

Mitt Nummer Spill


Anbefalte innlegg

God Kveld/Dag!

Jeg har nå akkurat lagd meg et nummerspill.

Og lurer på om dere synes koden jeg har lagd er brukbar, kan den forbedres på noen måte.

 

Hadde vært gøy om det gikk ann å få den bedre.

 

	
[color="#ff0000"][b]<?php[/b][/color]
$brukersnr = [color="#0000ff"]$_POST[/color][[color="#8b0000"]'Select1'[/color]];
$rand = [color="#0000ff"]rand[/color]([color="#ff0000"]1[/color],[color="#ff0000"]9[/color]);

[color="#008000"]	if[/color]($brukersnr [color="#0000ff"]==[/color] $rand)[color="#4169e1"]{[/color]
[color="#0000ff"]		echo[/color] [color="#8b0000"]"Du vant med tallet, $brukersnr"[/color];
[color="#4169e1"]	}[/color][color="#2e8b57"]else[/color][color="#4169e1"]{[/color]
[color="#0000ff"]		echo[/color] [color="#8b0000"]"Du tapte, tallet var $rand"[/color];
[color="#4169e1"]	}[/color]
[b][color="#ff0000"]?>[/color][/b]

Lenke til kommentar
Videoannonse
Annonse

Tja, PHP-scriptet ditt slutter aldri. Det bør være linjeskift mellom else og klammeparantesen. Ellers et fint lite skript. Kommentarer i skriptet får ting til å se bra ut, pluss at det er til stor fordel om du skal lære deg hva en funksjon gjør.

Lenke til kommentar
Tja, PHP-scriptet ditt slutter aldri. Det bør være linjeskift mellom else og klammeparantesen. Ellers et fint lite skript. Kommentarer i skriptet får ting til å se bra ut, pluss at det er til stor fordel om du skal lære deg hva en funksjon gjør.

 

Hvordan får jeg til det da?

 

Bruker exit();

Endret av Aldylan
Lenke til kommentar

Du burde validere inputen for eksempel ved å bruke is_numeric for å sjekke om det faktisk er et tall.

 

Jeg forstår ikke helt hva Jørgen Pedersen med at scriptet ikke avsluttes. Det som imidlertid kunne vært smart var å gjøre er å lage en link til skjemasiden slik at de kan spille på nytt.

 

Vil du utvide kan du jo bygge inn en highscorefunksjon.

Lenke til kommentar
Og lurer på om dere synes koden jeg har lagd er brukbar, kan den forbedres på noen måte.

Beklager å måtte si det, men du har en god del feil på bare de få linjene du har posta her. Fra $rand = rand(1,9); nedover har du plassert voldsomt med emptyspace forran hver linje. Dette skal forekomme ikke forekomme her.

 

du skriver ut $brukersnr i echoen din, uten å utføre noe validering whatsoever av inputen. $_POST['Select1']; kunne vært noe helt annet enn et tall, feks strengen <script>alert('x-site attack!')</script>, dette tar du altså ikke høyde for. postverdien kunne i værste fall inneholdt annen kode som kunne stjelt cookiesene dine med passord og brukernavn eller epostadresse o.l

 

Og forteller du brukeren din noen plass at han skal velge et tall mellom 1 og 9? om han velger 11 feks, vil sjekken din aldri slå igjennom.

 

 

http://no2.php.net/manual/en/function.ctype-alpha.php og http://no2.php.net/manual/en/function.is-numeric.php sjekker om en streng betår av bare nummer.

http://no2.php.net/manual/en/function.intval.php og http://no2.php.net/manual/en/function.floatval.php henter ut en nummerisk verdi fra en string.

 

http://no2.php.net/manual/en/function.htmlspecialchars.php og http://no2.php.net/manual/en/function.htmlentities.php escaper output.

 

 

Vil annbefale deg å søke på google etter "cross site attack" og mens du er i gang, "sql injections". Det siste trenger du å vite om når/hvis du begynner med å koble scriptet ditt opp mot en database.

Endret av dabear
Lenke til kommentar

Bruk definisjoner eller et objekt for variabler som ikke skal forandre seg mens et skript kjører.

Bruk filter for å sjekke inndata.

 

<?php
define('GUESS_MIN_RANGE', 1);
define('GUESS_MAX_RANGE', 9);

if (!isset($_REQUEST['Select1']) || (!$brukersnr = filter_var($_REQUEST['Select1'], FILTER_VALIDATE_INT, array('options' => array('min_range' => GUESS_MIN_RANGE, 'max_range' => GUESS_MAX_RANGE))))) {
printf('Trenger et gyldig tall mellom %1$d og %2$d.', GUESS_MIN_RANGE, GUESS_MAX_RANGE);
exit();
} else {
$rand = rand(GUESS_MIN_RANGE, GUESS_MAX_RANGE);

if ($brukersnr == $rand) {
	echo "Du vant med tallet, $brukersnr";
} else {
	echo "Du tapte, tallet var $rand";
}
}

 

Neste steg er å huske svartallet (i session fx) og telle kor mange forsøk som trengs for å gjette riktig. Lykke til. :)

Lenke til kommentar
Jeg quoter meg selv: "PHP-scriptet ditt slutter aldri". Jeg så ikke slutt-tagen der. Høhø:)

 

Vel, sluttagen er strengt tatt ikke nødvendig. Selv bruker jeg den aldri, med unntak av i template-filer.

 

Slutt-taggen er heller ikke anbefalt å bruke, med mindre du skal inn og ut av PHP-modus i en og samme .php-fil. Hvis du avslutter en <?php-tagg vil du kunne risikere at en dårlig editor (eller dårlig programmerer) legger til ekstra whitespace eller annet rask etter taggen, som så PHP vil outputte med en gang. Dette er en av de vanligste årsakene til problemer med $_SESSION-bruk.

 

Å ikke lukke PHP-tagger vil gjøre det slik at du aldri vil outputte noe data uten at du eksplisitt ber om det (eller hvis det har oppstått en feil uten at du har error-handler til å håndtere det), og å få ekstra kontroll over applikasjonen på den måten er vel bare en god ting. :)

Lenke til kommentar

Hva synes dere om nummer spillet jeg har laget da? :ermm:

 

Klikk for å se/fjerne spoilerteksten nedenfor
<?php

if (isset($_POST['utfor']) && ('Spill!' == $_POST['utfor'])) {
	if(!$_POST['nummer']) {
		echo 'hujh';
	}
	else {
		$numbers = array(1, 2, 3, 4 ,5);
			if(!in_array( $_POST['nummer'], $numbers )) {
				echo "Du kan ikke endre noe!";
			}
		else {
		$rand = mt_rand(1, 5);

			if($rand == $_POST['nummer']) {
				echo "Velykket! Tallet ble <strong>" . $_POST['nummer'] . "</strong>!";
			}
			else {
				echo "Mislykket!";
			}

		}
	}
}
if (isset($_POST['utfor']) && ('Spill!' != $_POST['utfor'])) {
echo "Du kan ikke endre noe!";
}
?>
<br /><br />
<form action="" method="post">
Velg tall:
<select name="nummer">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<input type="submit" value="Spill!" name="utfor" />
</form>

Endret av creAtiive
Lenke til kommentar

I alle fall bedre kvalitet enn alt det andre skvipet du har søplet ned PHP-forumet med.

 

if (isset($_POST['utfor']) && ('Spill!' == $_POST['utfor'])) {

Syns det er unødvendig å sjekke verdien til en "knapp". isset( $_POST['submit'] ) holder i bøtter og spann.

Og da kan du bytte ut siste if()'en med en "else".

 

Er heller ikke noe fan av blanding av norsk og engelsk i variabelnavn. Bruk engelsk.

Lenke til kommentar
Hva synes dere om nummer spillet jeg har laget da? :ermm:

 

Hvis du ser på kodeforslaget mitt over kan du kanskje lære noe.

Bruk gjerne range(1, x) istedenfor array(1,2,...,x) for å lage array som inneholder en rekke med tall;

Men in_array og range/array(1,...,x) er mindre gunstig her enn filter_var med options for max og min på input eller en enkel if setning.

if (($input < $min) || ($input > $max)) { /*out of bounds*/ }

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...