Lag en adressebok med PHP

Forfatter: Louise Ward
Opprettelsesdato: 7 Februar 2021
Oppdater Dato: 16 Kan 2024
Anonim
Learn How to Create an Address Book Using PHP and MySQL
Video: Learn How to Create an Address Book Using PHP and MySQL

Innhold

Denne artikkelen dukket først opp i nummer 228 av .net magazine - verdens mest solgte magasin for webdesignere og utviklere.

MongoDB er en dokumentdatabase designet for ytelse og skalering, men er fortsatt enkel for utviklere å bruke. Begrepet dokumentdatabase blir ofte misforstått - det refererer ikke til PDF- og DOC-filer, men en dokumentdatabase betyr i dette tilfellet lagring av matriser. MongoDB er ofte gruppert med andre ikke-relasjonelle databaser, kalt NoSQ.

MongoDB har to funksjoner som kan betraktes som banebrytende. For det første fungerer den med morsmålstyper, så databasen fungerer for deg i stedet for at du må overholde den. Det føles så naturlig å bare lagre matriser eller objekter at du raskt vil glemme at du bruker en database. For det andre er skjemaet helt fleksibelt, noe som betyr at hver post kan inneholde forskjellige felt. Når vi jobbet med en adressebokapplikasjon, slo det oss at denne fleksible strukturen ville være fantastisk å håndtere alle de forskjellige typer kontakter!

Jeg har adressebokoppføringer for personer som har tre e-postadresser, men ingen postadresse. Så er det tante Flo, som har to postadresser fordi hun migrerer med solen - men hun har ikke mobiltelefon. Denne artikkelen går gjennom hvordan du designer skjemaet som skal brukes med MongoDB, og hvordan vi bygget et PHP-program på toppen av det.


Folk og telefonnumre

Vi kan opprette folk i adresseboken vår og knytte forskjellige typer data til forskjellige mennesker, og deretter lagre dette i MongoDB ved hjelp av PHP. Som et enkelt første eksempel, la oss se en rekke data opprettet i PHP og hvordan du lagrer på MongoDB:

$ mum = array ("name" => array ("first" => "mamma"), "phone" => array (array ("number" => "01234567890", "label" => "work"), array ("nummer" => "07890123456", "label" => "mobil"))); $ mongo = ny Mongo (); $ db = $ mongo-> adresser; $ db-> folk-> lagre ($ mamma);

Først oppretter vi en rekke data, som skal være ganske kjent selv om PHP ikke er ditt morsmål. Deretter oppretter vi en forbindelse til MongoDB-databasen ved å opprette et nytt Mongo-objekt.

PHP-bibliotekene for håndtering av MongoDB er robuste og imøtekommende og har virkelig god dokumentasjon; som standard vil det nye Mongo-objektet bare koble til MongoDB-serveren på localhost, men vi kan sende flere parametere hvis vi trengte å konfigurere dette for en annen måldatabase.


Databaser og samlinger

Få tilgang til adresser egenskapen ber PHP bruke den databasen på MongoDB-serveren vår, og vi lagrer deretter dataene våre i mennesker samling. Samlinger i MongoDB er som tabeller i en relasjonsdatabase, et sted der vi holder lignende poster sammen.

Verken den adresser databasen eller mennesker samling må opprettes på forhånd; MongoDB er designet for å håndtere stadig skiftende og utviklende skjemaer, så det er ikke nødvendig å sette noe i stein. Vær imidlertid forsiktig, for hvis du skriver feil (eller min favoritt, feil flertall) et tabellnavn, blir det ingen feil vist!

Vi kan logge på MongoDB direkte og se på hva vi har i databasen på dette punktet, som vist på bildet nedenfor.

Ser måten telefonnumrene er lagret på, underlig ut for deg? Vi kunne selvfølgelig gjort dette i stedet:


$ mum = array ("name" => array ("first" => "mamma"), "phone" => array ("work" => "01234567890", "mobile" => "07890123456"));

Disse dataene er bare en serie telefonnummer, de tilsvarer hverandre, så vi lagrer dem alle som "Nummer"som vist i det første eksemplet, og fest etiketter til dem. Det er fristende å bruke dette sistnevnte eksemplet fordi det virker litt enklere. I dette tilfellet må vi imidlertid huske på hvordan vi får tilgang til dataene.

Hvis vi lagrer telefonnumre som forskjellige felt, vil vi lete etter et telefonnummer til en person uten å vite om det er en mobiltelefon eller en arbeidstelefon. Strukturen vi har valgt, gjør det enkelt å slå opp en person etter telefonnummer, og gir muligheten til å legge til flere detaljer hvis behovet noen gang oppstår. Så vi har valgt å lagre en liste med telefonnumre for hver person, med litt informasjon vedlagt for å si hva slags nummer det er.

