Inactiviteit beoordeling toevoegen php. Handleiding voor aangepaste berichttypen: creatie, weergave en aanvullende velden

Op een dag besloot je om je eigen website of blog te maken, en als beheersysteem koos je voor WordPress... Naarmate de tijd verstreek, werd je site steeds leesbaarder en toen realiseerde je je dat je voor een nog grotere populariteit een beetje functionaliteit moet toevoegen naar de site of automatiseer eenvoudigweg een deel van die actie.

Je gaat naar het “magazijn” van wordpress plugins en ontdekt dat de plugin die je nodig hebt er niet is. Wat moeten we doen? Wat moet ik doen? Als je op zijn minst een beetje bekend bent met de basisprincipes van programmeren in PHP, lay-out, dan zal het niet moeilijk voor je zijn Schrijf zelf een plugin voor WordPress.

Laten we nu naar de “keuken” gaan om onze plug-in voor te bereiden.

P.s. Als je geen kennis hebt van php en lay-out... maak je geen zorgen, vraag iemand om je de benodigde functionaliteit te schrijven :)

Voordat u begint met het schrijven van een plug-in, moet u de WordPress-documentatie raadplegen, waarin de basisprincipes van het schrijven van plug-ins en enkele codevoorbeelden worden beschreven.

Ik zal deze informatie niet dupliceren, maar ga direct door met het schrijven van de code.

Laten we een eenvoudige plug-in schrijven waarmee u recensies over uw site kunt opslaan en weergeven. Natuurlijk bestaan ​​dergelijke plug-ins al, maar dit voldoet prima als voorbeeld.

Het eerste dat we gaan doen is een unieke naam bedenken voor onze plug-in - “ AdvUserReviews«.

Vervolgens zullen we een nieuwe map “advuserreviews” aanmaken in de map van uw site “/wp-content/plugins/”. En daarin zullen we een bestand “advuserreviews.php” maken. Dit zal het hoofdbestand zijn dat verantwoordelijk is voor de algemene initialisatie. (Het is raadzaam om UTF-8-codering voor bestanden te gebruiken).

Helemaal aan het begin van het bestand moet u basisinformatie over de plug-in opgeven

Als u nu naar het configuratiescherm gaat, kunt u zien dat het systeem een ​​nieuwe plug-in heeft gevonden en aanbiedt deze te activeren. Maar het is nog te vroeg om dit te doen.

We zullen onze nieuwe plug-in in OOP-stijl schrijven en alle gegevensverwerking zal in één bestand worden opgeslagen. Laten we het hoofdskelet van het bestand maken.

// Stop directe oproep if(preg_match("#" . basename(__FILE__) . "#", $_SERVER["PHP_SELF"])) ( die("Je mag deze pagina niet rechtstreeks oproepen."); ) if (!class_exists("AdvUserReviews")) ( class AdvUserReviews ( // Interne gegevens opslaan public $data = array(); // Objectconstructor // Initialiseren van de hoofdvariabelenfunctie AdvUserReviews() ( ) ) ) global $rprice; $rprice = nieuwe AdvUserReviews();

Laten we nu de volgende code toevoegen aan de objectconstructor:

