Maak een Photo Admin-website met behulp van PHP en jQuery

Graag presenteer ik u deel één van een tweedelige serie over het maken van een fotosite met behulp van PHP, jQuery en AJAX. Oorspronkelijk was ik van plan om de hele tutorial in één screencast te passen, maar dat werd al snel een pijprus toen ik me realiseerde dat er gewoon te veel te coveren was. Niettemin, zelfs als je alleen deze eerste video bekijkt, zou je veel moeten leren.

We halen afbeeldingen op uit een database, maken een eenvoudig loginformulier met authenticatie en zorgen ervoor dat onze database asynchroon wordt bijgewerkt. Klinkt goed? Als dat zo is, laten we erin stappen.


Ons doel

Voor deze les is ons doel om een ​​gedeelte voor fotobeheer te maken waarin een beheerder foto's uit een database kan ophalen en de titel van zijn foto's kan bijwerken door op de betreffende tekst te klikken. Om deze pagina veiliger te maken, maken we ook een eenvoudig lidmaatschapssysteem. In volgende zelfstudies zullen we deze concepten verder uitdiepen.

Onze tabellen maken met MySQL

Open PHPMyAdmin en maak een database met de naam "db". In deze database moeten we twee tabellen toevoegen: 'foto's' en 'gebruikers'.

foto's

In plaats van onze afbeeldingen hard te coderen in ons document, slaan we ze op in een database. Hoewel we deze tabel zo geavanceerd kunnen maken als we willen, houden we het eenvoudig voor nu.

  • id - INT - Primaire sleutel - automatisch verhogen
  • titel - VARCHAR (500)
  • src - VARCHAR (200)

gebruikers

Om onze foto's te kunnen bewerken, moeten we een eenvoudig lidmaatschapsysteem maken waarmee onze gebruiker kan inloggen en zijn foto's kan bewerken. We willen duidelijk niet iedereen gelijk geven!

  • id - INT - Primaire sleutel - automatisch verhogen
  • voornaam - VARCHAR (50)
  • achternaam - VARCHAR (50)
  • email_adres - VARCHAR (75)
  • gebruikersnaam - VARCHAR (25)
  • wachtwoord - VARCHAR (30)

De eenvoudige lay-out maken

Maak een nieuw php-document en voeg het volgende toe aan uw document.

    Mijn fotosite         

Mijn foto's klik op de tekst om de titel te wijzigen.

uitloggen

Maak je niet al te veel zorgen om wat van wat hier is. We zullen alles op tijd bespreken. Maar als snel overzicht importeren we onze jQuery-bibliotheek, een jQuery-lightbox-plug-in en onze aangepaste scripts (die we binnenkort zullen maken). Neem een ​​paar seconden de tijd om het CSS-bestand te bekijken. Ik ga er niet te veel over in dit geschreven artikel - want het is al lang genoeg! Raadpleeg de screencast voor meer informatie. Maar ik verzeker je dat het vrij standaard en eenvoudig is.

Het belangrijkste waar u zich op moet concentreren, is:

 

Dit is het gedeelte waar we onze foto's uit de database halen. Laten we daar nu aan werken. Maak een nieuwe pagina

genaamd "getPhotos.php".

Laten we snel bespreken wat we moeten doen met deze code.

  • Maak een verbinding met de database
  • Haal alle rijen uit de tabel met foto's op
  • Als de verbinding tot stand is gebracht, maakt u een ongeordende lijst.
  • Filter door de rijen en plaats de nodige informatie in lijstitemtags.

Plak de volgende code in uw document:

 query ($ query) of sterven (mysqli_error ($ mysqli)); if ($ resultaat) echo "
    \ n "; while ($ row = $ result-> fetch_object ()) $ title = $ row-> title; $ src = $ row-> src; $ id = $ row-> id; echo"
  • $ title \ n "; echo"

    $ title

    \ n "; echo"
  • \ n \ n "; echo" \ n
";?>

Het eerste wat we moeten doen is een verbinding maken met onze database. In de loop van dit project zullen we dit echter vele malen doen. Laten we dus een andere pagina maken met de naam "database.php" en de informatie daar opslaan. Op die manier hoeven we slechts één bestand te bewerken, mocht dit nodig zijn. Voeg de volgende code toe aan uw database.php-bestand.

 

We maken een variabele met de naam "$ mysqli" en stellen deze in op een nieuw exemplaar van het "MySQLi" -object. We moeten vier parameters doorgeven:

  • database naam
  • de server
  • gebruikersnaam
  • wachtwoord

Om dingen schoon te houden, zullen we die waarden in variabelen plaatsen en ernaar verwijzen. Als de verbinding niet tot stand is gebracht, zeggen we dat hij "zal sterven".

De database opvragen