Lagring av adresser

Adressebøker var opprinnelig ment for adresser, så la oss ta en titt på hvordan vi kan formere disse på et par forskjellige steder. For eksempel ser oppføringen for Bob Smith i MongoDB ut som den på bildet ovenfor.

Bob har hus på begge sider av dammen (ett i USA, et i Europa), og du kan se at vi nettopp har brukt feltene som passer til hvordan adressene skal formateres i hvert land, siden MongoDB gjør det mulig for oss . Dette er en av de beste tingene med MongoDB; vi kan bare legge til hvilke felt som er relevante for hver post, og hekke dataene så dypt som fornuftig i hvert tilfelle. Hvis du så min virkelige adressebok med folks telefonnumre, adresser og bursdager (for ikke å nevne barnas fødselsdatoer), alt skribent over plass beregnet på faksnumre, ville du vite hvorfor denne løsningen appellerer så mye!

Dataregistrering

Hittil har vi vært hardkodende matriser med data, så la oss gjøre noe litt bedre for å lage et skjema vi kan bruke til å legge til personer og forskjellige oppføringer for dem. Vi har brukt PHP til å behandle skjemaer for alltid, men det er en ganske viktig del av systemet, så la oss se på bildet som vises til venstre ('Mamma er ordet'). Dette er drevet av et enkelt skjema prosesseringssystem; selve skjemaet er en grunnleggende mal, og den sendes til et skript som bare lagrer en ny post:

