saivert Skrevet 13. november 2005 Del Skrevet 13. november 2005 (endret) Jeg har laget et webbasert spill med PHP som heter "Gjett Tallet". Reglene er som følger: Du skal gjette et tall mellom 1 og 10. Gjetter du feil får du tips om du bør gjette høyere eller lavere neste gang. Til slutt gjetter du riktig og får vite hvor mange forsøk du brukte. Så mine bekymringer: Er det riktig måte å bruke sessions på? Hvordan fulfører jeg koden slik at folk kan legge igjen sitt navn i en poengtabell (hiscore)? Jeg er en som pleier å kode ting ved å modifisere andres kode, men dette spillet er gjort helt fra bunn av kun ved å bruke dokumentasjonen på www.php.net. Prøv spillet her: http://home.no.net/nxs/files/gjett_tallet.php Se koden her: http://home.no.net/nxs/files/gjett_tallet.php?showsource=1 Ja! Jeg bruker start.no som host. Jeg har skrevet koden i forbindelse med et kurs på skolen jeg går. Derfor det er et såpass kjedelig spill, så dere behøver ikke kommentere spillet som det er. Det eneste jeg vil ha tilbakemelding på er hvordan koden kan forbedres og fullføres. Endret 13. november 2005 av saivert Lenke til kommentar
Zic0 Skrevet 13. november 2005 Del Skrevet 13. november 2005 Det mest geniale med det scriptet var at tallet enten var 2 eller 6 Lenke til kommentar
trrunde Skrevet 13. november 2005 Del Skrevet 13. november 2005 Fatal error: Call to undefined function: get() in /mnt/home4/n/nx/nxs/public_html/files/gjett_tallet.php on line 27 Skulle legge inn navnet i highscoren Lenke til kommentar
saivert Skrevet 13. november 2005 Forfatter Del Skrevet 13. november 2005 (endret) Jeg vet det er en del feil med skriptet. Jeg posta her for å få hjelp til å fikse skriptet. Se om noen hadde noen råd å gi meg. Men det ser visst ut til at det bare er folk som tror jeg har postet et velfungerende skript og bare skal brife med det. Skjerp dere. Kom med tilbakemelding, ikke bug-reports. Jeg vet det er masse feil med det. Her kan dere se koden: http://home.no.net/nxs/files/gjett_tallet.php?showsource=1 Her kan dere teste spillet: http://home.no.net/nxs/files/gjett_tallet.php Endret 13. november 2005 av saivert Lenke til kommentar
???????? Skrevet 13. november 2005 Del Skrevet 13. november 2005 (endret) Det er et par svakheter med det scriptet, noen av de er ikke lette å vite dersom du ikke har jobbet lenge nok med PHP 1. rand() er det ikke ofte å se i bruk lenre, rett og slett fordi mt_rand() er bedre. 2. Hvorfor sjekker du $_POST['gjett'] == "Gjett" når det ikke er vesentlig? Ikke glem at IE faktisk ikke sender den verdien dersom man står i input feltet og klikker enter. Det du må sjekke, og som er relevant, er at det faktisk er skrevet et tall der. 3. preg_match("/\D/", $_POST['tall']) stemmer ikke overens med feilmeldingen din. I dette tilfellet vil den ikke godta -1 eller 5.5 - som er tall, selv om feilmedingen din påstår at det ikke er det. 4. Flytt session_start() opp, for rett ovenfor der du nå har den så bruker du faktisk en session. 5. Det er litt rart å se på en kode der du skriver (jeg har endret variabelene for å slippe å bla tilbake å sjekke): if ($gjettet == $tallet) { echo "riktig"; } else { if($gjettet > $tallet) echo "høyere"; if($gjettet < $tallet) echo "lavere" } Der vil det bli mye lettere for andre progammere å se logikken dersom du bruker elseif. 6. Hva ønsker du å gjøre med tips funksjonen? Til slutt så må du fikse high scrore funksjonen din. Tips: $_SESSION['forsoek']++; = $_SESSION['forsoek'] += 1; Endret 13. november 2005 av ???????? Lenke til kommentar
saivert Skrevet 13. november 2005 Forfatter Del Skrevet 13. november 2005 Ting jeg har fikset på: 1. Jeg fikk vite av dokumentasjonen til www.php.net at regexp-en "/\D/" matchet tall. Mulig jeg må finne oppe en egen regexp istedet for å bruke de standarduttrykka. 2. Jeg har flyttet session_start lenger opp. 3. Foreløpig er Avslutt knappen (og tilhørende kode) fjernet. Ser vel ingen hensikt med det akkurat nå. I koden if ( $_POST['tall'] > $_SESSION['tallet'] ) { $status .= "lavere"; } elseif ( $_POST['tall'] < $_SESSION['tallet'] ) { $status .= "høyere"; } så skal $_POST['tall'] være over tallet som skal gjettes (lagret i $_SESSION['tallet']) eller under tallet som skal gjettes, men vi har ikke med en situasjon hvor tallet er lik siden brukeren da har gjettet riktig og denne koden ikke vil bli utført i det hele tatt. Tl ????: jeg er uenig med punkt 5 i posten din. Det er faktisk flere ting som skal skje i de forskjellige IF ledda. Jeg skal ikke bare skrive ut riktig eller ikke riktig til skjermen. Og jeg kan heller ikke bruke echo akkurat her da den teksten ville havnet før BODY taggen. Men jeg har allikevel forsøkt å dele det opp noe slik at det skal være lettere å følge for de fleste. Også flere spørsmål: 1. Jeg vil gjerne vite hvordan jeg enkelt kan sjekke om brukeren allerede er i gang med spillet. Koden jeg har valgt nå fungerer til en viss grad, men er ikke helt optimal. Det eneste jeg gjør nå er å sjekke om en session variabel er definert slik som her: // Sjekk om brukeren er igang med spillet. Hvis ikke opprett øktvariablene // vi trenger og sett de til de opprinnelige verdiene. if ( !isset($_SESSION['tallet']) ) { $_SESSION['tallet'] = rand(NUMBER_MIN,NUMBER_MAX); // Nytt tilfeldig tall $_SESSION['forsoek'] = 1; // Nullstill forsøkstelleren til 1 } Jeg har lagt ut koden til både showsource.inc.php og hiscore.inc.php slik at dere kan ta en titt på de også. Lenke til kommentar
???????? Skrevet 13. november 2005 Del Skrevet 13. november 2005 Tl ??: jeg er uenig med punkt 5 i posten din. Det er faktisk flere ting som skal skje i de forskjellige IF ledda. Jeg skal ikke bare skrive ut riktig eller ikke riktig til skjermen. Og jeg kan heller ikke bruke echo akkurat her da den teksten ville havnet før BODY taggen. Men jeg har allikevel forsøkt å dele det opp noe slik at det skal være lettere å følge for de fleste. Du kan gjerne ver uenig med meg, men uansett så er vel poenget som følger hvis $gjettet == $tallet ellers $gjettet < $tallet hvis ikke det igjen så $gjettet > $tallet Du kan ikke under noen omstendigheter få et kriterie der to eller flere av de uttrykkene er sanne. Hvis du har problemer med sånne uttrykk så hjelper det ofte å tenke på de som settninger: Dersom $gjettet == $tallet, hvis ikke så hvis $gjettet < $tallet, og det ikke er det heller så må det er det $gjettet > $tallet. Jeg har aldri sagt at du må bruke echo, det var kun et eksempel. Så lenge du bare har din egen lille kode så et det ingen forsjkell for meg hva du bruker, men dersom dette skal rettes av en lærer eller du en dag vil jobbe som del av et team med programmering så er det viktig å unngå sånne rariteter, for det vil kun føre til at andre programmere ikke helt skjønner hvorfor du har satt det opp sånn. I dette scriptet tar det ikke lang tid å utelukke andre forklaringer, men i større scripts vil det føre til et tidstap. Det er bedre å gjøre det skikkelig, og lære med en gang Lenke til kommentar
saivert Skrevet 13. november 2005 Forfatter Del Skrevet 13. november 2005 (endret) Håper dere sjekke kildekoden før dere svarer også da. Den ligger fortsatt ute her: http://home.no.net/nxs/files/gjett_tallet.php?showsource=1 Det kan jo hende jeg har fikset noe der som jeg ikke nevner i innlegga mine. Jeg bruker også flittig // for å legge igjen kommentarer her og der. EDIT: Jeg vil nå snart ferdigstille skriptet. Det siste som er igjen er hiscore lista, men det regner jeg med er snart i boks. Håper dere følger med videre. EDIT (15 november 2005): Jeg har laget et nytt design på spillet. Har skrevet koden som skal lagre navn i hiscore lista, men det er en bug. Trenger hjelp til å se hva jeg har gjort feil. EDIT (16 november 2005): Jeg har fullført koden som tar seg av toppscoretabellen. Jeg anser hele skriptet for å være ferdig nå. De som vil ha det kan gjerne bruke det på siden sin. Men det hadde vært kjekt hvis dere forteller hvem som har laget spillet. Hele skriptet kan lastes ned i sin helhet (inkludert alle filer som den trenger) her: http://saivertweb.no-ip.com/files/gjett_tallet.zip Start.no (som bruker home.no.net som domene til hjemmesideplassene) sine webservere er meget trege nå om dagen. Selv de korteste og enkleste PHP skript bruker lang tid på å returnere noe til nettleseren. Regner med serverne er overbelastet. Det har jo kommet til en god del flere brukere siden jeg opprette en konto der. Jeg kjører også min egen webserver hvor jeg tester skriptet mitt. Prøv ut her: http://saivert.no-ip.com:380/site/misc/gjett_tallet.php Endret 16. november 2005 av saivert Lenke til kommentar
saivert Skrevet 17. november 2005 Forfatter Del Skrevet 17. november 2005 BUMP! Jeg har nå fullført "Gjett tallet" spillet. Test: http://saivertweb.no-ip.com/files/gjett_tallet.php Last ned: http://saivertweb.no-ip.com/files/gjett_tallet.zip Takk! Lenke til kommentar
???????? Skrevet 17. november 2005 Del Skrevet 17. november 2005 Sjekk highscore listen din, ser ut som du har litt jobb igjen fortsatt! Hint: se på funksjonen strip_tags() Lenke til kommentar
saivert Skrevet 17. november 2005 Forfatter Del Skrevet 17. november 2005 Sjekk highscore listen din, ser ut som du har litt jobb igjen fortsatt! Hint: se på funksjonen strip_tags() 5167081[/snapback] Det er fikset for lengs. Så det veldig kjapt. Hadde først bare brukt htmlentities() på value feltet (det som lagrer forsøksantallet), men nå er også navnet (som er det viktigste å bruke htmlentities på egentlig) tatt. Så nå får dere prøve å finne nye exploits da folkens. Lenke til kommentar
kakkle Skrevet 17. november 2005 Del Skrevet 17. november 2005 (endret) Ville tatt en sjekk til på den highscore listen. Gjør som ?, sier, se på strip_tags funksjonen. Du bør også liste navnene i rekkefølge, slik at det blir en top score liste. Da med navnet til den som hadde minst forsøk øverst. Edit:Gjorde "strips_tags funksjonen" klikkbar. Endret 17. november 2005 av kakkle Lenke til kommentar
saivert Skrevet 19. november 2005 Forfatter Del Skrevet 19. november 2005 Takker for all tilbakemelding! Jeg har nå begynt å bruke strip_tags. Jeg bruker strip_tags før navnenen blir lagret i datafilen (slik holder jeg også innholdet i datafilen mest mulig rent). Siden datafilen blir lest inn i et array can jeg bare sortere arrayet med en av aray_sort funksjonene. Jeg bruker bare endimensjonalt array hvor jeg har en key, value indeling. Neste prosjekt blir et yatzi spill. Først lages det i VB.NET (som et frittstående program) og så kommer en PHP utgave (web applikasjon). Poengtabellen er også sortert med asort(). Hipp hurra! Lenke til kommentar
???????? Skrevet 19. november 2005 Del Skrevet 19. november 2005 Hehe... du er nok ikke helt ferdig med scriptet ditt. Hvis man legger til en highscore uten å ha fylt ut noe kommer man øverst på listen. Du må nok sette en begrensning både for dette og at en person ikke registrerer seg igjen når man har fått en god high score! Lenke til kommentar
kakkle Skrevet 19. november 2005 Del Skrevet 19. november 2005 (endret) Neste prosjekt blir et yatzi spill. Først lages det i VB.NET (som et frittstående program) og så kommer en PHP utgave (web applikasjon). 5175070[/snapback] Hmm... Jeg lagde yatzy i javascript (Javatzy ) og asp (For highscore) for noen år siden. Så på det nå, og det er endel bugs. Men selve yatzyen fungerer helt som det skal. Med "Score-preview" og Undo-funksjon Også er det et reklame-banner helt øverst, som ikke var der da jeg lagde for noen år siden. Highscore greia er basert på at de som spiller er ærlige, og ikke jukser Ikke så veldig vanskelig å finne ut hvordan man kan jukse med highscoren. Hvis du vil, så kan du jo se på det: Javatzy OBS: Alt er laget i javascript, inkludert instruksjoner, og den første siden. Er derfor avhengig av at javascript tillates fra klienten. Endret 19. november 2005 av kakkle Lenke til kommentar
gozzer Skrevet 19. november 2005 Del Skrevet 19. november 2005 Var slett ikke værst det der kakkle Men du burde nok ha jobbet litt med sikkerheten på highscore. Det var ikke fryktelig vanskelig å pynte på resultatet når alle variabler sendes via GET og ikke valideres på noen måte Lenke til kommentar
AmdTommy Skrevet 19. november 2005 Del Skrevet 19. november 2005 (endret) morro.. litt n00b da Endret 19. november 2005 av AmdTommy Lenke til kommentar
saivert Skrevet 19. november 2005 Forfatter Del Skrevet 19. november 2005 morro.. litt n00b da 5177589[/snapback] Ja, jeg er n00b når det gjelder PHP ja. Men vanligvis bruker ikke jeg slike uttrykk da. Ellers: Jeg testa og skrive inn ?hiscore=add og fikk da lagt til nye navn i lista selv om jeg ikke hadde spilt i det hele tatt. Jeg har sjekka om $_SESSION['forsoek_hiscore'] er blank eller ei (er den blank betyr det at man ikke har spilt), men får det fremdeles ikke til. Sjekk kildekoden igjen da: http://saivert.no-ip.com:380/site/misc/gje...hp?showsource=1 Og test spillet her: http://saivert.no-ip.com:380/site/misc/gjett_tallet.php Prøv å legge til navn uten å ha spilt: http://saivert.no-ip.com:380/site/misc/gje...php?hiscore=add PS! Jeg kommer til å benytte min egen webserver fremfor home.no.net siden de er så trege nå om dagen. Lenke til kommentar
kakkle Skrevet 19. november 2005 Del Skrevet 19. november 2005 Var slett ikke værst det der kakkle Men du burde nok ha jobbet litt med sikkerheten på highscore. Det var ikke fryktelig vanskelig å pynte på resultatet når alle variabler sendes via GET og ikke valideres på noen måte 5176518[/snapback] Hehe... Som sagt så er det en god stund siden jeg lagde dette... Er ikke akkurat det beste highscore scriptet, nei, men synes faktisk at selve javascriptet er greit nok. Gadd aldri å fikse på det med highscoren. Glemte nesten av hele scriptet et par uker etter at jeg var ferdig med det Fikk faktisk mail fra en kar som hadde jukset på den måten en gang. Han spurte om jeg kunne slette den, siden han ville oppnå poeng på den riktige måten Skulle jeg laget noe nytt idag, så ville jeg nok ha forbedret highscore delen, og kanskje brukt noe annet enn javascript. Men ville nok ikke brukt serverside språk. Lenke til kommentar
saivert Skrevet 19. november 2005 Forfatter Del Skrevet 19. november 2005 Til gozzer og kakkle : Slutt å kapre tråden da!! Dere kan diskutere det javatzy spillet et annet sted. Men nå har jeg tetta hullet som lot folk registrere seg uten å ha spilt. Bare prøv! http://saivert.no-ip.com:380/site/misc/gjett_tallet.php Explot-test: http://saivert.no-ip.com:380/site/misc/gje...php?hiscore=add 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å