Gå til innhold

PHP·pub - Programming With Attitude - and beer


Anbefalte innlegg

Skriptene du har er laget for bruk med register_globals, som gjør at POST/GET-parametre automatisk settes inn i variabler i programkoden din. Dette er grusomt dårlig praksis, og det er vel derfor WAMP nå har endret sin default-innstilling på dette.

 

For å få skriptet ditt til å fungere, kan du modifisere ifelse.php slik:

 

<?php

 

$GoodPasswod = 'acme';

$password = $_POST['password'];

 

 

if ($password == $GoodPassword){

print "<b>Acme Password verified!</b>\n";

}

else {

print "<b>Acme Password incorrect.</b>\n";

}

 

?>

Lenke til kommentar
Videoannonse
Annonse

Hvordan bør man kaste Exceptions? Burde alle pakker/(kanskje tom. klasser) ha egen Exception klasse som man kaster objekter av når noe feil skjer? Eller skal man ha Exceptions for mulige feiltyper, feks. fil manger, database relatert, feil parametere, etc.? Bare lurer på hva folk gjør.

Lenke til kommentar
Hvordan bør man kaste Exceptions? Burde alle pakker/(kanskje tom. klasser) ha egen Exception klasse som man kaster objekter av når noe feil skjer? Eller skal man ha Exceptions for mulige feiltyper, feks. fil manger, database relatert, feil parametere, etc.? Bare lurer på hva folk gjør.

 

Eg ville nok foretrekke å bruke exceptions etter kvaslags feiltype som oppstod som du nevnte over, men eg tror det er mest vanlig å ha ein exception klasse per program eller i noen tilfeller per klasse

Lenke til kommentar
Hvordan bør man kaste Exceptions? Burde alle pakker/(kanskje tom. klasser) ha egen Exception klasse som man kaster objekter av når noe feil skjer? Eller skal man ha Exceptions for mulige feiltyper, feks. fil manger, database relatert, feil parametere, etc.? Bare lurer på hva folk gjør.

 

Eg ville nok foretrekke å bruke exceptions etter kvaslags feiltype som oppstod som du nevnte over, men eg tror det er mest vanlig å ha ein exception klasse per program eller i noen tilfeller per klasse

Synes også det er en bedre måte å gjøre ting på for da kan man legge til diverse debugging metoder i de Exception'ene. Men jeg da kommer vel code egenskapen litt til overs? Hvis man har en Exception til hver feiltype, hva for funksjon har da code?

Lenke til kommentar
Vil nok kunne få bruk for code i f.eks en Database_Exception klasse. Code kan da brukes til å skille mellom de forskjellige typene feil som kan oppstå relatert til database bruk

Ja, det var jo ikke særlig dumt. Av en eller annen grunn så tenkte jeg noe helt annet... veldig ulogisk.

Lenke til kommentar

Dagens skrekkelige oppdagelse i PHP:

Hverken mbstring eller iconv validerer UTF-8 korrekt. F.eks U+D800 og U+FFFE er helt gyldige tegn, noe jeg med 99.9% sikkerhet kan si som er direkte feil. Spesielt at U+D800 til U+DFFF aksepteres er regelrett hårreisende i og med at det ansees som noe som potensielt kan introdusere sikkerhetsproblemer. Jeg fatter overhode ikke hva PHP-utviklerene tenker med her, og jeg håper inderlig dette ikke er standarden for Unicode-støtten i PHP6.

 

Red.: Altså, U+D800 til U+DFFF er surogater, og har ingenting med UTF-8 å gjøre, ei heller UTF-32/UCS-4. Dette er stort sett spesifikt for UTF-16. U+FFFE er en «omvendt» BOM (BOM er U+FEFF), og SKAL være ugyldig, ellers kan det bli tullball når man konverterer til UTF-16, UCS-2, UTF-32/UCS-4 etc. (som jo har BE- og LE-versjoner). Kort sagt er det helt utrolig at slike tegn slippes igjennom.

Endret av Ernie
Lenke til kommentar
  • 2 uker senere...