Laten we nu teruggaan naar ons bestand "getPhotos.php". De volgende stap is om de database te doorzoeken.

 $ query = "SELECT ID, title, src FROM photos"; $ result = $ mysqli-> query ($ query) of die (mysqli_error ($ mysqli));

Onze vraag is uiterst eenvoudig. We halen eigenlijk alles uit de database. Misschien wil je dit aanpassen

vraag om in uw eigen toepassing te passen. We geven de query door met behulp van "$ mysqli-> query ($ query)".

Als die vraag met succes is uitgevoerd, maken we onze ongeordende lijst en voegen we onze afbeeldingen toe.

 echo "
    \ n "; while ($ row = $ result-> fetch_object ()) $ title = $ row-> title; $ src = $ row-> src; $ id = $ row-> id; echo"
  • $ title \ n "; echo"

    $ title

    \ n "; echo"
  • \ n \ n "; echo" \ n
";

We maken een variabele genaamd $ rij die gelijk is aan elk exemplaar van een rij in de database. Zolang er rijen zijn

om te worden opgehaald, zal deze variabele de informatie van die specifieke rij bevatten.

We slaan alle informatie op die we nodig hebben in variabelen. Laten we zeggen dat we in één rij de volgende gegevens hebben.

  • id = 4
  • src = 10.jpg
  • title = "Mijn favoriete foto"

Door $ row-> title uit te voeren, kunnen we die waarde pakken en opslaan in onze $ title variabele. Dus in dit geval $ title = "Mijn favoriete foto"; $ src = "10.jpg"; $ id = 4;.

Alles wat we nu moeten doen, is die informatie toevoegen aan onze afbeelding en ankertags. De laatste regel voegt een invoerveld toe. Hierdoor kan de gebruiker uiteindelijk de titel van de afbeelding asynchroon bijwerken.

Als u "index.php" in uw browser uitvoert, ziet u het volgende:

AJAX-tijd

Nu we de basisindeling van onze site hebben, laten we het ajaxificeren! We beginnen met een samenvatting van wat we met onze PHP moeten doen. Ik vind dat dit veel helpt tijdens het werken.

  • Wanneer de gebruiker op de titel van een specifieke afbeelding klikt, wordt een invoerveld weergegeven waarmee de gebruiker de titel kan wijzigen.
  • Wanneer hij wegloopt van dat invoerveld, gebruiken we AJAX om een ​​SQL-updateverklaring uit te voeren.
  • Om de gebruiker feedback te geven, geven we een div weer die iets zegt in de trant van "Succes. De database is bijgewerkt."

Maak een PHP-bestand met de naam "changePhotoTitle.php" en plak de volgende code in:

?

 query ($ update_query) of sterven (mysqli_error ($ mysqli)); if ($ resultaat) echo "Succes! 
"; echo" De titel van deze foto is gewijzigd in: $ title";?>

We hebben het databasebestand opnieuw nodig. (Zijn we niet blij dat we dat in een apart bestand hebben opgeslagen?) Vervolgens maken we er twee

variabelen. $ title is gelijk aan wat de gebruiker invoert in dat invoerveld. $ id is gelijk aan het respectievelijke id-veld in

de databank.

Om een ​​SQL-injectie te voorkomen, pakken we die postwaarden in met mysql_real_escape_string ().

Updaten van de database

De update is vrij eenvoudig. Werk de tabel met foto's bij en wijzig het titelveld in wat de gebruikers in dat tekstvak invoeren; Wijzig alleen het titelveld met een id gelijk aan $ id. (Raadpleeg de screencast voor een beter begrip.)

Als de update is uitgevoerd, geven we een e-mail van harte door.

Het Javascript implementeren

Om de update zonder postback uit te voeren, zullen we jQuery gebruiken. Maak een nieuw Javascript-bestand met de naam "scripts.js" en

