Persistent gegevens in een PosgreSQL-database met PHP

  • George Richardson
  • 0
  • 4665
  • 540
>

PHP is een veelgebruikte scripttaal voor servers. Zijn enorme mogelijkheden en lichtgewicht karakter maken het ideaal voor het ontwikkelen van web front-end, en hoewel het mogelijk is om er geavanceerde structuren in te creëren, is het basisgebruik ook gemakkelijk te leren, wat het ook een goed startpunt maakt voor beginners. De gegevens die worden geregistreerd, verwerkt, verzonden of weergegeven door de applicatie die we bouwen, moeten echter ergens worden opgeslagen; onze webpagina is staatloos zonder deze gegevens. We kunnen onze gegevens op veel manieren opslaan of zelfs weggooien na gebruik, maar de meest standaard manier is om ze op te slaan in een database die uitsluitend bedoeld is om gegevens op een betrouwbare manier op te slaan en deze zo nodig zo snel mogelijk te presenteren..

In deze tutorial zullen we een eenvoudige webpagina bouwen om gebruikersgegevens op te nemen en weer te geven. We gebruiken een PostgreSQL RDBMS als backend en ontwikkelen onze applicatie in PHP die op een Apache-webserver draait. Op deze manier hebben we toegang tot onze webapplicatie vanuit elke gangbare browser om onze gebruikersdatabase te bekijken of toe te voegen. Het is de aard van de webapplicatie dat veel gebruikers / operators er tegelijkertijd mee kunnen werken, het enige wat ze nodig hebben is een browser en netwerktoegang tot onze applicatie.

In deze tutorial leer je:
  • Hoe benodigde pakketten voor PostgreSQL-verbinding in PHP te installeren
  • Hoe de databasezijde van de applicatie te creëren
  • Hoe de voorbeeldtoepassing te coderen
  • Hoe u de voorbeeldtoepassing bedient en verifieert
Gegevens opnemen via browser.

Gebruikte softwarevereisten en -conventies

Softwarevereisten en Linux Command Line-conventies
Categorie Vereisten, conventies of gebruikte softwareversie
Systeem Ubuntu 18.04.2
Software PostgreSQL 10.9, php 7.2.19
Andere Bevoorrechte toegang tot uw Linux-systeem als root of via het sudo opdracht.
Conventies # - vereist dat gegeven linux-commando's worden uitgevoerd met root-privileges, hetzij direct als rootgebruiker, hetzij door gebruik van sudo opdracht
$ - vereist dat gegeven linux-commando's worden uitgevoerd als een gewone niet-geprivilegieerde gebruiker

Opmerkingen over softwarecomponenten

We hebben onze applicatie op Ubuntu ingesteld, maar in principe kan dit proces naar elke distributie worden geport. Er zijn verschillen in pakketbeheerders en pakketnamen, evenals in sommige directorypads. Merk ook op dat hoewel we de versies van de bovengenoemde softwarecomponenten zullen gebruiken, deze applicatie met kleine aanpassingen op verschillende versies van de componenten kan worden gebouwd. Ter vergelijking zullen enkele voorbeelden van andere distributies worden opgenomen.

Je merkt misschien dat de applicatie minimalistisch is: dat is met opzet. Het doel van deze gids is om de basisprincipes te tonen van het ontwikkelen van een applicatie die zo eenvoudig mogelijk kan communiceren met een database. Minimale code, minimale componenten. Gebruik deze gids niet om productietoepassingen te bouwen, aangezien het enige beveiligingsmaatregelen, herbruikbaarheid of optimalisatie mist.

Benodigde pakketten installeren

Nadat we de PostgreSQL-database hebben geïnstalleerd, hebben we alleen nog php-ondersteuning nodig. Daarvoor hebben we de php-pgsql pakket. We zullen gebruiken apt om het te installeren:

# apt-get install php-pgsql

Sommige distributies noemen het misschien php7-pgsql en dergelijke, maar alle pakketbeheerders bieden een zoekfunctie, dus het is gemakkelijk om te vinden wat we nodig hebben. Dit is bijvoorbeeld hoe u PostgreSQL installeert op RHEL8 / centOS 8 Linux-systemen.

We moeten ook php, een webserver en ondersteuning van php op de webserver installeren. Dat zijn twee pakketten verwijderd:

# apt-get install apache2 libapache2-mod-php

We kunnen beide services starten zodat ze beschikbaar zijn in de volgende stappen. We zullen gebruiken systemd daarom.

# systemctl start postgresql # systemclt start apache2

Aanmaken van de database en de benodigde objecten