løste det ved å fjerne htmlenteties() på input. Av en eller annen grunn hjalp det ikke å ha med UTF-8 som argument til den metoden.. *rive seg i håret*

 

Men nå fungerer skriptet, men samtidig er jeg litt åpen for XSS ..

 

Skal se på <form accept>'n, men veldig rart om det må påtvinges når nettleseren allerede påstår den bruker utf-8.

Lenke til kommentar
  • 2 uker senere...

For å lage litt aktivitet her: Hva er det folk gjør når de tester koden sin? Er det andre som også driver «unit testing»?

 

Selv benytter jeg PHPUnit slik at jeg også kan få angitt «code coverage» (som jo er svært nyttig i forhold til oppsatte «test case»).

Lenke til kommentar
For å lage litt aktivitet her: Hva er det folk gjør når de tester koden sin? Er det andre som også driver «unit testing»?

 

Selv benytter jeg PHPUnit slik at jeg også kan få angitt «code coverage» (som jo er svært nyttig i forhold til oppsatte «test case»).

Ettersom jeg har begynt å jobbe med symfony, et rammeverk som minner mye om rails, blir det nok mer testing fremover.

 

Kan kort nevne at symfony skiller seg fra Zend Framework ved at symfony er mer en helheltlig pakke beregnet for å utvikle hele applikasjoner, mens Zend etter min mening er mer en samling komponenter der du kan velge og vrake blandt enkeltdeler som du inkluderer i ditt eget oppsett.

Lenke til kommentar

Håper noen kan opplyse meg litt her...

 

Hva er forskjellen på funksjoner og klasser? Slik jeg ser det er begge to et stykke kode som utføres når du kaller på det, med og uten input. Så, hva er egentelig forskjellen?

 

Edit: Metoder, selvfølgelig

Endret av Raring
Lenke til kommentar

Nå blander du nok. En klasse er noe helt annet. Du tenker kanskje på forskjeller mellom funksjoner og metoder?

 

Forstår at det kan være vanskelig å se forskjell, og jeg aner ikke om det er noen god definisjon der ute.. Men i et objektorientert miljø benyttes metoder. Metodene er definert i ulike klasser, og så lager man objekter av klassene. Mao er klassene "kakeformen" til en pepperkakemann. (Nei, jeg eier ikke gode forklaringsmåter her).

 

Uansett: En metode kalles på et objekt, og utfører da gjerne noe med det. Hvorvidt noe returneres eller ei, er helt opp til deg. Noen ganger ønsker man å returnere noe, andre ganger vil man bare endre tilstanden til objektet.

 

Funksjoner derimot; har lite med objektorientert tankegang: her defineres en funksjon som har ulike innparametre. Typisk må man sende med datagrunnlaget til funksjonen, også får man noe i retur.

 

--

 

Kan prøve på noen eksempler:

Java, metode: 
String tekst = "Hello world";
tekst.toUpperCase();  // HELLO WORLD

PHP, funksjon:
$tekst = "Hello world";
strtoupper($tekst);  // HELLO WORLD

 

Fordelen med førstnevnte er at metoden toUpperCase() er definer i klassen String. Så om du ikke har et string-objekt, klarer du heller ikke å kjøre metoden. Dermed klarer man ikke å lage ugyldig program-kall (kompilatoren vil oppdage feilen).

 

I php derimot kan du egentlig putte inn hva som helst i funksjonen. Også håper funksjonen at det var en tekststreng, og prøver så godt den kan å gjøre om til store bokstaver. Noen ganger fungerer det, andre ganger ikke. Som programmerer får du ikke noe hjelp (utenom at du blir fortalt at det er tekst-strenger som bør sendes inn til funksjonen).

Lenke til kommentar

Litt viktig å legge merke til at i eksempelet med Java vs. PHP-kode bruker qualbeen ikke objektorientering i PHP-eksempelet fordi PHP har string som en innebygget primitiv datatype (som int/double/float/boolean i Java), ikke fordi PHP ikke kan gjøre det Java gjør. :)

 

Java har ikke String som en primitiv datatype innebygget i språket men som en del av rammeverket, på samme måte som en har ulike datatyper og objekter i Zend Framework eller i PEAR.

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...