Sidad utdata (PHP och MySQL). Huvudfiler för alla mallar


/* 09.07.2008 */

Sidad utdata (PHP och MySQL)

Ganska ofta på en webbplats finns ett behov av att visa en stor mängd information av samma typ, och för att underlätta uppfattningen bör den delas upp i delar, dvs. implementera sida för sida visning av denna information. Detta beslut Begagnade sökmotorer när du visar sökresultat, forum, anslagstavlor, etc. Den här artikeln beskriver hur man implementerar paged output med MySQL och PHP.

Till att börja med noterar jag att artikeln inte lär ut hur man arbetar med en databas och PHP, utan ger en förklaring av implementeringen och ger en färdig att använda (sidnavigering).

Låt oss börja! Låt oss säga att det finns en databas (MySQL), till exempel med annonser. Vi måste implementera deras visning på webbplatsen, i portioner om 20 bitar per sida. För att flytta mellan delar, längst ned på varje sida måste du skapa länkar med antalet "portioner" (sidetiketter):

Gå...

Hämtar data i bitar

För att välja ALLA annonser från databasen behöver du en fråga som:

VÄLJ * FRÅN tabell1

Naturligtvis är detta en förenklad version, och i verkliga uppgifter innehåller förfrågan oftast olika förhållanden(VAR, BESTÄLLNING EFTER ... uttalanden).

För att den här frågan ska göra urval i delar måste du lägga till operatorn i den BEGRÄNSA:

LIMIT-satssyntax: LIMIT rad_antal

Valfri parameter offset berättar hur många rader från början av provet du behöver hoppa över, och rad_antal anger hur många rader som behöver väljas, d.v.s. LIMIT 0, 20 (eller bara LIMIT 20 som utelämnar noll offset) väljer de första 20 raderna (raderna 0 till 19), och LIMIT 40, 20 anger att hoppa över 40 (raderna 0 till 39) och välja de nästa 20 (dvs. raderna 40 till 59 kommer att väljas).

Observera att raderna i provet är numrerade från noll, inte från ett.

Så frågorna för vårt annonsexempel skulle vara:

#query för att välja sida 1: VÄLJ * FRÅN tabell 1 GRÄNS 0, 20 #query för att välja sida 2: VÄLJ * FRÅN tabell 1 LIMIT 20, 20 #query för att välja sida 3: VÄLJ * FRÅN tabell 1 LIMIT 40, 20

etc. offsetöka med 20 för varje efterföljande sida, och rad_antal alltid lika med 20.

Det bör också noteras att LIMIT-operatorn i en fråga kommer i ordning efter WHERE , GROUP BY , HAVING , ORDER BY , men om du är ny på MySQL kan du säga att den kommer i slutet av frågeraden (följt av operatörer som används ganska sällan).

Den andra delen vi måste ta itu med är raden med sidetiketter...

Sidgenvägar

Till exempel, för ett urval av de tredje tjugo annonserna kan etiketten se ut så här:

sida nummer 3

När du klickar på den här länken startas obyavleniya.php-skriptet, som har tillgång till parametern page_number, vilket indikerar att 3 tjugo annonser efterfrågas - sida 3. Skriptet hoppar över de första 40 annonserna och väljer de nästa 20.

För att visa denna rad med etiketter måste du veta det totala antalet sidor (för att veta hur många etiketter som ska "ritas"). Vi kan få det genom att dividera det totala antalet annonser med antalet annonser på sidan, avrunda resultatet till ett högre heltal. Det vill säga, om i vårt exempel, låt oss säga, det bara finns 107 annonser, och vi visar 20 av dem på varje sida, kommer antalet sidor att vara: 107 / 20 = 5,35, dvs. 5 helsidor(20 annonser vardera) + en ofullständig (7 annonser), totalt, avrundat uppåt, får vi 6 sidor (det blir alltså 6 etiketter).

För att räkna det totala antalet annonser finns det två sätt. Det första sättet är att köra en separat sammanfattande fråga som nästan liknar frågan för att välja data, bara utan den begränsande LIMIT-operatorn och onödiga sorteringsoperationer (ORDER BY), till exempel:

#query för att välja annonser 3 sidor VÄLJ * FRÅN tabell 1 WHERE category_id="89" OCH ... BESTÄLL EFTER publiceringsdatum DESC LIMIT 40, 20 #query för att räkna ALLA annonser i databasen VÄLJ ANTAL(*) FRÅN tabell1 WHERE category_id="89" OCH ...

Den första frågan väljer annonser, och den andra beräknar deras totala antal med hjälp av COUNT-funktionen. I praktiken kan datahämtningsfrågor vara ganska besvärliga och tunga, så en extra tung fråga för räkning är inte den mest "nödvändiga" operationen. Dessutom är den här vägen inte lika elegant som den andra...

MySQL 4.0.0 introducerade fantastiska saker som funktionen FOUND_ROWS och relaterat till det SQL_CALC_FOUND_ROWS- alternativet för SELECT-satsen.

Låt oss överväga det andra alternativet för att beräkna det totala antalet rader:

VÄLJ SQL_CALC_FOUND_ROWS* FRÅN tabell 1 WHERE category_id="89" OCH ... BESTÄLL EFTER publiceringsdatum DESC LIMIT 40, 20 SELECT FOUND_ROWS()

Återigen gör den första begäran ett urval av annonser, och den andra får det totala antalet, men...

Begär ett urval av annonser i I detta fall skiljer sig från valet från det första alternativet endast i närvaro av alternativet SQL_CALC_FOUND_ROWS. Det här alternativet instruerar MySQL att, tillsammans med dataurvalet, även räkna alla de rader som frågan skulle returnera utan LIMIT-operatorn. De där. faktiskt denna förfrågan inkluderar i en dold form begäran om COUNT från det första alternativet. I det här fallet returneras inte själva det beräknade beloppet utan kommer ihåg av servern. Nu, för att ta reda på detta nummer, måste du utföra en begäran med funktionen FOUND_ROWS (i det här fallet utför servern inga beräkningar, den returnerar helt enkelt vad den kom ihåg tidigare).

Det andra alternativet ser definitivt mer elegant ut och kan också ge vissa hastighetsvinster.

Få alltid att falla på plats

Nu vet du allt du behöver, och jag kan ge en algoritm som beskriver logiken i obyavleniya.php-skriptet för paginering, som startas när användaren går in på annonssidan...

  1. Först och främst, när vi kör skriptet, tittar vi på vilken sida användaren begär (i vårt exempel indikeras detta av parametern page_number);
  2. Baserat på numret på den begärda sidan, beräknar vi offsetparametern för LIMIT-operatören;
  3. vi kör en fråga för att välja annonser med operatören LIMIT offset, 20 (där 20 är antalet annonser som visas på sidan i vårt exempel);
  4. vi får det totala antalet annonser i databasen;
  5. Utifrån punkt 4 beräknar vi det totala antalet annonssidor och skapar en sträng med etiketter.

Det är allt. Nu hoppas jag att du kan skriva ditt eget manus, eller använda mitt, för att förstå essensen av hur det fungerar.

PHP Personsökningsklass för personsökning

Nu ska jag ge ett exempel på hur det är organiserat sidnavigering använder PHP Paging-klassen.

//anslut klassen Paging require("paging.inc.php "); //anslut till databasen$_DB = new mysqli($host,$user,$passwd,$db_name); //skapa en instans av Paging-klassen //som en parameter skickar vi en pekare till MySQL-anslutningen$_PAGING = ny personsökning($_DB); //utför en vanlig dataförfrågan utan att oroa dig //om paginering via metoden get_page för klassobjektet Paging$r = $_PAGING->get_page("VÄLJ * FRÅN tabell1"); while($row = $r->fetch_assoc()) ( //bearbeta data som tas emot från databasen SOM VANLIGT och visa den för användaren } //visa en informationsrad som: "Visas från 1 till 20 av 107" echo $_PAGING->get_result_text()." annonser"; //visa genvägslänkar till föregående och nästa sida echo "Sidor: ".$_PAGING->get_prev_page_link()." ".$_PAGING->get_next_page_link()."

"; //samt en rad med sidnummer (huvudgenvägar) echo $_PAGING->get_page_links(); ?>

