kristiansand php meeting #1
TRANSCRIPT
![Page 1: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/1.jpg)
KristiansandPHP
PHP-nytt fra London, og frontend fokus på skjema
Møte nr 1
![Page 2: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/2.jpg)
PHP user groups
![Page 3: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/3.jpg)
Norden: København, Helsinki og Kristiansand
![Page 4: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/4.jpg)
Agenda
❖ 18:00 velkommen
❖ 18:15 PHP fokus
❖ 19:00 pizza!
❖ 19:15 frontend fokus
❖ 19:45 uformell mingling
❖ 20:00 ferdig
![Page 5: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/5.jpg)
Kort om Morten
❖ Jobbet som webutvikler (frontend og fullstack) i 13 år
❖ Perl, Java, PHP, ASP og ASP.NET
❖ Jobbet for Ericsson, Logit-Systems, Current Software og Netlab
❖ Bakgrunn fra drift, support og opplæring
❖ Hobby-firma, getOnWeb i 12 år (av og til er det litt kjedelig på jobb…)
![Page 6: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/6.jpg)
Hvem er vi?
❖ Navn?
❖ Firma?
❖ Hva du lager?
❖ Hvor mange år har du programmert i?
❖ Hvilke andre språk har du jobbet med?
❖ IDE/editor?
![Page 7: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/7.jpg)
http://phpconference.co.uk/ https://joind.in/event/view/3063 https://youtu.be/os1-plBMaKU?
list=PL_aPVo2HeGF_VdlTpUF6ViNgLC7Raph0i
PHP UK Conference 2015Morten har vært på PHP UK Conference 2015 nettopp, og kom hjem til Norge med mange impulser og fantastiske opplevelser. 700 PHP-nerder samlet i 2 hele dager, foredragsholdere fra USA, Italia, Tyskland og England :-)
![Page 8: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/8.jpg)
![Page 9: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/9.jpg)
Alle andre…
❖ Objekt orientert programmering, alt annet er latterlig…
❖ GIT er selvsagt
❖ Composer er forventet
❖ API, det er kult og alle bruker det
❖ Community, dersom du ikke er en del av det, så går du glipp av mye!
![Page 10: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/10.jpg)
Coderabbi`s råd for læring
❖ Mentor
❖ Lær av andre
❖ Det er mye læring i å lære til andre
❖ Kollega
❖ Code review (begge kan lære)
❖ Open source (viktig for egen læring)
❖ Rubber ducking (code review self)
❖ Pair coding / ekstrem programmering
![Page 11: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/11.jpg)
![Page 12: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/12.jpg)
Lornajane – nytt i PHP❖ Er du på eldre enn v5.5? Oppgrader!❖ date.timezone må settes i v5.5 ellers kan det bli
uforutsigbart❖ Les E_STRICT loggen (nyttig til forbedring, spesielt
ved oppgradering)❖ Traits likner på klasser, men de er PHP snippets som
blir "kopiert" inn❖ Ny passord håndtering i PHP, salt og algoritme i
passordet er sterkt anbefalt!❖ password_hash()❖ password_verify()
❖ Built-in OpCache, opensource fra Zend, men må enables ;-)
![Page 13: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/13.jpg)
![Page 14: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/14.jpg)
Jordi - Composer best practices❖ Jordi og Adermann har lagd Composer❖ Viktig med README.md❖ Kommandoen "composer require " er enklere enn å hacke json-filen❖ Bruk Packagist for å søke etter komponenter❖ Vær bevist på hvilke versjoner du henter ned, spesialtegn hjelper
med kontroll på dette:❖ ^ ~ * er tegn som kan kombineres med versjonsnummer❖ F.eks. ~2 vil gi alle updateringer av versjon, men ikke v3. Bra
oppdatering/kontroll ❖ Og han anbefaler Monolog:
❖ Logs to files, sockets, inboxes, db, web services.❖ Tips for optimalisering:
❖ -optimizer-autoload❖ -prefer-dist
![Page 15: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/15.jpg)
Javier, continuosly delivering
❖ git + github
❖ Jenkins
❖ Ansible
❖ Phing (tilsvarende Ant i Java....)
![Page 16: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/16.jpg)
![Page 17: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/17.jpg)
![Page 18: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/18.jpg)
![Page 19: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/19.jpg)
![Page 20: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/20.jpg)
![Page 21: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/21.jpg)
![Page 22: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/22.jpg)
![Page 23: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/23.jpg)
![Page 24: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/24.jpg)
![Page 25: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/25.jpg)
![Page 26: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/26.jpg)
![Page 27: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/27.jpg)
![Page 28: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/28.jpg)
![Page 29: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/29.jpg)
![Page 30: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/30.jpg)
![Page 31: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/31.jpg)
Rob Allan - API with Apigility (Zend)
❖ Bruk HTTP codes for alt det er verdt!
❖ Apigility provides the boring bits of API building:
❖ Content negotiation, versioning, validation, authentication, documentation
❖ Anbefaling: swagger.io og frisbyjs.com
![Page 32: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/32.jpg)
HTTP Methods for RESTful Services
PUT komplett replace
PATCH enkelte endringer
POST nye objekter
DELETE sletting
GET henting av data
![Page 33: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/33.jpg)
![Page 34: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/34.jpg)
Trust no one!❖ Steps for input:
1. Filter fikser input. Eks: trim();
2. Validering av filtrert data. Eks: epost sjekk, steng lengde
❖ HTTP codes for errors:❖ 400: client error❖ 422: partly wrong data
❖ Gi klare feilmeldinger
![Page 35: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/35.jpg)
![Page 36: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/36.jpg)
Versjon i URL eller i Accept?
![Page 37: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/37.jpg)
Hypermedia in JSON (Collection)
![Page 38: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/38.jpg)
Authentication
❖ HTTP Basic (htpassword) and Digest, for internal APIs
❖ OAuth2 (Facebook, Google…), for public APIs
❖ Correct errors: 401, 403, etc.
![Page 39: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/39.jpg)
MVVM and Silex
❖ Halve salen bruker Silex (Symfony light...)
❖ Bower.io er tilsvarende Composer
❖ MVVM rammeverk:
❖ Angular (mest populært)
❖ Backbone (lang fartstid)
![Page 40: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/40.jpg)
AngularJS fra Google er populær...
![Page 41: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/41.jpg)
OWASP.org - top 10, av Gary Hockin
❖ Basert på omfang og alvorlighetsgrad, har OWASP kommet fram til de viktigste sårbarhetene.
❖ Listen revideres jevnlig.
![Page 42: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/42.jpg)
10. UNVALIDATED REDIRECTS AND FORWARDS
❖ Alternative løsninger:
❖ Whitelist
❖ Bare interne lenker på forward
![Page 43: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/43.jpg)
9. USING COMPONENTS WITH KNOWN VULNERABILITIES
❖ COMPOSER === EPICCOMPOSER === BADNot just your dependencies, but the dependencies of the dependencies of the dependencies…
![Page 44: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/44.jpg)
8. CROSS-SITE REQUEST FORGERY (CSRF)
❖ Use only POST
❖ Require user interaction
❖ Don’t use sticky logins for anything that important
❖ Use CSRF token
❖ Eks: neste gang du går inn på Amazone, så er det kanskje en ukjent bok ihandlevognen din…
![Page 45: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/45.jpg)
7. MISSING FUNCTION LEVEL ACCESS CONTROL
❖ F.eks: delete, uten rettighets sjekk
![Page 46: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/46.jpg)
6. SENSITIVE DATA EXPOSURE❖ If you’re loading your form over
http you’re already too late
❖ Password_hash
❖ Don’t store sensitive data at all
❖ Listen to an expert @ircmaxell
❖ You’re a developer, not a security expert
❖ “Don’t store naked pictures of yourself on a a cloud server you don’t control" - Gary Hockin
![Page 47: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/47.jpg)
5. SECURITY MISCONFIGURATION
❖ You’re a developer, not a security expert
❖ You’re a developer, the code is your problem
![Page 48: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/48.jpg)
4. INSECURE DIRECT OBJECT REFERENCES
❖ F.eks hacke url og få tilgang til noe du ikke burde
![Page 49: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/49.jpg)
3. CROSS-SITE SCRIPTING (XSS)
❖ Escape all user input all the time
❖ Whitelist allowable characters rather than blacklisting bad characters
❖ Good escaping libraries are out there
![Page 50: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/50.jpg)
![Page 51: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/51.jpg)
![Page 52: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/52.jpg)
![Page 53: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/53.jpg)
![Page 54: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/54.jpg)
2. BROKEN AUTHENTICATION AND SESSION MANAGEMENT
❖ Session.Use_only_cookies
❖ Session regeneration
❖ Password confirmation, inni applikasjonen for ekstra sikkerhet på enkelte elementer
❖ “Secure” sessions: $_SESSION[‘ipAdr’] = $ipAdr; if ($ipAdr!== $_SESSION[‘ipAdr’]) session_destroy();
![Page 55: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/55.jpg)
1. INJECTION
❖ Filter all the tings all the time!news.php?news_id=;DROP TABLE news;
![Page 56: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/56.jpg)
Enda et injection eksempel
❖ login.php?user=m.moss&password=1’%20OR%201=1;
![Page 57: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/57.jpg)
PHP har innebygd filter funksjon
❖ $username = filter_var($_GET[‘username’], FILTER_SANITIZE_EMAIL);
❖ $priority=filter_input(INPUT_GET, 'priority', FILTER_VALIDATE_INT);
![Page 58: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/58.jpg)
Use parameterised queries (binding)
❖ $stmt = $pdo->prepare( 'SELECT user_id FROM user WHERE username = :username & password = :password’);
❖ $result = $stmt->execute([ ‘username’ => $username, ‘password’ => $password]);
![Page 59: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/59.jpg)
PHP binding mot Oracle db
$stid = oci_parse($conn,"INSERT INTO mytab (id, text) VALUES(:id_bv, :text_bv)”);
oci_bind_by_name($stid, ":id_bv", $id);
oci_bind_by_name($stid, ":text_bv", $text);
oci_execute($stid);
![Page 60: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/60.jpg)
My debugging and performance toolbox
❖ Charles - http proxy (Fidler for Windows brukere)
❖ XDebug - remote debugging, tips: ini_set("xdebug.scream")
❖ Xhprof - profiling
❖ JMeter - load testing
❖ PHPunit - unit testing
❖ Behat - behavior-driven development
❖ https://github.com/lovesoftware
![Page 61: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/61.jpg)
Frontend - skjema
![Page 62: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/62.jpg)
Skjema - et nødvendig onde…
❖ Skjema står mellom bruker og mål
❖ Login -> tilgang
❖ Registrering ->gi veldighet
❖ Gi info -> få nedlastning
❖ Selvbetjening
❖ Bestille sydentur
❖ Søk og filtrering
![Page 63: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/63.jpg)
Konvertering
❖ Tommelfinger regel: 5% reduksjon pr felt i skjema
❖ Det man forstår vil man lettere oppgi
❖ Det man ikke forstår, vil man være motvillig til å oppgi
❖ Graden av motivasjon har innvirkning på hvor mye motstand man orker å jobbe seg gjennom
❖ Kan du flytte noen spørsmål/valg til etterpå?
![Page 64: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/64.jpg)
Bedre skjema
❖ Økt omsetning
❖ Lavere administrasjonskostnader
❖ Fornøyde brukere
![Page 65: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/65.jpg)
![Page 66: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/66.jpg)
Don`t make me think❖ Tekstene er viktige, både label,
placeholder, hjelpetekst og feilmelding
❖ Bruk riktig input type
❖ Riktig rekkefølge
❖ Intern og ekstern konsekvent design, ikke vær “kreativ”
❖ Det er bedre å fikse, enn å komme med feilmelding (trim, regex, uppercase osv)
![Page 67: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/67.jpg)
Don`t waste my time❖ Ikke spørr om unødvendigheter
❖ Ikke tving meg til å lese lange tekster
❖ Bruk oppslag på postnr, mobil, medlemsnr osv (spesielt viktig på mobile devicer, der inntasting er kostbart)
❖ Ikke spørr om noe som systemet kan/bør vite, er du innlogget, eller kommer via en PURL, så utnytt det til å gjøre det enkelt for bruker
❖ Det som er inn nå, er å gjette hva bruker vil, og så heller ha en undo-mulighet. Noen valg er opplagte…
![Page 68: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/68.jpg)
Brukervennlighet
❖ Tips og hjelp nærme feltet
❖ Feilmelding som er til hjelp
❖ Tydlig design på feilmeldinger
❖ Validering med JavaScipt (evt. ajax, om det trengs en tur til serveren)
❖ Possitiv validering kan i noen tilfeller forbedre skjema betraktelig (f.eks. om ønsket brukernavn er ledig)
![Page 69: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/69.jpg)
Standard fargebruk
![Page 70: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/70.jpg)
Captcha er dårlig brukeropplevelse
❖ Bruk heller et skjult felt
❖ Som skal være tomt
❖ Som skal ha fast innhold
❖ Som skal ha et bestemt innhol, som du programmer mot, serverside
![Page 71: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/71.jpg)
UU - Universal Utforming
❖ http://uu.difi.no/veiledning/nettsider/uu-skolen
❖ Mange krav til skjema
❖ Label koblet med for=id
❖ Hjelpetekster og feilmeldinger
❖ Knapper må være tydelig knapper
❖ Tastatur navigering
![Page 72: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/72.jpg)
HTML kode
❖ pattern og required er glimrende for validering
❖ novalidate på skjema hindrer browser fra å validere, bedre at vi gjør det
❖ data- gir oss utrolig mange mulighet, f.eks. data-msg=“Vi trenger din e-post for….”
![Page 73: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/73.jpg)
Litt jQuery har aldri skadet noen…❖ // vise felt for e-post, dersom man vil ha nyhetsbrev
$(“#nyhetsbrev”).on(“change”, function(){ if($(this).is(“:checked”)) $(“#epost”).slideDown(); else $(“#epost”).slideUp(); });
❖ // vis resten av skjema, dersom bruker trykker på knappen $(“#add”).on(“click”, function(){ $(this).remove(); $(“#more”).fadeIn(); });
![Page 74: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/74.jpg)
PHP snacks
❖ $c = $a ?: $b;
❖ $_POST=array_map(‘trim’,$_POST);
❖ $array = (array)$object;
❖ if (!isset($_SESSION)) session_start();
❖ /* @var $item ItemModel */echo $item->title;
![Page 75: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/75.jpg)
Tools og anbefalinger
❖ http://snipsave.com - ta vare på code snippets
❖ https://security.sensiolabs.org/check - sjekk composer.lock
❖ https://www.transformy.io/#/app - alternativ til Excel for å jobbe med copy&paste og export/import
❖ http://www.webpagetest.org
![Page 76: Kristiansand php meeting #1](https://reader030.vdocuments.mx/reader030/viewer/2022032619/55beded3bb61eb7a3e8b46e5/html5/thumbnails/76.jpg)
jQuery plugins
❖ http://digitalbush.com/projects/masked-input-plugin
❖ http://bootboxjs.com
❖ http://harvesthq.github.io/chosen