hvis ($ _ SERVER ['REQUEST_METHOD'] == "POST") {$ person = array (); // sanitiseif (isset ($ _ POST ['first_name'])) {$ person ['name'] ['first' ] = filter_inngang (INPUT_POST, "first_name", FILTER_SANITIZE_STRING);} if (isset ($ _ POST ['last_name'])) {$ person ['name'] ['last'] = filter_input (INPUT_POST, "last_name", FILTER_SANITIZE_STRING );} $ mongo = ny Mongo (); $ db = $ mongo-> adresser; $ person ['created'] = new MongoDate (); $ db-> people-> save ($ person); header ("Location : list.php ");} annet {// show templateinclude (" input.html ");}

Finn vennene dine

Det er veldig bra å legge inn data i systemet, men vi trenger fortsatt å kunne finne folk etter et av kriteriene. For å se på forskjellige måter vi kan bruke for å finne personer og deres tilknyttede data, bruker vi MongoDB direkte fra kommandolinjen for å spørre om dataene og se resultatene som returneres.

La oss begynne med den enkleste saken og bare se etter personer som har etternavnet Smith. De finne() metoden i MongoDB tar en rekke kriterier om vi bruker den fra kommandolinjen eller fra selve PHP. Her ser vi etter det siste feltet i navnefeltet, og siden dette er JavaScript, kan vi bare bruke en prikk for å bruke den nestede eiendomsverdien som våre kriterier.

db.people.find ({’name.last’: ’smith’});

Dette henter, i sin helhet, postene vi har for alle med en etternavn felt satt til smed i databasen. På nøyaktig samme måte kan vi trekke felt fra adresser som samsvarer med en bestemt verdi og er nestet i posten.

I tillegg til å matche spesifikke verdier, kan MongoDB godta spørsmål som bruker et regulært uttrykk for å matche fragmenter av en verdi; for eksempel prøv dette:

db.people.find ({"address.street": / 61st /});

Dette vil returnere alle adresser med 61. et sted i adressen. gateelement. Det er en standard (preg) implementering av regulært uttrykk, så alt du allerede vet om regulære uttrykk vil gjelde her - noe som gir noen veldig kraftige søkefunksjoner.

Vi kan søke på flere kriterier ved å levere flere kriterier i matrisen når vi søker, så ved å gjøre noe som dette:

db.people.find ({"name.last": "smith", "name.first": "bob"});

Når vi har flere nestede poster, trenger vi imidlertid noe litt mer spesifikt for å si at vi leter etter en adresse i en bestemt stat og by. Hvis vi bare la til kriterier for adresse.stat og adresse.by, ville vi få folk som matchet som hadde flere adresser, hvor en matchet på stat og en matchet på by. For å komme rundt dette bruker vi $ elemMatch operatør for å si at innen en adresse må flere elementer matche - for eksempel kan vi se etter personer med NY-statsadresser som faktisk er i New York City ved å gjøre:

db.people.find ({adresse: {$ elemMatch: {state: ’NY’, by: ‘new york’}}})

Det er mange andre måter å plukke ut nøyaktig dataene du trenger fra MongoDB, og heldigvis gjøres dokumentasjonen veldig bra med klare eksempler - du kan finne alt på mongodb.org.

Geografiske steder

Hvis du så nøye etter, har du kanskje oppdaget koordinatfelt i skjermbildet av Bob Smiths data på side 99. Disse representerer breddegrad og lengdegrad, og MongoDB har noen fine funksjoner for å håndtere det. Innen hver samling kan vi legge til en indeks for å håndheve fornuftige verdier for geografiske data. For dette programmet brukte jeg denne kommandoen:

db.people.ensureIndex ({’address.coordinates’: ’2d’});

De 2d forteller MongoDB at dette er geografiske breddegrad / lengdegradsdata, og det bør derfor være to tall, hver i området +/- 180. Ser vi på dataene vi la ut ovenfor, kan vi se at den britiske adressen gir oss et sted i vakre Cumbria (se bildet nedenfor).

MongoDB vet at dette er geografiske data, så vi kan begynne å bruke geospesifikke funksjoner når vi jobber med det. For eksempel kan vi bruke $ i nærheten operatør for å hente oppføringer nær et gitt breddegrad eller lengdegradspunkt:

db.people.find ({’address.coordinates’: {$ near: [52, -3]}});

Dette returnerer poster for alle adressene i databasen, ordnet etter avstand fra punktet vi ga.

Vi kan forbedre dette søket ved å lete etter adresser innenfor en gitt avstand (avstand er litt av et ullkonsept her fordi vi jobber i bredde og lengdegrad - jorden er ikke flat, og egentlig ville matematikkene være en utmerket artikkel om sin egen) for å finne oppføringer som er i nærheten. Vi kan bruke $ maxDistance operatør, slik:

db.people.find ({’address.coordinates’: {$ near: [52, -3], $ maxDistance: 50}});

Nok en gang, dette finner oss Bobs rekord; vi kunne like gjerne ha brukt grense() funksjon for å returnere et angitt antall poster hvis vi brukte et større datasett, noe som ville være nyttig hvis vi for eksempel leter etter de fem nærmeste vennene å besøke.

Mongo-utvidelsen for PHP gjør det egentlig bare mulig for oss å få tilgang til all MongoDBs funksjonalitet på en sunn måte, så å bruke de samme teknikkene i applikasjonen vår ender opp med å se ganske like ut. Spørringen ovenfor ser slik ut når vi legger den til i applikasjonen vår:

$ mongo = ny Mongo (); $ db = $ mongo-> adresser; $ criteria = array ('address.coordinates' => array ('$ near' => array (53, -3), '$ maxDistance' = > 50)); $ list = $ db-> people-> find ($ criteria); print_r (iterator_to_array ($ list));

Vi vil ha en MongoCursor til en samling i $ listen, som vi kan gjenta for å få resultatene returnert av spørsmålene våre. For små datasett kan du også bruke iterator_to_array () funksjon for å bare gi en matrisestruktur som du kan bruke som du ønsker.

MongoDB og nestede data

Forhåpentligvis har denne artikkelen gitt deg forståelse for hvordan fleksible data kan være ekstremt praktiske å jobbe med ved bruk av MongoDB. Vi unngår å skille ut poster bare for å rekombinere dem hver gang vi henter dataene, men vi kan fremdeles søke dypt innenfor disse postene for å finne ting etter forskjellige kriterier.

Støtten for geospatial søk i MongoDB går langt utover det som vises her, men alt i det gode har det gitt deg en smakebit på hva slags ting du kan oppnå med disse verktøyene.

Populære Publikasjoner
De beste tegnetablettene for animasjon i 2021
Oppdage

De beste tegnetablettene for animasjon i 2021

De be te tegnebrettene for anima jon er ra kt i ferd med å bli bran je tandarden. Proffer og nybegynnere oppdager hvor nyttig det kan være å ha en digital tegneoverflate for å brin...
Topp 5 nye funksjoner i InDesign CC 2014
Oppdage

Topp 5 nye funksjoner i InDesign CC 2014

I 2013 flyttet Adobe fra in tradi jonelle programvare alg modell, Creative uite, til Creative Cloud-abonnement modellen. Det betydde at abonnenter i tedet for å vente et helt år på en n...
Fremtiden er lys for uavhengige B2B-utviklere
Oppdage

Fremtiden er lys for uavhengige B2B-utviklere

Å gå i gang med en karriere om uavhengig utvikler pleide å bety tråling av frilan brett, tadig ka te pro jekter og tenke på fremtiden bare på kort ikt. Men i dag gjø...