Det enda sättet som detta skript skiljer sig från ett vanligt skript utan personsökning är att begäran om ett urval av data som måste delas upp i delar inte görs genom mysqli->query() utan genom metoden get_page() implementerad i Paging klass, samt tre sista raderna som visar etiketter och en urvalsrapportrad.

P.S

P.S.: Jag presenterar detta efterskrift mer för fullständighetens skull än som faktisk relevant information för de flesta läsare.

Användningen av SQL_CALC_FOUND_ROWS och FOUND_ROWS() har vissa fallgropar när de används i UNION-frågor, eftersom LIMIT-satser kan användas på flera ställen och kan påverka både individuella SELECT-satser inom UNION och övergripande resultat UNION i allmänhet. Syftet med SQL_CALC_FOUND_ROWS för UNION är att räkna antalet rader som kommer att returneras utan en global LIMIT . Därför bör villkoren för att använda SQL_CALC_FOUND_ROWS med UNION-frågor anges:

  • Nyckelordet SQL_CALC_FOUND_ROWS måste finnas i det första SELECT-sats ;
  • Värdet på FOUND_ROWS() kommer bara att vara korrekt om UNION ALL används. Om UNION anges utan ALL, uppstår duplikateliminering och värdet på FOUND_ROWS() kommer endast att vara ungefärligt;
  • Om LIMIT inte finns i UNION ignoreras SQL_CALC_FOUND_ROWS och antalet rader i den temporära tabellen som skapats för att köra UNION returneras.

I lektionerna 1 och 2 har du redan lärt dig lite om PHP och konfigurerat (eller kommit åt) en server. Nu är vi redo att skapa vår första PHP-sida. Det blir lätt och enkelt, men efter den här lektionen kommer du redan att veta mycket mer om PHP.

Vanligtvis är en PHP-fil textfil med förlängning .php, bestående av:

  • Text
  • HTML-taggar
  • PHP-skript

Du är redan bekant med text och HTML-taggar. Låt oss nu fokusera på PHP-skript.

PHP-skript

PHP Documentation Group har släppt detaljerad dokumentation. Det finns många länkar till den här dokumentationen i den här handledningen. Målet är att få dig till vana att leta efter svar på dina frågor. PHP är så stort att det inte kan täckas i denna handledning. Men PHP är ganska enkelt! Dessutom, PHP-språk ofta ganska lik vanlig engelska.

Låt oss börja bygga din första PHP-sida.

Exempel: Hej världen!

Låt oss börja skapa ett vanligt HTML-dokument, men låt oss kalla filen page.php och placera den i webbplatsens rotkatalog. Om du använder XAMPP (se lektion 2), kommer sökvägen till filen på din dator (som nu är servern) att vara "c:\xampp\htdocs\page.php".

HTML-koden bör se ut ungefär så här:

Min första PHP-sida

Som du säkert minns från första lektionen, PHP ger kommandon till servern. Så låt oss skriva ett kommando till servern.

Först måste vi berätta för servern var PHP-koden finns börjar Och slutar. I PHP-taggar Och ?> används för att markera början och slutet av block av PHP-kod som servern måste köra (på de flesta servrar räcker det att använda som en starttagg, men kommer att vara mer korrekt när du använder PHP för första gången.)

Låt oss nu försöka lägga till detta kodblock till din HTML-kod:

Min första PHP-sida Hej världen!"; ?>

Om du visar detta PHP-dokument i en webbläsare kommer det att se ut ungefär så här:

Men det kommer att vara intressant att se HTML-koden i webbläsaren (välj "visa källa"):

PHP-koder är borta! Från första lektionen kommer du ihåg att endast servern kan se PHP-koder - klienten (webbläsarprogrammet) ser bara resultatet!

Vi får se vad som händer. Vi ber servern att skriva

Hej världen!

. I mer tekniska termer använder vi ekosträngsfunktionen för att skriva en specialiserad sträng till klienten, med semikolon som indikerar slutet på kommandot. Men oroa dig inte! I denna handledning kommer vi att försöka använda teknisk terminologi till ett minimum.