plak in het volgende:

 $ (functie () $ ('h4'). klik (functie () $ (this) .slideUp (). volgende ('invoer'). slideDown ();); $ ('ul # foto's invoer' ) .change (function () var id = $ (this) .parent ('li'). find ('img'). attr ('id'); var thisParam = $ (this); var title = $ ( this) .val (); $ .ajax (type: 'POST', url: 'changePhotoTitle.php', data: 'title =' + title + '& id =' + id, success: function (response) $ ('invoer'). slideUp (); $ (thisParam) .prev ('h4'). tekst (titel) .slideDown (); $ ('# response'). fadeIn (1000) .empty (). toevoegen ( respons) .prepend ('X'); $ ('span # x'). klik (functie () $ ('div # reactie'). fadeOut ('slow');); ); ); );
  • Wanneer de gebruiker op de titel van een afbeelding klikt (de h4-tag), voeren we een functie uit. We zullen de h4-tag verbergen en in plaats daarvan het invoerveld weergeven.
  • We zullen twee variabelen maken. "titel" slaat de waarde op van wat is ingevoerd in het tekstvak. "id" slaat de bijbehorende id op.

AJAX

Met "$ .ajax" bellen we de update. $ .ajax accepteert vier parameters.

  • Type = het type update. In dit geval is het 'Posten'
  • URL = de URL van het bestand dat onze update uitvoert. We hebben dat bestand al gemaakt.
  • Gegevens = de informatie die we gaan doorgeven omPhotoTitle.php te wijzigen. In dit geval geven we de waarde van het tekstvak en het ID door.
  • Succes = dit is de functie die wordt uitgevoerd als de update is uitgevoerd. In deze functie verwijderen we het tekstvak omdat we het niet langer nodig hebben. We gaan terug en geven de h4-tag weer die nu de bijgewerkte waarde heeft.
    Om gebruikersfeedback te bieden, nemen we de "respons" -div die we aan het begin van deze tutorial hebben gemaakt en vullen deze met onze "Gefeliciteerd" echo. Die laatste twee regels laten gewoon een manier toe voor de gebruiker om die "Gefeliciteerd" div te verwijderen. Raadpleeg de screencast voor een volledige uitleg als dat nodig is.

Het aanmeldingsformulier implementeren

Het is duidelijk dat we niet willen dat alleen iedereen de titels van deze afbeeldingen kan bewerken. Dus we zullen een eenvoudig lidmaatschapssysteem maken.

Maak een nieuwe pagina met de naam "login.php" en voeg de volgende code toe:

     Login om foto's te bewerken    

LOG IN

Gebruikersnaam:

Wachtwoord:

Binnen de body-tag hebben we een eenvoudig formulier met twee velden: één voor de gebruikersnaam en één voor het wachtwoord. Wanneer de gebruiker op de knop "Aanmelden" klikt, wordt de informatie van die tekstvakken gepost naar "confirmLoginCredentials.php". Ga je gang, maak die pagina nu meteen en voeg het volgende toe.

 query ($ q) of sterven (mysqli_error ($ mysqli)); if (! mysqli_num_rows ($ result) == 1) header ("Locatie: login.php");  else setcookie ('authorized', 1, 0); header ("Locatie: index.php"); ?>

Normaal slaan we de waarden van die tekstvakken op in variabelen die respectievelijk $ gebruikersnaam en $ wachtwoord worden genoemd. We halen opnieuw ons database.php-bestand op. Onze query haalt de rij uit de database waarin de gebruikersnaam en het wachtwoord gelijk zijn aan wat in die twee tekstvakken is ingevoerd. Er moet slechts één rij worden geretourneerd. Als dat niet gebeurt, wordt de gebruiker teruggeleid naar "login.php". Anders sturen we ze naar de hoofdpagina 'index.php' en stellen een cookie in.

 setcookie ('geautoriseerd', 1, 0);

De naam van onze cookie zal "geautoriseerd" zijn; de waarde is gelijk aan 1; en de vervaldatum is 0. 0 betekent in feite dat wanneer de gebruiker zijn browser sluit, die cookie vervalt.

Wanneer de gebruiker naar de index.php-pagina wordt geleid, moeten we een snel codebestand schrijven dat ervoor zorgt dat de vereiste cookie op de computer van de gebruiker staat. Ga terug naar index.php en voeg de volgende code helemaal bovenaan uw document toe.

 

Als de gebruiker een cookie heeft met de naam 'geautoriseerd' op zijn computer en die cookie heeft een waarde die gelijk is aan 1, geeft u de pagina weer. Maar als ze dat NIET doen, stuur ze dan terug naar login.php.

Uitloggen

De laatste stap in deze zelfstudie is dat de gebruiker kan uitloggen. Zoek de tag op je index.php-pagina die er als volgt uitziet:

 uitloggen

Ik voeg een sleutel / waarde-paar toe aan deze URL. Die waarde wordt doorgegeven aan 'login.php'. Ga naar deze pagina en voeg je laatste stukje code helemaal toe.

 

Als in de querystring de sleutel 'afmelden' gelijk is aan 1, stelt u een cookie in met een verloopdatum van een uur geleden. Hiermee wordt de cookie van de computer van de gebruiker verwijderd.

Eindelijk ben je klaar ... voor nu!

Dus we hebben nogal wat gecreëerd. Helaas zou alles wat ik zou willen doen, pagina's en pagina's bevatten. Misschien zal volgende week Deel 2 worden vrijgegeven. In deel 2 implementeren we het volgende:

  • Schrijf een code waarmee de beheerder de foto's kan bewerken. Als ze niet zijn aangemeld, kunnen ze de foto's bekijken, maar mogen ze deze niet bewerken.
  • Implementeer Lightbox-functionaliteit
  • Maak invoeg en verwijder pagina's
  • Beveilig de site meer
  • Voeg meer validatie toe
  • Maak de site mooier
  • En nog veel meer ...

Heel erg bedankt voor het bekijken van de screencast en het beoordelen van het artikel. Er komt nog meer!