Functie AdvUserReviews() ( global $wpdb; // Declareer de initialisatieconstante van onze plug-in DEFINE("AdvUserReviews", true); // Bestandsnaam van onze plug-in $this->plugin_name = plugin_basename(__FILE__); // URL-adres voor onze plug-in $ this->plugin_url = trailingslashit(WP_PLUGIN_URL."/".dirname(plugin_basename(__FILE__))) // De tabel voor het opslaan van onze beoordelingen // de $wpdb-variabele moet globaal worden gedeclareerd $this->tbl_adv_reviews = $ wpdb->prefix . "adv_reviews"; // Functie die wordt uitgevoerd wanneer de plug-in wordt geactiveerd register_activation_hook($this->plugin_name, array(&$this, "activate") // Functie die wordt uitgevoerd wanneer de plug-in wordt geactiveerd deactivated register_deactivation_hook($this->plugin_name, array) (&$this, "deactivate") // Functie die wordt uitgevoerd bij het verwijderen van de plug-in register_uninstall_hook($this->plugin_name, array(&$this, "uninstall") );

In de objectconstructor gebruiken we 3 “haken” of “haken” (wat zijn dat?): register_activatie_hook, register_deactivatie_hook En register_uninstall_hook- dit zijn de functies die worden uitgevoerd wanneer de plug-in respectievelijk wordt geactiveerd, gedeactiveerd en verwijderd.

Laten we deze functies nu direct implementeren.

/** * Activeer de plug-in */ functionactivate() ( global $wpdb; require_once(ABSPATH . "wp-admin/upgrade-functions.php"); $table = $this->tbl_adv_reviews; // Bepaal de mysql-versie if (version_compare(mysql_get_server_info(), "4.1.0", ">=")) ( if (! empty($wpdb->charset)) $charset_collate = "STANDAARD TEKENSET $wpdb->charset"; if (! empty( $wpdb->collate)) $charset_collate .= "COLLATE $wpdb->collate" ) // Structuur van onze tabel voor recensies $sql_table_adv_reviews = "MAAK TABEL `".$wpdb->prefix."adv_reviews` ( `ID` INT(10) UNSIGNED NULL AUTO_INCREMENT, `review_title` VARCHAR(255) NOT NULL DEFAULT "0", `review_text` TEXT NOT NULL, `review_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `review_user_name` VARCHAR(200) NULL, `review_user_email` VARCHAR(200) NULL, PRIMARY KEY (`ID`))".$charset_collate.";"; // Controleer of de tabel bestaat als ($wpdb->get_var("show tabellen zoals "".$table. """ ) != $table) ( dbDelta($sql_table_adv_reviews); ) ) /** * Deactiveer de plug-in */ function deactivate() ( return true; ) /** * Een plug-in verwijderen */ function uninstall() ( global $wpdb; $wpdb->query("DROP TABLE IF EXISTS ($wpdb->prefix)adv_reviews"); )

Variabel $wpdb Verantwoordelijk voor queries op de database. Functie dbDelta ontleedt de huidige tabelstructuur, vergelijkt deze met de gewenste tabelstructuur en voegt de tabel toe of wijzigt deze indien nodig.

Wanneer de plug-in wordt geactiveerd, wordt er dus een tabelstructuur gemaakt om beoordelingen op te slaan. Wanneer de plug-in wordt gedeactiveerd, vindt er geen actie plaats, maar wanneer deze wordt verwijderd, verwijderen we onze tabel. De acties kunnen gedetailleerder worden begrepen vanuit de broncode.

De basisstructuur van de nieuwe plug-in is klaar. Nu moeten we beginnen met het schrijven van het functionele gedeelte. Om dit te doen, moeten we de volgende regels code toevoegen aan de klassenconstructor:

// Als we in de admin zitten. interface if (is_admin()) ( // Stijlen en scripts toevoegen add_action("wp_print_scripts", array(&$this, "admin_load_scripts")); add_action("wp_print_styles", array(&$this, "admin_load_styles")); // Voeg een menu toe voor de plug-in add_action("admin_menu", array(&$this, "admin_generate_menu") else ( // Voeg stijlen en scripts toe add_action("wp_print_scripts", array(&$this, "site_load_scripts") ) ; add_action("wp_print_styles", array(&$this, "site_load_styles")); add_shortcode("show_reviews", array (&$this, "site_show_reviews");

Laten we dit codegedeelte in meer detail bekijken. Laten we beginnen met het administratiepaneel.
Functie " is_admin» controleert in welke modus we momenteel werken - op de website of in het controlepaneel.
Vervolgens worden verschillende haken gebruikt voor functies:

  • wp_print_scripts- Voeg de benodigde javascript-bestanden toe
  • wp_print_styles- Voeg de nodige stijlen toe
  • beheerdersmenu- Een nieuw menu toevoegen aan het bedieningspaneel

Elke haak komt overeen met een geïmplementeerde methode in onze klasse. Waarin de noodzakelijke handelingen worden uitgevoerd.
Laten we eens kijken naar de code voor het verbinden van stijlen en scripts

/** * Laden van de benodigde scripts voor de beheerpagina * in het beheerpaneel */ function admin_load_scripts() ( // Registreer scripts wp_register_script("advReviewsAdminJs", $this->plugin_url . "js/admin-scripts.js") ; wp_register_script( "jquery", $this->plugin_url . "js/jquery-1.4.2.min.js"); Voeg scripts toe aan de pagina wp_enqueue_script("advReviewsAdminJs"); de benodigde stijlen voor de controlepagina * in het beheerpaneel */ function admin_load_styles() ( // Registreer stijlen wp_register_style("advReviewsAdminCss", $this->plugin_url . "css/admin-style.css"); // Voeg stijlen toe wp_enqueue_style( "advReviewsAdminCss");

Hier worden de volgende functies gebruikt.

Elke actie is afhankelijk van de doorgegeven parameter “actie”, respectievelijk “bewerken” - een recensie bewerken, "verzenden" - een bewerkte recensie opslaan en "verwijderen" - een recensie verwijderen.

Gegevensuitwisseling met weergavepagina's vindt plaats via de objecteigenschap "data". De broncode van deze pagina's wordt aan het einde van het artikel bij deze module in het archief geplaatst. Ik zal ze hier niet invoegen, omdat het onderwerp al behoorlijk groot is.

Hier eindigen we met het beheerpaneel en gaan we verder met het weergeven en toevoegen van beoordelingen van gebruikers.

Om WordPress te vertellen wanneer onze plug-in moet worden aangeroepen, moeten we ‘shortcode’ registreren, wat is gedaan in de constructor van onze klasse. Lees hier meer over.

Add_shortcode("show_reviews", array(&$this, "site_show_reviews"));

Nu kunt u de volgende code op elke pagina van de site plaatsen en het zal forceren dat de functie die we hebben opgegeven (doorgegeven als de tweede parameter) wordt uitgevoerd. Hieronder vindt u de broncode voor deze functie.

/** * Lijst met recensies op de site */ public function site_show_reviews($atts, $content=null) ( global $wpdb; if (isset($_POST["action"]) && $_POST["action"] = = " add-review") ( $this->add_user_review(); ) // Selecteer alle recensies uit de database $this->data["reviews"] = $wpdb->get_results("SELECT * FROM `" . $ this->tbl_adv_reviews . "`", ARRAY_A); ## Schakel uitvoerbuffering ob_start in (); include_once("site_reviews.php"); ## Haal gegevens op $output = ob_get_contents (); ) privéfunctie add_user_review() ( global $wpdb; $inputData = array("review_title" => strip_tags($_POST["review_title"]), "review_text" => strip_tags($_POST["review_text"]), " review_user_name " => strip_tags($_POST["review_user_name"]), "review_user_email" => strip_tags($_POST["review_user_email"]),); // Voeg een nieuwe recensie toe aan de site $wpdb->insert($this- > tbl_adv_reviews, $inputData);

In principe is hier niets ingewikkelds: er wordt een SQL-query uitgevoerd om gegevens te selecteren, maar als de parameter "actie" wordt doorgegeven, wordt eerst een nieuwe beoordeling toegevoegd. Maar het is de moeite waard om aandacht te besteden aan uitvoerbuffering. Dit is noodzakelijk om de gegevens van de ingevoegde pagina te verkrijgen.

Dat is alles. Nu kunnen we zien wat we hebben. A plug-in en broncodes downloaden dat kan hier.

Dit is natuurlijk slechts een voorbeeld van het maken van een plug-in, maar het zal ook werken als een eenvoudige gast-app als je deze een beetje aanpast, bijvoorbeeld door bescherming tegen bots en pagina-voor-pagina-uitvoer toe te voegen. Veel codeerplezier :)

Formulier op de website:

Configuratiescherm voor plug-ins:

Beoordeling bewerken:

Mogelijk bent u ook geïnteresseerd in:


Een full-stack-framework dat sneller is dan de meeste, zo niet alle, microframeworks. Dit raamwerk is niet voor beginners. Het geeft je de tools, maar het is aan de ontwikkelaar om ze te implementeren. Als je echt inzicht hebt in PHP en de prestaties van belang zijn, zoek dan niet verder. De documentatie is grondig, maar niet gericht op beginners, en de community is enigszins schaars, maar ik kan de prestaties niet genoeg benadrukken. Dit framework brengt mijn PHP-applicaties op een prestatieniveau met JAVA-applicaties.

Phlacon is vanuit mijn oogpunt niet alleen het snelste raamwerk op de markt, maar biedt ook diverse features en mooie componenten. Ook erg goed te gebruiken als MicroFramework voor restfull API's of volledig MVC-framework. Wordt geleverd met C ORM en twig-template-engine. Wat ik ook erg op prijs stel is hoe het raamwerk dynamisch is, je gebruikt alleen wat je wilt, je kunt het eenvoudigweg vervangen klassen en bibliotheken voor aangepaste klassen of beïnvloeden de stroom met gebeurtenissen.

Heel goed gedaan, het enige probleem is de gemeenschap, maar ik geloof dat deze heel snel zal groeien :)

Phalcon is ongetwijfeld een van de snelste raamwerken die er zijn, en dat is het sterke punt. Aan de andere kant is de documentatie een beetje ongeorganiseerd, webtools (codegenerator) hebben grote problemen in Windows, en er ontbreekt nog steeds een beetje meer een community om nieuwe ontwikkelaars te helpen. Maar nogmaals, prestaties, WOW.

Antwoord

Gebaseerd op https://toster.ru/q/276441 Het is duidelijk dat veel afhangt van het project, dus dit bericht moet aan jouw geval worden aangepast.

* Veiligheid:
- Elk argument van een eenvoudige typemethode moet worden gecontroleerd op type bij proxying en op grenswaarden bij verwerking. Als er iets misgaat, wordt er een uitzondering gegenereerd. Als een methode met meerdere argumenten voor 80% uit verificatie van argumenten bestaat, is dit heel normaal))
- Geen trigger_error, alleen uitzonderingen.
- Uitzonderingen MOETEN voor mensen begrijpelijk zijn, allerlei soorten “Er is iets misgegaan” kunnen aan de gebruiker worden gegeven, maar de log moet een uitzondering bevatten met een stacktrace en een voor mensen begrijpelijke beschrijving van wat daar mis is gegaan.
- Elk argument (object) van een methode moet een typehint hebben naar zijn klasse of interface.
- Bij evaluatie wordt in de regel een zware berisping gegeven
- @ is alleen toegestaan ​​in wanhopige situaties, bijvoorbeeld de json_last_error check.
- Voordat u met de database gaat werken, is het verplicht om de gegevens te controleren.
- Nee == en!=. Met schakelaar - de enige uitzondering, afhankelijk van de situatie.
- Als de methode niet alleen bool retourneert, maar ook iets anders, is een strikte controle met ===, or!== vereist.
- Geen voorwaarden bij opdrachten binnen. while($row = ...) is ook onaanvaardbaar.
- Magische getters/setters zijn alleen toegestaan ​​in wanhopige situaties, anders zijn ze verboden.
- Aaneenschakelingen in sql - alleen in hopeloze situaties.
- Parameters in sql - ALLEEN via tijdelijke aanduidingen.
- Geen globale variabelen.
- Datums in de vorm van een string zijn alleen toegestaan ​​in sjablonen en in de database worden ze onmiddellijk geconverteerd naar \DateTimeImmutable (in wanhopige situaties is \DateTime toegestaan)
- Natuurlijk hangt het af van het project, maar in de regel zouden er slechts twee toegangspunten moeten zijn: index.php voor het web en console (of iets anders genaamd) voor de console.

* Codestyle PSR-2 + PSR-5 tenminste, + een aantal strengere eisen (om te beginnen wordt alles wat in PSR is gemarkeerd als MOET)
- In PhpStorm mag geen enkele regel worden gemarkeerd (de uitzondering zijn typefouten, het woordenboek kent bijvoorbeeld sommige afkortingen die in uw project zijn gebruikt niet). In dit geval is het toegestaan ​​om /** @noinspection *** */ te gebruiken voor hopeloze situaties.
- Als iemand zegt dat hij in een andere editor schrijft en het is niet gemarkeerd, stuurt hij het nog steeds ter revisie.

* Code organisatie:
- Geen globale functies.
- Klassen zonder naamruimte zijn alleen toegestaan ​​in extreem wanhopige situaties.

* De testbaarheid (in de zin van testgemak) van de code moet hoog zijn.
- Codedekking is vereist voor alle mogelijke gevallen waarin elke openbare methode wordt gebruikt met afhankelijkheidsspots.

* MVC-principes:
- Geen verwerking van gebruikersinvoer in modellen, letterlijk helemaal niet.
- Geen vragen naar de database vanuit sjablonen.
- Geen layout/js/css/sql-in in controllers.
- Er zit GEEN MAGIE in de modellen, alleen privé-eigendommen + getters met setters.
- Modellen mogen de opslagmethode alleen in uitzonderlijke situaties gebruiken (als die er is, natuurlijk). In alle andere gevallen: invoegen of bijwerken.

* SOLIDE principes:
- Geen universele objecten die alles kunnen.
- Indien de methode voor intern gebruik privé is, niet openbaar.
- Statische methoden zijn alleen toegestaan ​​in gevallen van hopeloosheid.

* Het DRY-principe mag in de volgende gevallen worden geschonden:
- Expliciete scheiding van taken
- In tests (elke test moet zo onafhankelijk mogelijk zijn)

* Werken met de database:
- Het verzoek in de cyclus moet ECHT gerechtvaardigd zijn.
- Ernstige berisping voor ORDER BY RAND()
- Zoeken niet op sleutels (uiteraard als de tabel NIET uit 5 rijen bestaat) is verboden.
- Zoeken zonder LIMIT (opnieuw, als de tabel NIET uit 5 rijen bestaat) is verboden.
- SELECTEER * - verboden.
- Denormalisatie van de database moet gerechtvaardigd zijn.
- MyISAM wordt (zo))) niet gebruikt
- Bij een transactie zijn meerdere handelingen nodig, met een rollback als er iets misgaat.
- De database mag geen bedrijfslogica bevatten, alleen gegevens in een holistische vorm.
- Er mag geen onnodige schokken aan de database plaatsvinden als dit ook zonder kan.

* De cache moet onder twee voorwaarden worden leeggemaakt (niet één, maar twee):
- Tijd.
- Mislukking volgens bedrijfslogica.
Alleen in wanhopige situaties is tijd toegestaan, maar dan is de tijd van korte duur.
- Bij het berekenen van cachesleutels moet een variabele uit de applicatieconfiguratie worden gebruikt (in het geval van updates wordt de cache gereset door code, niet door cacheserverflash). Als er veel servers worden gebruikt, is dit een erg handig en flexibel hulpmiddel voor de diplomatie.

* Over mensen:
- “Ik ben gewend om op deze manier te schrijven en zal dat blijven doen” is geen vraag, je komt pas door de beoordeling als je van mening verandert.
- "Ik schrijf in vim en het is zo handig voor mij" - geweldig, ik schrijf er ook consolecode in)) maar er zijn vereisten voor de code, als je ze niet kunt doen, kom je niet door de beoordeling.
- "Ik heb deze vreselijke methode gekopieerd en 2 regels veranderd" - dit is natuurlijk geweldig, maar volgens het label ben jij de auteur van deze hele methode, dus laten we geen onzin praten, oké?
- "Het werkt!" - deze zin vertaalt zich ongeveer als volgt: "ja, ik begrijp dat ik complete onzin schrijf, maar ik kan niet normaal schrijven omdat ik het niet kan", heb ik je goed begrepen?))
- "Alles werkt!" - Ik ben blij voor je, maar hoe zit het met de productie?
- "Alles is daar eenvoudig" - gebruik niet het woord "eenvoudig", van het woord "absoluut". Hier is een stukje code (het eerste dat je tegenkomt bij complexe bedrijfslogica), waar zit de fout (het maakt niet uit of die er is of niet)? Je kijkt er al 2 minuten naar, wat is het probleem, alles is "eenvoudig"))

* Iets:
ActiveRecord (ik vertel je dit als voormalig Yii-fan) is complete onzin, beschouw het als het origineel. In feite heb je modellen die verbonden zijn met de database en die ongecontroleerd door het project dwalen. Meer dan eens kwam ik dat tegen in dezelfde sjablonen die ze save of update noemen (je zou hiervoor verbrand moeten worden).

Basis:
1. De aanwezigheid van kritische fouten en verouderde functies.
2. Gebruik van patronen, elegantie van oplossingen.
3. Leesbaarheid van de code, aanwezigheid van commentaar, aanwezigheid van docks.
4. Naleving van paradigma's en conventies (bijvoorbeeld schending van MVC).

Secundair/niet belangrijk:
1. Codeprestaties (behalve highload)
2. Geheugengebruik (exclusief bigdata)
3. Efficiëntie van SQL-query’s (met uitzondering van zeer lastige queries)
4. Het vermijden van onbelangrijke maar potentiële knelpunten in de gegevens (bijvoorbeeld het vertragen van het bestandssysteem wanneer er een groot aantal afbeeldingen in de uploadmap staat)
5. Nieuwheid van de gebruikte technologieën.
6. Gerechtvaardigd\Ongerechtvaardigd\Overmatig fietsen.

  1. De code bevat geen duidelijke of potentiële fouten.
  2. De code werkt zoals beschreven in de documentatie, technische specificaties of bijbehorend commentaar.
  3. De codeerstijl volgt geaccepteerde codeerregels
  4. De code heeft begeleidend commentaar volgens phpDoc
  5. Het nesten van blokken overschrijdt het 4e niveau niet.
  6. De code genereert geen berichten op het niveau Strikt, Waarschuwing, Kennisgeving of Verouderd. Als dit niet kan worden vermeden, moet u onmiddellijk vóór de regel die dit genereert forceren dat error_reporting wordt uitgeschakeld, en onmiddellijk na de regel moet error_reporting worden ingeschakeld op de oorspronkelijke waarde (die daarvoor was). Dergelijke code moet op een speciale manier worden gedocumenteerd.
  7. Het uitgecommentaarde stuk code moet worden verwijderd.
  8. HTML- en JavaScript-invoegingen zijn verboden in PHP-code (met uitzondering van phpTemplate). Alle invoegingen moeten worden gemaakt met behulp van speciale sjablonen.
  9. Klassen, functies, variabelen en constanten moeten logisch en op een voor mensen leesbare manier in het Engels worden benoemd volgens coderingsnormen. Naamgeving in transliteratie in het Russisch of andere talen is niet toegestaan
  10. De reikwijdte van variabelen en methoden van klassen moet altijd worden gedefinieerd (privé, beschermd, openbaar).
  11. De grootte van één methode mag niet groter zijn dan 40-50 regels.
  12. Een variabele die in een lus of in een voorwaardelijk blok wordt gebruikt, moet vooraf worden geïnitialiseerd.
  13. Een variabele mag altijd slechts één type bevatten. Een lege variabele moet null bevatten. ($var = false; $var = "test"; is niet toegestaan. $var = null is toegestaan; $var = "test";).
  14. Bij het doorgeven van klasseobjecten aan methoden moet typecontrole worden gebruikt.

Ten eerste zou het, vanuit het oogpunt van codeorganisatie, beter zijn om alle beoordelingslogica in een of meer insluitbare bestanden te stoppen en deze vervolgens op productpagina's op te nemen:

Include("bevat/beoordelingen.php");

Op deze manier kunnen de productpagina's onvervalst blijven en kan dezelfde reviewcode eenvoudig worden gebruikt of indien nodig worden aangepast. Het reviews.php-script zou verschillende dingen doen:

  • Laat het beoordelingsformulier zien
  • Behandel het beoordelingsformulier
  • Vermeld de bestaande beoordelingen
  • Secundaire acties uitvoeren, zoals het markeren van recensies of opmerkingen als ongepast, aangeven dat recensies nuttig waren, opmerkingen toevoegen aan recensies, aangeven dat opmerkingen nuttig waren, enzovoort

Hopelijk heb je al veel aan webontwikkeling gedaan, zodat je weet dat een formulier voor het toevoegen van recensies er ongeveer zo uit zou zien:

Beoordeel dit product

5 4 3 2 1

Het is duidelijk dat je wat CSS wilt gebruiken om het mooi te maken, maar dat is het basisidee. Het belangrijkste voordeel is dat de product-ID en het producttype (of wat de database ook moet hebben om een ​​recensie aan een artikel te koppelen) in verborgen invoer moeten worden opgeslagen. Je zou het PHP-script dat het product weergeeft deze waarden naar de invoer laten schrijven.

Als inloggen vereist is, kunt u (PHP)-code toevoegen die het formulier alleen aan ingelogde gebruikers laat zien, of een opmerking afdrukken waarin staat dat de gebruiker moet inloggen om het product te beoordelen. Op dezelfde manier, als je een systeem hebt dat garandeert dat iemand een product slechts één keer beoordeelt, zou je PHP voor dat scenario moeten laten controleren voordat je dit formulier laat zien.

Het indienen van het formulier zou kunnen naar een nieuwe pagina gaan, maar dan moet de gebruiker op de knop Terug klikken om terug te keren naar de productpagina, wat niet ideaal is. Ik zou in plaats daarvan het formulier terugsturen naar de productpagina. Op elke dynamische website wordt bijvoorbeeld hetzelfde PHP-script gebruikt om alle inhoud van een specifiek type weer te geven. In mijn Moeiteloze e-commerce met PHP en MySQL book, de eerste voorbeeldsite gebruikt het page.php-script om elke pagina met inhoud weer te geven. Het action attribuut van het formulier zou naar dezelfde page.php verwijzen. U kunt dit bereiken door het attribuut leeg te laten, of door PHP te gebruiken om de waarde dynamisch in te stellen.

Als de PHP-pagina waarop de producten worden vermeld vereist dat een waarde die het product identificeert in de URL wordt doorgegeven, dan moet het formulier die waarde ook in een verborgen invoer opslaan. (Dat kan al het geval zijn bij de invoer van product_id, afhankelijk van hoe de site is opgezet.) Ten tweede zou het productscript ook moeten worden bijgewerkt om ervoor te zorgen dat de productwaarde via POST kan worden ontvangen.

Om ervoor te zorgen dat het reviews.php-script weet wanneer het een formulierinzending moet afhandelen, kan het controleren hoe het script werd geopend:

If ($_SERVER["REQUEST_METHOD"] == "POST") ( // Behandel het formulier.

Wanneer het beoordelingsformulier wordt ingediend, moeten de formuliergegevens worden gevalideerd. U moet ook strip_tags() op de gegevens toepassen om Cross-Site Scripting (XSS)-aanvallen of ander slecht gedrag te voorkomen. En niet-numerieke waarden zouden via een escape-functie worden uitgevoerd, zoals mysqli_real_escape_string() . Of u kunt gewoon voorbereide verklaringen of opgeslagen procedures gebruiken voor betere beveiliging en prestaties.

Als u een anker toevoegt aan het actiekenmerk action="page.php#reviews" van het formulier, wordt de gebruiker na het indienen naar het recensiesgedeelte van de pagina geleid, wat een leuke bijkomstigheid is.

Als het reviews.php-script ook enkele van de andere acties afhandelt (ongepaste recensies of opmerkingen, nuttige indicatoren, enz.), zou het script ook op die inzendingen moeten letten. Ik zou verborgen invoer met de naam "taak" gebruiken om aan te geven welke actie wordt ondernomen.

In een apart artikel laat ik zien hoe je Ajax kunt gebruiken voor een eenvoudig beoordelingssysteem. Soortgelijke Ajax-code zou ook voor het beoordelingssysteem kunnen worden gebruikt.

Ontvang waardevolle feedback van uw klanten door hen de vrijheid te geven hun indrukken vrijelijk te delen. Laat ze uw producten en/of diensten rechtstreeks op uw website beoordelen. Bekijk hieronder de belangrijkste functies die standaard bij ons online beoordelingssysteem horen.

    Recensies en beoordelingen

    Integreer PHP Review Script in uw website en laat klanten hun ervaringen delen met de producten en diensten die u aanbiedt. Ze kunnen beoordelen op basis van criteria en zowel positieve als negatieve feedback geven.

    Meerdere talen

    Het PHP-beoordelingssysteem spreekt niet alleen Engels, maar elke taal die u nodig heeft. U kunt alle titels en systeemberichten vanaf de beheerderspagina vertalen met unieke ID's voor elk stuk tekst.

    Bewerkbare beoordelingscriteria

    Afhankelijk van het type bedrijf kunnen systeembeheerders dit beoordelen
    stel verschillende beoordelingscriteria in die in het front-endformulier moeten worden weergegeven.
    Elk van deze criteria wordt beoordeeld met 1 tot 5 sterren.

    E-mail- en sms-meldingen

    Stel het online beoordelingssysteem in om e-mail- en sms-waarschuwingen te verzenden wanneer er een nieuwe beoordeling is geplaatst. Via het menu Gebruikers kunt u eenvoudig opgeven welke gebruikers deze berichten moeten ontvangen.

    Meerdere gebruikerstypen

    Creëer onbeperkte klanttypen, afhankelijk van de branche en gebruikte services. Hotelbeoordelingen kunnen bij de volgende gebruikerstypes passen: Gezin met kinderen, Stel, Zakenreis etc. Ze verschijnen als labels in de recensies.

    Responsief en aantrekkelijk

    Het recensie- en beoordelingsscript werkt op alle apparaten en past zich naadloos aan aan verschillende schermformaten. In overeenstemming met de branding van uw website kunt u het best passende front-endthema kiezen uit 10 kleuropties.

    In het vak met snelle tips naast het beoordelingsformulier kunt u enkele grappige woorden toevoegen en klanten naar buiten lokken. Het beoordelingssysteem filtert beoordelingen op gebruikerstype. Klanten kunnen ook de beoordelingen van andere klanten beoordelen.

    Met een Developer License krijgt u de broncode en kunt u eventuele aangepaste wijzigingen aanbrengen in het PHP Review Script. Op verzoek kunnen wij ook het klantbeoordelingssysteem aanpassen.