De databasezijde van onze applicatie zal bestaan ​​uit een database, een enkele tabel en een reeks om automatische toewijzing van primaire toetsen te ondersteunen.

  1. We schakelen over naar de postgres gebruiker:
    # su - postgres
  2. Log in op de database:
    $ psql psql (10.9 (Ubuntu 10.9-0ubuntu0.18.04.1)) Typ "help" voor hulp. postgres = #
  3. Maak een nieuwe gebruiker aan:
    postgres = # maak rol voorbeeldgebruiker met inlogwachtwoord 'ExamplePass';
    En een database met de eigenaarsset.
    postgres = # maak database voorbeeldb eigenaar voorbeeldgebruiker codering 'UTF-8';
  4. Na het verlaten van het psql tool maken we een tekstbestand met de naam voorbeeld_tabel.sql met de volgende inhoud:
    maak reeks userid_seq start met 0 increment met 1 no maxvalue minvalue 0 cache 1; verander reeks userid_seq eigenaar in voorbeeldgebruiker; tabelgebruikers maken (userid numerieke primaire sleutel standaard nextval ('userid_seq' :: regclass), gebruikersnaam tekst niet null, e-mailtekst niet null, registration_date timestamp default now ()); verander de eigenaar van de tabelgebruiker in voorbeeldgebruiker;
    Hier maken we een reeks op regel 1 die een unieke primaire sleutel geeft aan elk record in de tabel, en vervolgens het eigendom ervan instellen. Op regel 3 maken we een tabel met de gebruikersgegevens die we zullen opnemen en weergeven met de applicatie. We stellen standaardwaarden in voor de gebruikersnaam en registratie datum, en laat het aan de database over om die velden voor ons in te vullen.
  5. We laden het bovenstaande SQL-bestand in de nieuwe database:
    $ psql -d voorbeeldb < example_table.sql CREATE SEQUENCE ALTER SEQUENCE CREATE TABLE ALTER TABLE

Hiermee is onze database opgezet en klaar voor gebruik. PostgreSQL 10.9 op Ubuntu accepteert standaard wachtwoordbeveiligde aanmeldingen op het loopback-apparaat. Als u andere versies gebruikt, moet u mogelijk het pg_hba.conf om toegang tot de database mogelijk te maken. Er is een voorbeeld in onze Redmine-installatiegids over hoe u dat moet instellen.

De applicatiecode bouwen

Hoewel er zeker veel geweldige tools zijn om werkende broncode te produceren, zullen we die hier niet behandelen, het zou de complexiteit van deze handleiding vergroten. We maken een tekstbestand met de naam opname.php, standaard DOCUMENT_ROOT directory op Ubuntu 18, / var / www / html /. Op andere distributies zou dit kunnen zijn / srv / www / htdocs /, of iets anders. Raadpleeg de configuratie van de webserver als u het niet zeker weet.

PHP is een scripttaal, wat betekent dat we onze code niet hoeven te compileren, maar deze gewoon aan de webserver moeten presenteren, die deze runtime zal interpreteren.

We kunnen een teksteditor voor de opdrachtregel gebruiken, zoals vi of nano om het genoemde php-bestand te vullen met de volgende broncode:

    Gebruiker opname pagina   

Vul het onderstaande formulier in en druk op verzenden om de gegevens vast te leggen.





\ n#GebruikersnaamE-mailadresRegistratie datum\ n "; while ($ row = pg_fetch_row ($ resultaat)) echo"". $ rij [0]."". $ rij [1]."". $ rij [2]."". $ rij [3]."\ n "; echo"\ n "; / * sectie 7 * / pg_close ($ dbconn);?>

We beginnen onze code als een eenvoudige statische HTML-pagina op sectie 1. We maken een formulier op sectie 2 dat geeft de gebruiker de mogelijkheid om gegevens in de applicatie op te nemen. We vragen alleen om een ​​gebruikersnaam en een e-mailadres. Bij sectie 3 we embedden PHP-code in de pagina. Sectie 4 creëert de databaseverbinding met behulp van de verbindingsinformatie die we hebben ingesteld bij de databasestap. Als de verbinding niet tot stand kan worden gebracht, sterft de applicatie met een foutmelding.



Bij sectie 5 we behandelen alle gegevens die voor verwerking worden verzonden met het formulier dat we hebben gemaakt op sectie 2. Als zowel "gebruikersnaam" als "e-mail" is gepost, zullen we controleren of ze niet leeg zijn, en als dat niet het geval is, zullen we ze in de database invoegen met behulp van onze databaseverbinding.

