


Tutorial zur Implementierung monatlicher Datenaktualisierungsbeschränkungen
Anforderungenanalyse: Implementieren Sie monatliche Änderungsbeschränkungen
In vielen Webanwendungen, um die Datenkonsistenz aufrechtzuerhalten, böswillige und häufige Vorgänge zu verhindern oder die Benutzererfahrung sicherzustellen, müssen Zeitintervallbeschränkungen für bestimmte kritische Vorgänge festgelegt werden (z. B. Änderungen von Benutzernamen, Avataren oder Senden bestimmter Nachrichten). In diesem Tutorial werden "Benutzer nur einmal im Monat nur einmal im Monat geändert" und erläutern ausführlich, wie diese Funktion über die Datenbankdatumfeld- und Datumsvergleichslogik implementiert wird.
Die Kernanforderung lautet: Wenn ein Benutzer versucht, den Benutzernamen zu ändern, muss das System das Datum seiner letzten Änderung überprüfen. Wenn die letzte Änderung weniger als einen Monat beträgt (normalerweise als 30 Tage berechnet), wird die Modifikation abgelehnt. Andernfalls ist die Änderung und das letzte Änderungsdatum zulässig.
Datenbankdesign: NAME_CHANGED -Feld
Um das Datum zu verfolgen, das der Benutzer zuletzt geändert hat, müssen wir der Benutzertabelle ein Datumstyp hinzufügen. In der Tabelle Benutzer- (oder user_db) können Sie beispielsweise ein Datum oder ein DateTime -Feld mit dem Namen namens_Changed hinzufügen.
- Feldname: name_changed
- Datentyp: Datum (nur Speicherdaten) oder DateTime (Speicherdaten und Uhrzeiten mit höherer Genauigkeit)
- Standardwert: Es wird empfohlen, auf NULL oder 0000-00-00 einzustellen. Null ist normalerweise eine bessere Wahl, weil es explizit "nie modifiziert" bedeutet. 0000-00-00 hat in einigen Datenbanksystemen besondere Bedeutungen, wird aber auch häufig als Platzhalter in der Praxis verwendet.
Probentischstruktur (vereinfacht):
Tabellen Benutzer erstellen ( ID int auto_increment Primärschlüssel, E -Mail Varchar (255) Einzigartige Nicht -NULL, Nennen Sie Varchar (255) nicht null, Name_Changed Datum Standard NULL - Zeichnen Sie das Datum der Änderung des Nachnamens auf);
Kernlogik: Datumsdifferenzberechnung
Um festzustellen, ob der Benutzer den Namen innerhalb der angegebenen Zeit geändert hat, besteht der Schlüssel darin, die Differenz in der Anzahl der Tage zwischen dem aktuellen und dem zuletzt geänderten Datum zu berechnen. Der einfache Vergleich von Monaten (z. B. $ current_month - $ last_modified_month) ist ungenau, da es die Grenzsituationen des Neujahrs oder des frühen/Ende des Monats nicht bewältigen kann (zum Beispiel wird es am 30. Januar geändert und es darf am 1. Februar erneut geändert werden, aber es ist tatsächlich nur zwei Tage später).
Die richtige Art und Weise besteht darin, die Gesamtzahl der Tage zwischen zwei Daten zu berechnen.
Methode 1: Verwenden Sie die SQL -Datediff -Funktion (empfohlen)
Datenbanksysteme wie MySQL bieten die Funktion des datierten (Datums1, Datums2), mit dem die Differenz in der Anzahl der Tage zwischen zwei Daten berechnet wird. Datediff (Now (), name_Changed) gibt die Anzahl der Tage zwischen dem aktuellen Datum und dem Datum name_Changed zurück.
- Logik:
- Wenn Name_Changed null oder 0000-00-00 ist, bedeutet dies, dass es nie geändert wurde und eine Änderung zulässig ist.
- Wenn das Ergebnis von datediff (now (), name_changed) größer oder gleich 30 (oder der Anzahl der Tage zwischen Monaten, die Sie definieren) ist, ist eine Änderung zulässig.
- Andernfalls Weigerung zu ändern.
Methode 2: PHP DateTime -Objekt führt Datumsberechnung durch
Obwohl SQL -datediff einfach und effizient ist, können auch Datumsberechnungen an der PHP -Anwendungsschicht durchgeführt werden. Dadurch wird das Datum name_changed aus der Datenbank abgerufen und dann mithilfe des DateTime -Objekts von PHP verarbeitet.
- Logik:
- Holen Sie sich die Zeichenfolge name_Changed in der Datenbank.
- Erstellen Sie ein DateTime -Objekt: $ lastModifiedDate = new DateTime ($ namechangedfromdb);
- Erstellen Sie das aktuelle Datum DateTime -Objekt: $ currentDate = new DateTime ();
- Berechnen Sie die Datumsdifferenz: $ intervall = $ currentDate-> diff ($ lastModifiedDate);
- Erhalten Sie den Unterschied in der Anzahl der Tage: $ Days = $ Intervall-> Tage;
- Ein Urteil fällen, das auf Tagen basiert.
PHP -Code -Implementierung
Hier ist ein PHP -Code -Beispiel, das Sicherheitspraktiken und Datumsurteillogik kombiniert. Wir werden PDO für Datenbankvorgänge verwenden, um die SQL -Injektion zu verhindern.
Php Session_Start (); // Stellen Sie sicher, dass die Sitzung gestartet wird // Datenbankverbindungskonfiguration $ host = 'localhost'; $ db = 'your_database_name'; $ user = 'your_username'; $ pass = 'your_password'; $ charset = 'utf8mb4'; $ dsn = "MySQL: host = $ host; dbname = $ db; charset = $ charset"; $ options = [ Pdo :: attr_errmode => pdo :: errmode_exception, Pdo :: attr_default_fetch_mode => pdo :: fetch_assoc, Pdo :: attr_emulate_prepares => false, ]; versuchen { $ pdo = new pdo ($ dsn, $ user, $ pass, $ options); } catch (\ pdoException $ e) { Wurf neu \ pdoException ($ e-> getMessage (), (int) $ e-> getCode ()); } $ fehler = []; $ success_message = ''; if (isset ($ _ post ['name']) &&! leer ($ _ post ['name'])) { $ newname = trim ($ _ post ['name']); $ useremail = $ _Session ['E -Mail'] ?? Null; // Angenommen, die Benutzer -E -Mail wird in der Sitzung gespeichert, wenn (! $ Useremail) { $ fehler [] = "Der Benutzer ist nicht angemeldet oder die Sitzung ist abgelaufen."; } elseif (strlen ($ newname) 20) { $ fehler [] = "Der Name muss zwischen 2 und 20 Zeichen lang sein."; } anders { // 1. Holen Sie sich das aktuelle Name des Benutzers name_changed $ STMT = $ PDO-> PREPET ("NAME_CHANGED VON UNSERE WOHEN, Wobei E-Mail =: E-Mail"); $ stmt-> execute ([': mail' => $ useremail]); $ userInfo = $ stmt-> fetch (); if ($ userInfo) { $ lastChangedDate = $ userInfo ['name_changed']; // 2. Bestimmen Sie, ob $ canchange = false zulässig ist; if (leer ($ last changedDate) || $ lastChangedDate === '0000-00-00') { // nie geändert, $ canchange = true; } anders { // Datumsunterschiede berechnen (mit SQL -Datediff) $ stmt = $ pdo-> vorbereiten ("SELECT DATIFT (NOW (),: LastChangedDate) als DAY_DIFF"); $ stmt-> execute ([': lastChangedDate' => $ lastChangedDate]); $ result = $ stmt-> fetch (); $ DAYDIFF = $ result ['Days_diff']; if ($ DaysDiff> = 30) {// Änderung von $ canchange = true nach 30 Tagen oder mehr; } anders { $ fehler [] = "Sie können Ihren Namen nur einmal im Monat ändern. Bitte versuchen Sie es erneut in". (30 - $ DaysDiff). "Diremen versuchen es erneut."; } /* // oder verwenden Sie PHP DateTime, um $ lastModifiedDatetime = new DateTime ($ lastChangedDate) zu berechnen; $ currentDateTime = new DateTime (); $ intervall = $ currentDatetime-> diff ($ lastModifiedDatetime); $ DAYDIFFPHP = $ Intervall-> Tage; if ($ DAYDIFFPHP> = 30) { $ canchange = true; } anders { $ fehler [] = "Sie können Ihren Namen nur einmal im Monat ändern. Bitte versuchen Sie es erneut in". (30 - $ DaysDiffphp). "Diremen versuchen es erneut."; } */ } // 3.. Führen Sie die Änderungsoperation durch, wenn ($ canchange) { $ stmt = $ pdo-> vorbereiten ("Benutzer set name =: name, name_changed = curdate () wobei E-Mail =: E-Mail"); $ updateresult = $ stmt-> execute ([ ': name' => $ newname, ': E -Mail' => $ useremail ]); if ($ updateresult) { $ success_message = "Namensänderung war erfolgreich!"; } anders { $ fehler [] = "Namensänderung fehlgeschlagen, bitte versuchen Sie es später erneut."; } } } anders { $ fehler [] = "Benutzerinformationen nicht gefunden."; } } } ?> <kopf> <meta charset="utf-8"> <title> Name des Namens </title> <styles> .Error {Farbe: rot; } .Success {Farbe: grün; } <h1> Namen </h1> ändern php if (! leer ($ fehler):?> <div class="error"> php foreach ($ fehler als $ error):?> <p> Php echo htmlSpecialChars ($ error); ?> </p> Php Endforeach; ?> </div> Php Endif; ?> php if (! leer ($ success_message):?> <div class="success"> <p> php echo htmlspecialChars ($ success_message); ?> </p> </div> Php Endif; ?> <form action="" method="post"> <label f> Neuer Name: </label> <eingabe type="text" id="name" name="name" erforderlich minlength="2" maxlength="20"> <br> <br> <eingabe type="surug" name="name" value="Name modifizieren"> </eingabe></eingabe> </form> </styles></kopf>
Das obige ist der detaillierte Inhalt vonTutorial zur Implementierung monatlicher Datenaktualisierungsbeschränkungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Durch die Auswahl des richtigen HTMlinput -Typs kann die Datengenauigkeit verbessert, die Benutzererfahrung verbessert und die Benutzerfreundlichkeit verbessert werden. 1. Wählen Sie die entsprechenden Eingabetypen gemäß dem Datentyp aus, z. B. Text, E -Mail, Tel, Nummer und Datum, die automatisch überprüft und an die Tastatur anpassen können. 2. Verwenden Sie HTML5, um neue Typen wie URL, Farbe, Reichweite und Suche hinzuzufügen, die eine intuitivere Interaktionsmethode bieten können. 3.. Verwenden Sie Platzhalter und erforderliche Attribute, um die Effizienz und Genauigkeit der Formulierung zu verbessern. Es sollte jedoch beachtet werden, dass der Platzhalter das Etikett nicht ersetzen kann.

Um der Website -Titelleiste ein Symbol hinzuzufügen, müssen Sie eine Favicon -Datei in einem Teil des HTML verlinken. Die spezifischen Schritte sind wie folgt: 1. Bereiten Sie eine 16x16- oder 32x32 -Pixel -Symboldatei vor. Es wird empfohlen, Favicon.ico zu verwenden, um es zu benennen und in das Root -Verzeichnis der Website zu platzieren oder moderne Formate wie PNG und SVG zu verwenden. 2. Fügen Sie Link -Tags zu HTML hinzu, wie z. B. PNG- oder SVG -Formaten, das Typattribut entsprechend. 3. Fügen Sie optional hochauflösende Symbole für mobile Geräte wie AppleTouchicon hinzu und geben Sie verschiedene Größen über das Größenattribut an. V.

Überprüfen Sie zunächst, ob der SRC -Attributpfad korrekt ist, und stellen Sie sicher, dass der relative oder absolute Pfad mit dem Speicherort der HTML -Datei übereinstimmt. 2. Überprüfen Sie, ob der Dateiname und die Erweiterung korrekt geschrieben sind und fallsempfindlich sind. 3. bestätigen Sie, dass die Bilddatei tatsächlich im angegebenen Verzeichnis vorliegt. 4. Verwenden Sie geeignete ALT -Attribute und stellen Sie sicher, dass das Bildformat .jpg, .png, .gif oder .webp ist, das vom Browser weit verbreitet ist; 5. Fehlerbehebung bei Browser -Cache -Problemen, versuchen Sie, die Aktualisierung zu erzwingen oder direkt auf die Bild -URL zuzugreifen. 6. Überprüfen Sie die Berechtigungseinstellungen der Server, um sicherzustellen, dass die Datei gelesen und nicht blockiert werden kann. 7. Stellen Sie sicher, dass die IMG -Tag -Syntax korrekt ist, einschließlich der richtigen Zitate und der Attributreihenfolge, und schließlich beheben Sie 404 Fehler oder Syntaxprobleme über die Browser -Entwickler -Tools, um sicherzustellen, dass das Bild normal angezeigt wird.

Die Verwendung von HTML -Tags kann die Zugänglichkeit und Klarheit von Inhalten verbessern. 1. Mark Abkürzungen oder Akronyme mit Abkürzungen; 2. Fügen Sie Titelattribute zu ungewöhnlichen Abkürzungen hinzu, um eine vollständige Erklärung abzugeben. 3.. Verwenden Sie, wenn das Dokument zum ersten Mal erscheint, wodurch doppelte Anmerkungen vermieden werden. 4.. Sie können den Stil über CSS anpassen, und der Standardbrowser zeigt normalerweise gepunktete Unterstriche an. 5. Es hilft Bildschirm, die Leser -Benutzer zu verstehen und die Benutzererfahrung zu verbessern.

Wenn Sie FontAwesome verwenden, können Symbole schnell hinzugefügt werden, indem CDN eingeführt und Schaltflächen hinzugefügt werden. 2. Verwenden von Beschriftungen zum Einbetten benutzerdefinierter Symbole in Schaltflächen müssen der richtige Pfad und die richtige Größe angegeben werden. 3. Einbetten Sie den SVG-Code direkt ein, um hochauflösende Symbole zu erreichen und sie mit der Textfarbe übereinzuhalten. 4. Der Abstand sollte durch CSS hinzugefügt werden und die Icon-Schaltflächen sollten hinzugefügt werden, um die Zugänglichkeit zu verbessern. Zusammenfassend ist Fontawesome am besten für Standard -Symbole geeignet, Bilder sind für benutzerdefinierte Designs geeignet, während SVG die beste Skalierung und Kontrolle bietet und Methoden entsprechend den Projektanforderungen ausgewählt werden sollten. FontAwesome wird normalerweise empfohlen.

ThebdotagisusedTooverridethebrowrossersDefaultTextDirectionRenderingwhendealingWithmixedleft-to-Rightandright-to-Links-text-CorrectvisualDisplayByforcingaspecificDirectionusectionThedIrAttributeWithvalues "ltr" oder "rtl", asdemonstrattribute

In diesem Tutorial wird das Problem des Crawling -Fehlers untersucht, wenn JavaScript den Inhalt dynamisch lädt, wenn URLs von Webseiten mithilfe des R -Sprach -RVest -Pakets gekriecht. Der Artikel erläutert ausführlich, warum herkömmliche HTML -Parsingmethoden ungültig sind und eine effiziente Lösung darstellen: Durch das Identifizieren und direktes Aufrufen der API -Schnittstelle hinter der Webseite mithilfe des HTTR -Pakets, um JSON -Daten zu erhalten, wodurch die erforderlichen Informationen erfolgreich extrahiert werden.

Die ID muss eindeutig sein. Eine ID auf jeder Seite kann nur für ein Element verwendet werden, und die Klasse kann auf mehreren Elementen wiederverwendet werden, und ein Element kann mehrere Klassen haben. 2. Szenarien, die die ID verwenden, umfassen: Positionierung eines einzelnen spezifischen Elements, Verknüpfungsanker auf der Seite, JavaScript betreibt Elemente über ID und mit Formularelementen zugeordnete Beschriftungen; Zu den Szenarien, die die Klasse verwenden, gehören: Anwenden desselben Stils oder Verhaltens auf mehrere Elemente, Erstellen wiederverwendbarer UI -Komponenten und Auswahl mehrerer Elemente in JavaScript; 3. In CSS erfolgt das Targeting von #ID Selector bzw. .class Selector, GetElementByID () wird für ID verwendet, Geteleme