Vårt första exempel är uppenbarligen inte särskilt imponerande. Men skynda dig inte! Nu blir det mer intressant. Låt oss titta på ett annat exempel.

Exempel: Nu!

Låt oss tvinga servern att skriva något annat. Vi kan till exempel be den att mata ut aktuellt datum och tid:

Min första PHP-sida

I webbläsaren ser vi:

Relevant HTML-kod:

Det blir lite mer intressant, eller hur?

Servern visar datum och tid när PHP-sidan renderas. Observera att när du uppdaterar sidan i din webbläsare kommer den nya tiden att visas. Servern visar aktuellt datum och tid när sidan skickas till klienten.

Observera också att HTML endast innehåller datum och tid, men inte PHP-koder. Därför är detta exempel oberoende av vilken webbläsare som används. I verkligheten utförs all funktionalitet server teknik och alltid fungerar i alla webbläsare!

upd: Var försiktig, texten innehåller satir och kodbrott

PHP-programmeringsspråket går tillbaka till 1995 och är en produkt av eran då moderna webbstandarder föddes, såsom http (version 1.0 - 1996), html (version 2.0 - 1995), javascript (1995), url (1990 - 1994). Ursprungligen stod förkortningen php för Personal Home Page Tools, sedan omvandlad till Hypertext Preprocessor eller "hypertext preprocessor". De kommande styckena kommer att ägnas åt att använda PHP som en förprocessor.

PHP-tolken låter dig infoga speciella taggar i vilken text som helst, med vilken du kan infoga dynamiskt innehåll på sidan, vilket är mycket bekvämt att använda i html-dokument. Det resulterande resultatet skickas omedelbart till standardutgångsenheten, känd som stdout (se för mer information). Det är möjligt att buffra utdata tills det behövs genom ob_start-funktionen, men för vår första html-sida kommer detta inte att behövas. Den senaste html-standarden, nummer 5, introducerade flera nya taggar för att förenkla uppmärkning och göra webben mer läsbar och semantisk (vad det än betyder). Låt oss därför omedelbart dra nytta av HTML5s fulla kraft och skriva en sidmall med inlägg med förbehandlaren i fråga.

Låt oss spara den här sidan i filen index.html. Bloggens funktionalitet i sin första version kommer att innefatta att lagra publikationer i form av html-sidor i en fördefinierad katalog (till exempel sidor/) och en meny som låter dig gå direkt till önskad publikation.

Ett exempel på en publikation som kommer att visas på ett bloggflöde.

Låt oss lägga till en sidor/katalog till projektets rot och spara vår artikel under ett godtyckligt namn, till exempel 2018-trends.html.

Nu behöver vi en webbserver för att behandla inkommande http-förfrågningar från användare och en applikationsserver för affärslogik. För att inte skapa onödiga entiteter kommer vi att skriva ett litet program i programmeringsspråket Go, som kommer att fungera både som webbserver och innehålla bloggkod. För att överföra användarförfrågningar från värdprogrammet till förprocessorn kommer vi att använda standardinmatningsströmmen (stdin) för att serialisera data, vi kommer att använda det populära formatet för dataserialisering - json;

Skript för bearbetning av indata:

Bloggkod:

main.go

paketets huvudimport ("encoding/json" "io/ioutil" "net/http" "os/exec" "strings" "github.com/labstack/echo") func main() ( e:= echo.New() e.GET("/", index) e.GET("/pages/:page", index) e.Start(":8000") ) func index(c echo.Context) error ( outData:= struct ( Menu) string `json:"menu"` Sidsträng `json:"pages"` )() outData.Menu = make(string, 0) outData.Pages = make(string, 0) page:= c.Param("page" ) filer, _ := ioutil.ReadDir("sidor") för _, fil:= intervallfiler ( if !file.IsDir() ( outData.Menu = append(outData.Menu, fil.Namn()) ) if page != "" && page == file.Name() ( fbody, _ := ioutil.ReadFile("pages" + "/" + file.Name()) outData.Pages = append(outData.Pages, string(fbody) )) ) else if page == "" ( fbody, _ := ioutil.ReadFile("pages" + "/" + file.Name()) outData.Pages = append(outData.Pages, string(fbody)) ) ) rendered:= renderContent(outData) return c.HTMBLlob(http.StatusOK, rendered) ) func renderContent(input interface()) byte ( jsonInput, _ := json.Marshal(input) tmplEngine:= exec.Command("php ", "-f", "index.php") tmplEngine.Stdin = strings.NewReader(string(jsonInput)) rendered, _ := tmplEngine.Output() return rendered )


Nu startar vi programmet via go run och gör en förfrågan till sidan via vilken webbläsare som helst, till exempel så här:

Länkar2 http://localhost:8000

Resultatet presenteras på KDPV.

En nyfiken läsare kanske märker att vi förlorar mycket i prestanda genom att lansera en PHP-process för varje begäran. Denna punkt kan enkelt optimeras med hjälp av mekanismen

I den här artikeln pratade jag om hur man får en uppsättning data från en databastabell som motsvarar sidan som valts av användaren. I den här artikeln ska vi titta på Pagineringsutdata i PHP. Pagineringär en lista över själva sidorna. Det finns olika alternativ på Internet, men de lider alla av en sak - en enorm mängd kod för att skapa ett oändligt antal alternativ. Men behöver du verkligen oändlighet? Du behöver bara 1 alternativ, som kommer att finnas på webbplatsen. I den här artikeln är vi med dig låt oss skapa en relativt komplex paginering, men det kommer inte att finnas mycket kod alls.

Till skapa paginering i PHP, måste vi ha flera parametrar vid ingången:

  • count_pages- antal sidor.
  • aktiva- aktuell aktiv sida.
  • count_show_pages- antal sidor som visas. Till exempel om det finns 1000 sidor, då är det mycket problematiskt att visa dem alla. Därför kommer endast den angivna kvantiteten att visas i denna parameter.
  • url- Adressen till sidan för vilken och Paginering skapas.
  • url_page- Adress till sidan med parametern sida utan värde i slutet. Till exempel, " /abc.php?func=create&page=".

Nu kan vi skapa paginering, så här ser det ut PHP:

/* Inmatningsparametrar */
$count_pages = 50;
$aktiv = 15;
$count_show_pages = 10;
$url = "/index.php";
$url_page = "/index.php?page=";
if ($count_pages > 1) ( // Allt detta endast om antalet sidor är större än 1
/* Nästa är beräkningen av den första sidan som ska visas och den sista (så att den aktuella sidan är någonstans i mitten, om möjligt, och så att det totala antalet sidor som visas är lika med count_show_pages, eller mindre om antalet sidor räcker inte) */
$left = $active - 1;
$right = $count_pages - $active;
om ($vänster< floor($count_show_pages / 2)) $start = 1;
annars $start = $active - floor($count_show_pages / 2);
$end = $start + $count_show_pages - 1;
if ($end > $count_pages) (
$start -= ($end - $count_pages);
$end = $count_pages;
if ($start< 1) $start = 1;
}
?>


Jag ska genast säga att även om koden är liten är den ganska komplex för nybörjare. 3 år sedan Jag ägnade mycket tid åt att göra något sånt här och sedan visade sig koden 2 gånger mer.

Och då kan du göra det här Paginering via CSS dekorera som du vill. Du kan också ändra layouten om så önskas (till exempel istället för vinkelparenteser " Föregående sida"och liknande, lägg vackra bilder), det viktigaste är att inte röra PHP-kod.

Den här är väldigt bekväm Paginering implementeras på den här webbplatsen, såväl som på några av mina andra webbplatser.

Skapa en fil med namnet hello.php och lägg den i din webbservers rotkatalog (DOCUMENT_ROOT) med följande innehåll:

Exempel #1 Vårt första PHP-skript: hello.php



PHP-test


Hej världen

" ; ?>

Använd din webbläsare för att komma åt filen med din webbservers URL, som slutar med /hej.php Filreferens. När du utvecklar lokalt kommer denna URL att vara något liknande http://localhost/hello.php eller http://127.0.0.1/hello.php men detta beror på webbserverns konfiguration. Om allt är korrekt konfigurerat kommer denna fil att tolkas av PHP och följande utdata kommer att skickas till din webbläsare:

PHP-test

Hej världen

Detta program är extremt enkelt och du behövde verkligen inte använda PHP för att skapa en sida som denna. Allt det gör är att visa: Hej världen använder PHP eko påstående. Observera att filen behöver inte vara körbar eller speciell på något sätt. Servern får reda på att den här filen måste tolkas av PHP eftersom du använde tillägget ".php", som servern är konfigurerad att skicka vidare till PHP. Se det här som en vanlig HTML-fil som råkar ha en uppsättning speciella taggar tillgängliga för dig som gör många intressanta saker.

Om du provade det här exemplet och det inte matade ut någonting, det bad om nedladdning, eller om du ser hela filen som text, är chansen stor att servern du är på inte har PHP aktiverat eller inte är korrekt konfigurerad. Be din administratör att aktivera det åt dig med hjälp av installationskapitlet i manualen. Om du utvecklar lokalt, läs även installationskapitlet för att se till att allt är korrekt konfigurerat. Se till att du kommer åt filen via http med servern som ger dig utdata. Om du bara tar fram filen från ditt filsystem kommer den inte att tolkas av PHP. Om problemen ändå kvarstår, tveka inte att använda något av de många alternativen.

Poängen med exemplet är att visa det speciella PHP-taggformatet. I det här exemplet använde vi för att indikera början av en PHP-tagg. Sedan lade vi PHP-satsen och lämnade PHP-läget genom att lägga till den avslutande taggen, ?> . Du kan hoppa in och ut ur PHP-läge i en HTML-fil som denna var du vill. För mer information, läs avsnittet i manualen om den grundläggande PHP-syntaxen.

Notera: En anteckning om linjeflöden

Radmatningar har liten betydelse i HTML, men det är fortfarande en bra idé att få din HTML att se snygg och ren ut genom att lägga in radmatningar. En linefeed som följer direkt efter en stängning ?> kommer att tas bort av PHP. Detta kan vara extremt användbart när du lägger in många block av PHP eller inkluderar filer som innehåller PHP som inte ska mata ut något. Samtidigt kan det vara lite förvirrande ?> för att tvinga ett mellanslag och en radmatning att matas ut, eller så kan du lägga en explicit radmatning i det sista ekot/utskriften från ditt PHP-block.

Notera: En anteckning om textredigerare

Det finns många textredigerare och integrerade utvecklingsmiljöer (IDE) som du kan använda för att skapa, redigera och hantera PHP-filer. En ofullständig lista över dessa verktyg finns på » PHP Editors List. Om du vill rekommendera en redaktör, besök sidan ovan och be sidans underhållare att lägga till redaktören i listan. Att ha en editor med syntaxmarkering kan vara till hjälp.

Notera: En anteckning om ordbehandlare

Ordbehandlare som StarOffice Writer, Microsoft Word och Abiword är inte optimala för att redigera PHP-filer. Om du vill använda en för detta testskript måste du se till att du sparar filen som oformatterad text eller PHP kommer inte att kunna läsa och köra skriptet.

Notera: En anteckning om Windows Notepad

Om du skriver dina PHP-skript med Windows Notepad måste du se till att dina filer sparas med filtillägget .php. (Anteckningsblock lägger till ett .txt-tillägg till filer automatiskt om du inte vidtar något av följande steg för att förhindra det.) När du sparar filen och ombeds ange ett namn för filen, placera filnamnet inom citattecken (dvs. " hello.php "). Alternativt kan du klicka på rullgardinsmenyn "Textdokument" i dialogrutan "Spara" och ändra inställningen till "Alla filer". Du kan sedan ange ditt filnamn utan citattecken.

Nu när du framgångsrikt har skapat ett fungerande PHP-skript är det dags att skapa det mest kända PHP-skriptet! Ring ett samtal till phpinfo() funktion och du kommer att se mycket användbar information om ditt system och inställningar, såsom tillgängliga fördefinierade variabler, laddade PHP-moduler och konfigurationsinställningar. Ta dig tid och granska denna viktiga information.

Exempel #2 Få systeminformation från PHP







2024 gtavrl.ru.