Ongeacht het ontvangen van geposte gegevens, zullen we de databasetabel doorzoeken op reeds geregistreerde gebruikersgegevens op sectie 6. We genereren de benodigde HTML-code om een ​​tabel te leveren die is gevuld met de gegevens die uit de database worden geretourneerd.

Bij setion 7 we sluiten onze databaseverbinding (ruim altijd objecten op die niet meer nodig zijn!), en op sectie 8 we verlaten de PHP-code en maken onze pagina af met eenvoudige HTML-tags. En hiermee is onze applicatie compleet, we kunnen hem gaan gebruiken.

Met behulp van de applicatie

We zullen een browser naar http: //localhost/recording.php. De enige pagina van onze voorbeeldtoepassing wordt weergegeven.

Gebruikerstabel is leeg.

We kunnen de velden van het formulier vullen met willekeurige gegevens om de applicatie te testen. Als er tekst aan beide velden wordt toegevoegd, kunnen we de gegevens indienen.

Het invullen van de formuliervelden met voorbeeldgegevens.

Na het indienen toont de pagina hetzelfde formulier waar we onze volgende gebruiker kunnen opnemen, en ook degene die al is geregistreerd, dat na het invoegen uit de database wordt opgevraagd. We hebben ons doel van een applicatie voor het registreren van gebruikersgegevens voltooid.

Toepassing vermeldt reeds geregistreerde gegevens.

We kunnen ook controleren of de gegevens met succes in de database zijn opgeslagen met psql:

$ psql -d exampledb exampledb = # selecteer * van gebruikers; gebruikersid | gebruikersnaam | e-mail | registratiedatum -------- + ---------- + ------------------------ + ---- ------------------------ 0 | foobar | [email protected] | 2019-06-25 20: 28: 18.224375 (1 rij)


Laatste gedachten

We hebben een voorbeeldtoepassing gemaakt met kennis uit verschillende velden, database, webserver, de HTTP protocol in het algemeen, en natuurlijk PHP-ontwikkeling. Deze gids is bedoeld om te laten zien hoe gemakkelijk het is om iets nuttigs te creëren met de vereniging van deze velden. Ik hoop dat deze gids beginners kan helpen om enkele aspecten van ontwikkeling te begrijpen, en kan aantonen dat het geen ruimtewetenschap is - we hebben hier en daar slechts een paar regels code toegevoegd en het hele ding begint samen te werken.

Hoewel deze voorbeeldtoepassing zijn demonstratiedoel dient, schreeuwt de code en de hele oplossing natuurlijk om verbetering. Om er een paar te noemen…

  • Niets belet een operator om de exacte gebruikersnaam en / of e-mail tweemaal op te nemen. Dat zou resulteren in overbodige records. Dit kan zowel aan de database- (unieke beperking) als aan de toepassingszijde (gegevens verifiëren vóór invoegen) worden afgehandeld.
  • Waar komen de geregistreerde gegevens vandaan? Wat beschermt de applicatie tegen een slechte actor? Op dit moment zou niets, een enkel shellscript voldoende zijn om het te overladen, alleen de standaardverdediging van de webserver is aanwezig - maar dat weerhoudt me er niet van om de volledige Lord of the Rings-trilogie 1000 keer per minuut in een van de velden te posten ( alleen bandbreedte). In deze staat van de applicatie is het eenvoudig om de schijven onder de database te vullen met willekeurige gegevens - verificatie van gebruikersinvoer komt hier weer aan de orde, maar ook authenticatie en autorisatie.
  • Het webdesign ontbreekt op dit moment perfect. Sommige css, wat meer tekst die het werk van de operator helpt, nuttige foutmeldingen… Gebruikersvriendelijkheid is ook een belangrijk gezichtspunt.
  • Natuurlijk is het opnemen van de gebruikersnaam van een gebruiker en de bijbehorende e-mail slechts een voorbeeld, we kunnen voor- en achternaam opnemen, telefoonnummer misschien, meer dan één e-mailbericht per gebruiker ... Al het andere dat handig is om op te slaan.

De lijst kan maar doorgaan. Het is aan jou, de lezer, om je eigen applicatie te verbeteren. Als deze gids je hielp op het pad van ontwikkeling, hetzij als hobby of door te streven naar een professional, dan heeft het zijn doel goed gediend.




Niemand heeft nog op dit artikel gereageerd.

Een verzameling nuttige informatie over het Linux-besturingssysteem en nieuwe technologieën
Nieuwe artikelen, praktische tips, gedetailleerde recensies en handleidingen. Voel je thuis in de wereld van het Linux-besturingssysteem