lop Skrevet 20. august 2008 Del Skrevet 20. august 2008 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
affe90 Skrevet 20. august 2008 Del Skrevet 20. august 2008 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
lop Skrevet 20. august 2008 Forfatter Del Skrevet 20. august 2008 (endret) 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 20. august 2008 av Aldylan Lenke til kommentar
gather Skrevet 21. august 2008 Del Skrevet 21. august 2008 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
dabear Skrevet 21. august 2008 Del Skrevet 21. august 2008 (endret) 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 21. august 2008 av dabear Lenke til kommentar
affe90 Skrevet 21. august 2008 Del Skrevet 21. august 2008 Jeg quoter meg selv: "PHP-scriptet ditt slutter aldri". Jeg så ikke slutt-tagen der. Høhø Lenke til kommentar
OISNOT Skrevet 21. august 2008 Del Skrevet 21. august 2008 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
Alex Moran Skrevet 21. august 2008 Del Skrevet 21. august 2008 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. Lenke til kommentar
jorgis Skrevet 21. august 2008 Del Skrevet 21. august 2008 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
creAtiive Skrevet 25. august 2008 Del Skrevet 25. august 2008 (endret) Hva synes dere om nummer spillet jeg har laget da? 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 25. august 2008 av creAtiive Lenke til kommentar
Martin A. Skrevet 25. august 2008 Del Skrevet 25. august 2008 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
OISNOT Skrevet 26. august 2008 Del Skrevet 26. august 2008 Hva synes dere om nummer spillet jeg har laget da? 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå