Die Magie von PHP + MySQL

Man kann mit Sicherheit sagen, dass fast jede aktuelle Website heutzutage irgendeine Form von Content-Management-System (CMS) verwendet. Obwohl es eine Menge großartiger kostenloser Optionen gibt, die uns ein CMS zur Verfügung stellen, um eine Website zu betreiben (WordPress, Drupal usw.), schadet es nicht, unter die Haube zu schauen und ein Gefühl dafür zu bekommen, wie diese Systeme funktionieren.
Um uns als Backend-Entwickler einzuarbeiten, erstellen wir eine einfache PHP-Klasse, die Folgendes tut:
- Erstellt eine Datenbank
- Stellt eine Verbindung zu einer Datenbank her
- Zeigt ein Formular mit zwei Feldern an
- Speichert die Formulardaten in der Datenbank
- Zeigt die gespeicherten Daten aus der Datenbank an
Diese Klasse soll Ihnen ein Gefühl dafür vermitteln, wie PHP und MySQL zusammenarbeiten, und die Grundlagen eines CMS zeigen. Ich werde Erklärungen zu einigen sehr grundlegenden Programmierkonzepten überspringen. Wenn Sie sich also an irgendeiner Stelle verloren fühlen, sehen Sie sich den Kurs Diving into PHP an und verschaffen Sie sich einen Crashkurs in PHP. Ich versuche jedoch, niemanden zu verlieren, versprochen.
Erstellen der Klasse

Unser erster Schritt besteht darin, die Klasse einfach in einer Datei namens „simpleCMS.php“ anzulegen, damit wir einen Fahrplan haben, mit dem wir arbeiten können.
<?php
class simpleCMS {
var $host;
var $username;
var $password;
var $table;
public function display_public() {
}
public function display_admin() {
}
public function write() {
}
public function connect() {
}
private function buildDB() {
}
}
?>
Wie Sie sehen, erstellen wir eine Klasse mit vier Variablen und fünf Methoden. Ich habe mich für den objektorientierten Ansatz von PHP entschieden, da er bei großen Projekten für saubereren Code sorgt und meiner Meinung nach einfach eine gute Vorgehensweise ist.
Die Variablen
In diesem Fall dienen alle vier Variablen zum Herstellen der Verbindung zur Datenbank: $host, $username, $password und $table stellen einen Pfad und Zugriff auf unsere Datenbank auf dem Server bereit. Vorerst lassen wir diese leer und widmen uns unserer Datenbank, die durch die Methode buildDB() konstruiert wird.
Erstellen der Datenbank
private function buildDB() {
$sql = <<<MySQL_QUERY
CREATE TABLE IF NOT EXISTS testDB (
title VARCHAR(150),
bodytext TEXT,
created VARCHAR(100)
)
MySQL_QUERY;
return mysql_query($sql);
}
Diese Funktion führt einen MySQL-Befehl aus, der die Datenbank überprüft, obtestDBexistiert. Wenn ja, gibt sie einfach eine Erfolgsmeldung aus; wenn nicht, erstellt sie unsere Tabelle und weist drei Spalten zum Speichern von Daten zu.
Verbindung zur Datenbank herstellen

Jetzt, da wir eine Funktion zum Erstellen unserer Tabelle haben, erstellen wir die Funktion, die sich mit unserer Datenbank verbindet.
public function connect() {
mysql_connect($this->host,$this->username,$this->password) or die("Could not connect. " . mysql_error());
mysql_select_db($this->table) or die("Could not select database. " . mysql_error());
return $this->buildDB();
}
Wir rufen mysql_connect() auf, um uns mit unserer Datenbank zu verbinden, und dann mysql_select_db(), um sicherzustellen, dass wir unsere Daten am richtigen Ort speichern. Beide Funktionen werden vom Befehl die() begleitet, der im Wesentlichen besagt: „Für den Fall, dass diese Funktion fehlschlägt, stoppe die Ausführung dieses Skripts und zeige eine Meldung an.“
Unsere connect()-Funktion stellt die Verbindung zur Datenbank her und weist uns in die richtige Richtung, dann führt sie unsere buildDB()-Funktion aus. Erinnern Sie sich an den grammatikalisch ungeschickten Teil „IF NOT EXISTS“ unseres MySQL-Befehls? Da wir diese Funktion bei jedem Laden der Seite ausführen werden, müssen wir sicherstellen, dass wir unsere Datenbank nicht bei jedem Funktionsaufruf überschreiben, und genau das erfordert dieser Ausdruck.
Erstellen des Formulars
Wir haben also eine Datenbank. Jetzt müssen wir nur noch Dinge hineinlegen!
public function display_admin() {
return <<<ADMIN_FORM
<form action="{$_SERVER['PHP_SELF']}" method="post">
<label for="title">Title:</label>
<input name="title" id="title" type="text" maxlength="150" />
<label for="bodytext">Body Text:</label>
<textarea name="bodytext" id="bodytext"></textarea>
<input type="submit" value="Create This Entry!" />
</form>
ADMIN_FORM;
}
Auch dies ist eine sehr einfache Funktion. Wenn sie aufgerufen wird, gibt sie einfach das HTML-Markup zurück, um unser Formular zu erstellen. Sie werden jedoch im action-Attribut des form-Elements feststellen, dass ich die Variable $_SERVER['PHP_SELF'] verwendet habe. Dies ist im Wesentlichen eine Verknüpfung, die auf die Datei verweist, die Sie gerade verwenden (in unserem Fall ist es display.php). Dies ist nützlich, wenn Sie Ihren Code auf einer Website wiederverwenden und diese Funktion nicht unbedingt für jede Seite neu schreiben möchten.
Ich werde mir auch einen Moment Zeit nehmen, um über die Methode zu sprechen, die ich verwende, um das HTML zurückzugeben. Es ist ein Format, das in PHP als HEREDOC-Syntax bezeichnet wird, und ich liebe es.
Der Hauptvorteil von HEREDOC besteht darin, dass es Ihnen ermöglicht, Formatierungen in Ihre Ausgabe einzufügen. Dies ist außerordentlich nützlich für Leute wie mich, die Probleme mit unübersichtlichem Quellcode haben. Weitere Informationen zur HEREDOC-Syntax und Ähnlichem finden Sie im PHP-Handbuch.
Speichern der Daten in der Datenbank
Unser Formular ermöglicht uns die Eingabe von Informationen, aber wie speichern wir sie? Hier kommt unserewrite()Methode ins Spiel.
public function write($p) {
if ( $p['title'] )
$title = mysql_real_escape_string($p['title']);
if ( $p['bodytext'])
$bodytext = mysql_real_escape_string($p['bodytext']);
if ( $title && $bodytext ) {
$created = time();
$sql = "INSERT INTO testDB VALUES('$title','$bodytext','$created')";
return mysql_query($sql);
} else {
return false;
}
}
Beginnen wir mit dem Funktionsaufruf selbst – wir übergeben dieser Funktion eine Variable, was wir bisher noch nicht getan haben. Unsere Variable $p enthält die Informationen, die über die post-Methode von unserem Formular gesendet werden.
Innerhalb der Funktion beginnen wir mit einer bedingten Anweisung, die überprüft, ob der Wert title im Formular festgelegt wurde, bevor es gesendet wurde. Wenn dies der Fall ist, legen wir unsere Variable $title auf den Wert $_POST['title'] fest (HINWEIS: Wir verwenden die Funktion mysql_real_escape_string() als Vorsichtsmaßnahme gegen potenziell gefährliche Eingaben, was wichtig ist, wenn Sie etwas erstellen, das Benutzereingaben zulässt). Wenn $_POST['title'] nicht festgelegt wurde, überspringen wir diese Zeile und lassen die Variable $title unbestimmt.
Dieser Vorgang wird für unsere zweite Eingabe wiederholt, und dann werden beide Variablen überprüft, um sicherzustellen, dass nichts leer ist, bevor sie in der Datenbank gespeichert werden. Wenn beide Variablen festgelegt sind, legen wir die Variable $created mit dem aktuellen Unix-Zeitstempel fest, den wir verwenden, um unsere Einträge chronologisch zu sortieren, wenn wir sie in Zukunft anzeigen.
Wir haben jetzt drei Variablen, und da wir Überprüfungen durchgeführt haben, wissen wir, dass alle drei Variablen nicht leer sind. Jetzt können wir unsere MySQL-Abfrage schreiben, die den Eintrag in der Datenbank speichert!
Anzeigen der Informationen aus der Datenbank

Jetzt, da wir die Möglichkeit haben, Informationen in unsere Datenbank einzufügen, müssen wir eine Möglichkeit schaffen, diese Informationen wieder herauszuholen. Hier kommt display_public() ins Spiel. Dies ist bei weitem die komplexeste unserer Methoden, also nehmen wir uns wirklich Zeit, um herauszufinden, was darin vor sich geht.
public function display_public() {
$q = "SELECT * FROM testDB ORDER BY created DESC LIMIT 3";
$r = mysql_query($q);
if ( $r !== false && mysql_num_rows($r) > 0 ) {
while ( $a = mysql_fetch_assoc($r) ) {
$title = stripslashes($a['title']);
$bodytext = stripslashes($a['bodytext']);
$entry_display .= <<<ENTRY_DISPLAY
<h2>$title</h2>
<p>
$bodytext
</p>
ENTRY_DISPLAY;
}
} else {
$entry_display = <<<ENTRY_DISPLAY
<h2>This Page Is Under Construction</h2>
<p>
No entries have been made on this page.
Please check back soon, or click the
link below to add an entry!
</p>
ENTRY_DISPLAY;
}
$entry_display .= <<<ADMIN_OPTION
<p class="admin_link">
<a href="{$_SERVER['PHP_SELF']}?admin=1">Add a New Entry</a>
</p>
ADMIN_OPTION;
return $entry_display;
}
Das erste, was man beim Lesen aus einer Datenbank beachten sollte, ist die Art und Weise, wie PHP und MySQL miteinander interagieren. Zuerst stellen wir der Datenbank eine Frage (Query), auf die sie mit einem Ergebnis (Resource) antwortet. Dieses Ergebnis ist jedoch erst dann wirklich nützlich, wenn wir es mit einer von mehreren Methoden dekodiert haben, die die darin enthaltenen Informationen in eine verwendbare Form (Array) „abrufen“ oder organisieren.
Unsere allererste Aktion in der obigen Funktion ist das Einrichten unserer Abfrage in der Variable $q. Der Sternchen-Operator (*) in MySQL bedeutet „alles“, daher fragt unsere Abfrage die Datenbank, ob alles aus Einträgen in der Tabelle testDB in umgekehrter chronologischer Reihenfolge ausgewählt werden soll, beschränkt auf die ersten drei zurückgegebenen Einträge.
Nachdem die Abfrage definiert ist, senden wir sie mithilfe der Funktion mysql_query() an die Datenbank. Die resultierende Ressource wird in der Variable $r gespeichert. Hier wird es etwas knifflig.
Wir führen nun eine bedingte Anweisung aus, die besagt: „WENN mysql_query() nicht fehlgeschlagen ist UND WENN die Anzahl der zurückgegebenen Einträge größer als null war, verarbeite das Ergebnis, ODER ANDERNFALLS zeige eine Standardnachricht an.“
Wenn $r Einträge aus der Datenbank enthält, müssen wir diese Daten nun „abrufen“. Informationen aus der Datenbank werden als Array zurückgegeben, das ähnlich wie die Datenbanktabelle selbst organisiert ist. Die Funktion mysql_fetch_assoc() nimmt die Ressource und unterteilt jeden Eintrag in ein assoziatives Array (das bedeutet, dass, wenn wir das Ergebnis von mysql_fetch_assoc() in der Variable $a speichern, die Daten des Eintrags über die Spaltennamen in der Datenbank zugänglich sind, d. h. $a['title']).
Allerdings liefert uns mysql_fetch_assoc() nur einen Eintrag auf einmal. Um alle zurückgegebenen Einträge zu erhalten, müssen wir eine while-Schleife verwenden. Im Wesentlichen sagen wir: „SOLANGE $r noch Werte enthält, die wir noch nicht verwendet haben, hole den nächsten Eintrag in der Reihe und führe die folgenden Aktionen damit aus.“
In diesem Fall überprüfen wir den Eintrag, um sicherzustellen, dass Daten zurückgegeben wurden, und entfernen dann die Schrägstriche, die hinzugefügt wurden, als wir die Informationen mithilfe von stripslashes() in der Datenbank gespeichert haben. Danach verpacken wir die Variablen einfach in etwas HTML und, voila! wir haben bildschirmfertigen Inhalt!
Als letzten Schritt fügt der Code unten einen Link hinzu, über den Benutzer einen Eintrag hinzufügen können. Es ist erwähnenswert, dass der Operator „.=“ in der while-Schleife und beim Erstellen des Links „Add a New Entry“ verwendet wird; eine Funktion kann nur eine Variable zurückgeben, daher müssen wir die neuen Informationen an die vorhandene Variable anhängen. Wenn wir nur das Gleichheitszeichen („=“) verwenden würden, würden wir vorhandene Daten überschreiben und am Ende nur einen Link zum Formular und keinen Inhalt haben.
Sie haben also Ihre erste CMS-Klasse geschrieben! Sie können ganz einfach Daten in eine Datenbank schreiben und daraus abrufen. Jetzt müssen Sie es nur noch ausprobieren!
Verwenden der Klasse
Um unsere Klasse zu verwenden, müssen wir eine separate Datei erstellen. Ich nenne sie „display.php“, die ich im Haupt-Webordner speichere, wobei unsere Klasse als „simpleCMS.php“ in einem Ordner namens „_class“ im Hauptordner gespeichert wird. Zunächst erstellen wir einfach ein Dokument mit normalem HTML.
<!DOCTYPE html>
<html lang="en">
<head>
<title>SimpleCMS</title>
</head>
<body>
</body>
</html>
Um unsere Klasse zu verwenden, müssen wir nur ein wenig PHP zwischen die Body-Tags einfügen
<?php
include_once('_class/simpleCMS.php');
$obj = new simpleCMS();
$obj->host = 'database.host.net';
$obj->username = 'DB1234567';
$obj->password = 'DBpassword';
$obj->table = 'DB1234567';
$obj->connect();
if ( $_POST )
$obj->write($_POST);
echo ( $_GET['admin'] == 1 ) ? $obj->display_admin() : $obj->display_public();
?>
Zuerst müssen wir die Klasse mithilfe der Funktion include_once() einbinden. Dann müssen wir unser Objekt instanziieren, damit unser Code weiß, was los ist. Drittens legen wir alle Variablen fest, über die wir am Anfang dieses Tutorials gesprochen haben. Sie müssen alle diese Werte durch die Informationen ersetzen, die Sie von Ihrem eigenen Server oder Hostinganbieter erhalten. Und viertens stellen wir mithilfe der Methode connect() eine Verbindung zu unserer Datenbank her.
Nachdem wir uns mit der Datenbank verbunden haben, überprüfen wir, ob $_POST-Informationen vorhanden sind. Dies liegt daran, dass wir dieselbe Datei für die Eingabe, Verarbeitung und Anzeige von Informationen verwenden. Wenn etwas über $_POST übergeben wurde, führen wir die Funktion write() aus, um es zu validieren und in der Datenbank zu speichern. Dann verwenden wir eine Abkürzung, um eine bedingte Anweisung auszuführen. Im Wesentlichen sagen wir: „WENN $_GET['admin'] auf 1 gesetzt ist, zeige das Formular mithilfe von display_admin() an, ODER ANDERNFALLS zeige mir die gespeicherten Einträge mithilfe von display_public() an.“
Und das war’s! Sobald Sie ein Gefühl dafür bekommen, können Sie mit dieser Art von grundlegender Programmierung die totale Kontrolle über die von Ihnen erstellten Websites ausüben, egal ob Sie sich entscheiden, sich wirklich einzuarbeiten und Ihr eigenes CMS-Framework zu erstellen, oder einfach ein vorhandenes CMS verbessern, indem Sie beispielsweise ein WordPress-Plugin schreiben.
Wirklich, wenn es um modernes Webdesign geht, sollten Sie zumindest einige Kenntnisse darüber haben, wie die Dinge hinter dem Vorhang funktionieren – das Verständnis, wie eine Website funktioniert, ermöglicht es Ihnen besser, Websites zu entwerfen, die eine flüssigere Integration von Form und Funktion aufweisen. Und außerdem schadet es Ihrer Glaubwürdigkeit definitiv nicht, PHP und MySQL in Ihren Lebenslauf aufzunehmen …
Wichtiger Hinweis
Dieser Code wurde nur zu Demonstrationszwecken geschrieben. In den Kommentaren wurden mehrere Sicherheitslücken aufgezeigt, auf die ich in Teil zwei dieser Tutorialreihe eingegangen bin Anmerkung des Redakteurs: Es gibt keinen Teil zwei dieser Reihe mehr. Jason empfiehlt sein Buch PHP for Absolute Beginners als Ressource für Best Practices. Dennoch würde ich dringend raten, es nicht für Produktions-Websites ohne weitere Tests zu verwenden.
Ich habe einige Sicherheitsgrundlagen abgedeckt, aber es können weitere Probleme bestehen. Weitere Informationen zu Sicherheitsrisiken und sicherem PHP-Code finden Sie hier. Bitte lesen Sie dies durch, bevor Sie diesen Code auf Ihrem Server implementieren, um potenzielle Sicherheitslücken zu vermeiden.
Das ist ausgezeichnet! Genau das, was ich persönlich brauche, um mit der richtigen PHP-Skripterstellung zu beginnen! Nochmals vielen Dank für die Qualität :)
Toller Artikel, Chris!
Aber nur eine Korrektur… die HEREDOCS beginnen mit <<< anstelle von >>>
Nun, DAS ist peinlich …
Das passiert, wenn ich Suchen & Ersetzen wahllos verwende. Danke für den Hinweis!
Ach… schon gut… kein Problem
Vielen Dank! Das ist genau das, was ich so lange gebraucht habe!
GENIALES Tutorial! Ich liebe wirklich die Qualität der Sachen, die du in letzter Zeit auf CSS-Tricks schreibst, es ist hervorragend. Ich werde diesem Tutorial auf jeden Fall folgen und es als einfaches CMS für Kunden verwenden, die Broschüren-Websites wünschen.
Eine großartige Fortsetzung (aus meiner Sicht) wäre, wie man dieses einfache CMS im gleichen Format anpasst, um mehrere Seiten zu unterstützen.
Bin gerade dabei, die Website meiner Kunden zu aktualisieren, um es ihnen einfacher zu machen, sie im Büro zu aktualisieren. Das wird perfekt funktionieren! Vielen Dank!
Verwenden Sie SQL-Parameter aus Sicherheitsgründen…
Oh, super, ich habe gerade angefangen, PHP zu lernen, und habe nach so etwas gesucht! Danke!
Tolles Tutorial! Dies ist ein großartiges Beispiel für Einfachheit, hat aber dennoch fortgeschrittene Konzepte dahinter. Könnten Sie dies in Zukunft vielleicht erweitern, um Aktualisieren und Löschen einzubeziehen?
–Brenelz
Ich hatte noch keine Zeit, dies richtig zu lesen … aber beim Überfliegen sieht es nach einem großartigen Artikel aus. Das ist genau das, was da draußen gebraucht wird … einfache, Schritt-für-Schritt-Anleitungen zu PHP und CMS-Entwicklung. Großartige Arbeit, Chris. Vielen Dank für deine Bemühungen.
Tolles Tutorial!
Es gibt ein paar Dinge, die meiner Meinung nach bei der Verwendung von OOPHP hervorgehoben/berücksichtigt werden sollten.
Klassen verbessern Ihren Code nur, wenn sie richtig verwendet werden. Diese Klasse ist nicht viel nützlicher, als wenn sie in prozeduralem Code erstellt worden wäre. Im Grunde ist sie zu breit gefächert. Normalerweise würden Sie all diese Funktionen in mehrere Klassen aufteilen und sie in einer CMS-Klasse verwenden.
class DB_MYSQL (Funktionen für CRUD-Aktionen gegen eine MySQL-DB)
class DBConnect (Funktionen zum Verbinden mit einer Datenbank – sollte ein Singleton-Muster sein)
class Template (Funktionen zum Anzeigen des Formulars)
class ValidateData (Funktionen zum Filtern/Validieren von Benutzereingaben)
Vielen Dank für den tollen Beitrag!
Tolles Tutorial, freue mich auf weitere Tutorials zur Entwicklung von CMS und PHP!
Precioso!!
Gerade als ich anfangen wollte, PHP zu lernen. Gute Möglichkeit, um zu beginnen.
Vielen Dank dafür, mach weiter so mit dieser Art von Tutorials.
Verdammt, benutzt ein Framework! Ich stimme zu, dass jeder PHP-Entwickler dies in 5/10 Minuten tun können sollte, aber komm schon, warum so Zeit verschwenden? Das ist der Grund, warum PHP-Anwendungen zu nicht wartbaren Ungeheuern aus vagem undokumentiertem Code heranwachsen …
Ich weiß, HERRGOTT, warum sollte man etwas LERNEN wollen, wenn es schon fertig ist. Deshalb würde ich nie lernen, ein Instrument zu spielen, es gibt schon Unmengen von Alben, die ich mir anhören kann.
Tolle Tutorials sollen Menschen beim „Lernen“ helfen … erfahrene Entwickler mussten auch irgendwo anfangen.
Hahaha, tolle Antwort Chris… @Hafseflats, es stimmt, dass WordPress, Joomla beim Content Management helfen, aber manchmal braucht ein Kunde auch eine spezifische Website und WordPress – Joomla usw. helfen uns überhaupt nicht. Dies ist der beste Weg, um unsere Arbeit zu verbessern, und ist auch sehr professionell.
Du hast Recht, ein Framework. Das ist eine wirklich großartige Idee. Ich meine, es ist nur etwa 1 MB für ein PHP-Framework, und diese Seite ist so kurz, dass sie nur etwa 4 KB groß ist. Warum um alles in der Welt sollte man BW und HDD-Speicherplatz sparen wollen? Verrückt.
Warum sollte man jemals lernen wollen, WARUM Dinge funktionieren? Weil die Leute, die CMS-Tools und Frameworks schreiben, einfach mit bereits fertigen CMS-Tools und Frameworks geboren wurden.
Vielen Dank Jason Lengstorf, dieses Tutorial war großartig, weil es nur das Nötigste getan hat und ich ein paar Bücher durchgelesen habe und sie immer Tutorials zum Erstellen eines CMS machen, aber sie sind immer viel zu langwierig und verwirrend für einen Anfänger. Persönlich verwende ich WP und SilverStripe, aber dies war ein ausgezeichnetes Beispiel für die Interaktion mit Datenbanken.
Ich stimme hatseflats zu
@hatseflats – warum so negativ? Die Verwendung eines Frameworks hat viele Nachteile, sie sind keineswegs perfekt – außerdem lernt man nichts von Frameworks, und ich bin zu 99 % sicher, dass die Leute css tricks besuchen, um neue Fähigkeiten zu erlernen.
Zustimmung.
Ich stimme jedoch auch zu, dass es wahrscheinlich keine schreckliche Idee ist, die vorhandenen Frameworks zu verwenden. Ein echtes CMS ist unglaublich kompliziert, und wie hatesflats sagte, können sie zu ausufernden Albträumen für die Wartung werden.
Ein Verständnis von PHP und MySQL und der Funktionsweise eines CMS verschafft Ihnen jedoch einen großen Vorteil bei der Arbeit mit einer Plattform wie WordPress oder wenn Sie eine kleine Site oder ein Widget erstellen müssen, das von einer Datenbank profitieren würde.
An alle anderen, vielen Dank für all das positive Feedback! Und natürlich ein RIESIGES Dankeschön an Chris für die Veröffentlichung dieses Tutorials. Ich werde einige der Vorschläge aus den Kommentaren aufgreifen und Tutorials dazu schreiben. Wenn es Ihnen also nichts ausmacht, besuchen Sie meine Website oder folgen Sie mir auf Twitter (@jasonatennui), um diese Tutorials in Zukunft zu sehen.
Nochmals vielen Dank!
Folge jetzt! Nochmals vielen Dank für das großartige Tutorial, und mach weiter so!
Ich mag keine Frameworks. Sie sind aufgebläht und versuchen, alles für dich zu erledigen. Ich schreibe meinen eigenen, viel leichteren Code, danke. :)
Das Problem bei der Verwendung eines Frameworks oder CMS, bevor man versucht, sein eigenes zu erstellen, besteht darin, dass man nie lernt, worauf man bei einem guten Framework achten muss. Sich einen Überblick über die Hunderte von PHP-Paketen zu verschaffen, ist eine riesige Aufgabe, und Sie können Ihre Wahl erheblich einschränken, indem Sie sich mit Ihrem eigenen Code die Hände schmutzig machen.
Ich möchte mich wirklich bei dir bedanken! Heute habe ich mein neues Wissen direkt in unserem neuen Intranet angewendet! Grüße
Das gefällt mir sehr gut, kann es kaum erwarten, mehr zu lesen, vielleicht bearbeiten und etwas Ajax einfügen, wie ein kleines Tut, das alles enthält.
Ist der Download-Code mit dem Fehler korrigiert, auf den in einem früheren Kommentar verwiesen wurde?
Schönes Tut. Lasst uns im 2. Teil eine Benutzerauthentifizierung einbauen. :)
Gutes Tutorial. Danke..
Danke für das tolle Tut. werde es später richtig durchgehen. wie kann ich die Beiträge bearbeiten, die ich mit dieser Methode erstelle?
wirklich schönes Tut. Ich würde gerne mehr Teile sehen: Benutzerauthentifizierung, Erweiterung dessen, was gepostet wird, und vielleicht einen Skin für den Admin-Bildschirm. Ich bin gespannt. :)
Das ist sehr einfaches OOP, kannst du mehr Tutorials wie dieses machen, aber es mehr erweitern?
NICHT AUF DEN DEMO-BUTTON KLICKEN
Äh, du musst den Demo-Link reparieren…. Ich erhalte ein Meldungsfenster, das mich informiert: Ooops! … CSS-tricks.com
Müssen wir uns das ansehen?!?
Das ist behoben. Ein Arschloch hat JavaScript-Injection betrieben.
Sie stammten von http://www.totse.com/en/_feedback/feedback.html – falls jemand Lust hat, dort vorbeizuschauen, um ihnen zu sagen, wie super cool sie sind.
Ich versuche nicht, ein totes Pferd zu schlagen, aber ist das nicht ein gutes Beispiel für einen Grund, ein Framework zu verwenden? Der Vorteil hierbei ist, dass einige sehr, sehr kluge Leute (klüger als Sie oder ich) über die Hunderte von Möglichkeiten nachgedacht haben, wie jemand Ihre Website hacken kann. Durch die Verwendung eines Frameworks können Sie von diesen großartigen Köpfen profitieren.
Ich weiß, dass dies ein sehr einfaches Beispiel ist, aber Sie wurden in wenigen Minuten gehackt. Das CMS-Beispiel ist sehr schön und gut geschrieben und eine großartige Einführung in PHP, aber wenn man diesen Weg fortsetzen möchte, muss man sich bald mit Session-Management, SQL-Injection, XSF, Session-Fixation und so weiter auseinandersetzen. Wäre es nicht schön, ein Framework damit umgehen zu lassen und sich mit dem Hinzufügen von Funktionen und gutem Design zu beschäftigen?
Seien wir ehrlich, WordPress, Drupal und andere Blogs sind Frameworks. Niemand beschwert sich über deren Aufblähung.
Also, all ihr Code-Freaks: Anstatt nur beiläufig zu kommentieren, dass ihr Framework-Bloat nicht mögt, oder dass ihr durch die Verwendung eines Frameworks nie lernt zu programmieren, gebt den Leuten genaue Informationen und lasst sie lernen.
Abgesehen davon, wenn Ihnen dieses Tutorial gefallen hat, sollten Sie sich das CakePHP-Tutorial zum Erstellen eines Blogs ansehen und vergleichen, wie es sich zur direkten Codierungsmethode verhält.
oder du könntest sicheren Code schreiben ……
Dies ist ein Beispiel, Leute, das eingerichtet wurde, damit unerfahrene Programmierer etwas lernen. Ich bezweifle, dass eine unserer ersten Anwendungen zum Beispiel SQL-Injection-sicher war, aber eines Tages haben wir davon erfahren und dafür gesorgt, dass es uns nicht passiert. Wenn alles, was man wissen muss, um ein gutes und sicheres Framework zu schreiben, hier wäre, wäre es kein Tutorial, sondern ein Buch, sogar eine Bibliothek
Oh, und ich habe versucht, auf den OK-Button zu klicken … es geht nicht.?!? sehr frustrierend
tolles Tutorial, danke ;)
Ich denke, du solltest etwas gegen Javascript Injection tun.
Yep, tolle Sache! :D
Solche Tutorials verbessern mein Lernerlebnis wirklich. Vielen Dank an alle, die dazu beitragen.
Danke Chris. Das ist genau das, wonach ich gesucht habe, um mein eigenes CMS zu erstellen. Ich hatte eins mit Textdatei anstelle von mySQL zuvor, es hat nicht genau so funktioniert, wie ich es wollte.
Vielen Dank Jason und Chris für dieses großartige Tutorial. :)
Das sollte alle XSS beheben :D
Wirklich nützlich wäre es, eine Möglichkeit zu zeigen, Kategorien zu erstellen … mit Beiträgen, die auf ihrer eigenen Seite angezeigt werden.
Danke Chris und Jason für dieses Tut. tolle Arbeit.
P.S. Ich fand das Video „that’s what she said“, das du aus dem Artikel verlinkt hast, großartig. es war brillant und lustig.
Ich konnte nicht anders … :)
Nochmals vielen Dank für all das großartige Feedback!
Ich mache mir Notizen und werde Blogs über Benutzerauthentifizierung, Bearbeiten von Beiträgen und die Verwendung von AJAX mit PHP und MySQL veröffentlichen. Gibt es noch etwas, das Sie gerne sehen würden?
Besuchen Sie unbedingt meinen Blog und abonnieren Sie den RSS-Feed, damit Sie sie nicht verpassen!
Ich würde gerne sehen, wie man ein einfaches Bild-Plugin mit PHP und MySQL erstellt.
Fantastisch! Ordentlich und sauber. regt zu weiteren Ideen an. Vielen Dank.
Schönes Tutorial, um mich für ein CMS in Gang zu bringen. Ich bin ein erfahrener ColdFusion-Entwickler und habe mir letzte Woche die Zeit genommen, in PHP einzutauchen, damit ich kleinere Websites auf viel günstigerem Hosting erstellen kann. Ich möchte ein wiederverwendbares CMS erstellen, damit ich es einfach in zukünftige Websites einfügen kann.
Gott sei Dank haben sich die Leute, die die großen Frameworks schreiben, nicht nur auf die bestehenden Frameworks verlassen. Einfach das zu verwenden, was alle anderen getan haben, ist keine sehr gute Möglichkeit, um neue, bessere Dinge zu bekommen. Es ist eine Sache, den bestehenden Code ständig zu verbessern, aber hin und wieder ist es einfach die beste Lösung, ganz von vorne anzufangen, um alle neuesten Techniken zu verwenden, und so lernt man.
Vielen Dank für das Tutorial.
Hallo, dieses Tutorial gefällt mir sehr gut, aber ich habe eine Frage. Ich fange gerade erst mit der Webentwicklung an und frage mich, welche Sprache man am besten zuerst lernt? Ich dachte an PHP oder Ruby on Rails? Ich weiß, dass PHP eine Skriptsprache ist und Rails ein Framework, welche Sprache wäre am besten, um zuerst zu lernen, um die andere zu verstehen?
Bitte und danke. :)
Ruby on Rails ist etwas einfacher – ich bin mir ziemlich sicher, dass das gesamte Ziel des Projekts darin bestand, die Backend-Entwicklung zu vereinfachen.
PHP gibt Ihnen ein besseres Verständnis des wie, wenn Sie danach suchen.
Danke für das Tutorial
Hallo, Chris.
Ich weiß nicht, wann du das machst!! Schläfst du nicht?
Nichts für ungut, aber ich habe einen kurzen Blick auf deinen Artikel geworfen, und es gibt eine Menge Dinge, mit denen ich ein Problem habe.
Warum führst du CREATE TABLE IF NOT EXISTS bei jedem Seitenaufruf aus? Das ist eine etwas nutzlose Abfrage. Erstelle sie, und speichere dann irgendwo, dass sie erstellt wurde – oder mach es einfach manuell.
display_admin() Formular. $_SERVER[‘PHP_SELF’] ist nicht sicher. XSS ausnutzbar. Bereinige es mit htmlspecialchars($_SERVER[‘PHP_SELF’], ENT_QUOTES) oder htmlentities($_SERVER[‘PHP_SELF’]);
Wenn magicquotes GPC eingeschaltet ist, möchten Sie Schrägstriche von Elementen in $_POST entfernen, bevor Sie sie in die Datenbank einfügen. (In den meisten Fällen ist magicquotes GPC heutzutage deaktiviert)
In der INSERT-Abfrage zum Einfügen eines neuen Elements ist es am besten, die Felder anzugeben, in die eingefügt werden soll. Wenn Sie der Tabelle eine weitere Spalte hinzufügen (zum Beispiel mit einem Standardwert), müssen Sie auch die Abfrage anpassen. Wenn Sie Spalten explizit benennen, müssen Sie das nicht.
mysql_num_rows sollte mit Vorsicht verwendet werden. Es ist sicher zu verwenden, wie Sie es verwenden, wenn Sie ein LIMIT haben, das in der Abfrage sehr niedrig eingestellt ist. Warum? Diese Funktion lässt PHP jede einzelne Zeile manuell zählen. Die beste Lösung (für große Datensätze) ist, entweder eine COUNT-Abfrage separat durchzuführen oder, noch besser, in der While-Schleife ein Flag zu setzen, ob Beiträge verarbeitet wurden oder nicht. (Apropos, Sie könnten einfach if(!$entry_display) { … keine Beiträge Nachricht } machen).
Sie müssen stripslashes nicht verwenden, wenn Sie die Daten aus der Datenbank abrufen. Besonders wenn magicquotes GPC ausgeschaltet ist, da dies legitime Schrägstriche entfernt.
Noch einmal, $_SERVER[‘PHP_SELF’] ist verunreinigt. Das ist hier besonders wichtig, da es sich um eine öffentlich zugängliche Seite handelt. Entwerte es, bevor du es anzeigst.
if($_POST) ist eine sehr schlechte Überprüfung. Überprüfen Sie, ob $_SERVER[‘REQUEST_METHOD’] POST ist, oder ob $_POST nicht leer ist (if(!empty($_POST)) {)
Tut mir leid, aber ich habe ein Problem damit, wenn Sie anderen Leuten beibringen, wie man eine Programmiersprache verwendet – Sie müssen es richtig machen, damit Sie keine schlechten Praktiken lehren.
Vielen Dank für den Hinweis auf Lücken im Skript. In weiteren Teilen dieser Serie werde ich die von Ihnen erwähnten Korrekturen vornehmen, um sicheren Code zu gewährleisten.
Ich lerne noch, also entschuldige ich mich für meine faux pas. Ich versichere Ihnen, dass sie unbeabsichtigt waren. :)
Großartige Arbeit Jason Lengstorf!
Ich denke, dieser Artikel ist sehr gut gemacht und wird vielen ehrgeizigen Web-Köpfen eine große Hilfe sein!
Ich wurde kürzlich (Dezember 08) beauftragt, eine benutzerdefinierte Webanwendung für einen Kunden zu erstellen. Ich wusste, dass ich mit einer Art CMS-Framework arbeiten und viele Daten erstellen, lesen, aktualisieren und löschen musste, was das CMS-Framework aufgrund der kundenspezifischen Natur des Projekts nicht konnte.
Also verbrachte ich eine Woche damit, ein sehr schönes Tutorial auf lynda.com (keine Werbung beabsichtigt) durchzugehen, wie man ein CMS mit PHP und MYSQL erstellt. Jetzt habe ich ein besseres Verständnis dafür, wie PHP/MYSQL/CMS funktionieren, und konnte einige meiner ersten Funktionen problemlos schreiben. ABER, ich denke, dieser Artikel hätte mir viel Zeit gespart, wenn ich ihn vor meinem Projekt gelesen hätte.
Tolle Arbeit, Leute!
Ich will die Parade nicht stören, aber das
display_public()ist schrecklich. In derselben Funktion haben Sie Datenzugriff, Geschäftslogik und Templating-Logik. Verstehen Sie mich nicht falsch, Ihr Beitrag ist wahrscheinlich interessant für PHP-Neulinge, aber er lehrt schlechte Praktiken. Mit Vorsicht verwenden.Danke Chris… Jeder PHP-Anfänger würde das lieben..
Schön, wie heißt der Icon-Satz, der in diesem Tutorial verwendet wird? Ich liebe den Look!
Habe das auf popurls gesehen.
Ich liebe Heredoc. Nun, in Ruby. Dasselbe, allerdings. Heredoc rockt.
Toller Beitrag, Jason. Vielen Dank! Ich spiele schon länger mit dem Gedanken, mein eigenes CMS zu erstellen, weiß aber nicht wirklich, wo ich anfangen soll. Es wäre großartig, wenn Sie dies erweitern würden – ein umfassenderes CMS erstellen?
Nach all dem großartigen Feedback zu diesem Tutorial denke ich darüber nach, eine Reihe von Artikeln zu starten, die einige der verschiedenen Aspekte beim Erstellen eines CMS behandeln. Ich werde hier beginnen und auf diesem Modell aufbauen, um das Hochladen von Bildern, die Benutzerauthentifizierung und all die guten Sachen zu ermöglichen. Stellen Sie sicher, dass Sie meinen RSS-Feed abonnieren oder mir auf Twitter folgen!
Klingt gut, ich werde definitiv folgen.
sehr geschätzt. Danke!
Jason Lengstorf, danke! aber kannst du die delete- und edit-Methode für diese Demo schreiben?
nochmals vielen Dank!
Hallo Jason,
Es gibt etwas, das ich am Code nicht verstehe. Ich sehe 'var $host', was mich verwirrt. Ich erinnere mich nicht, dass PHP 'var' verwendet. Ich weiß, dass JavaScript 'var' verwendet, aber wozu dient es hier?
Macht es etwas…? Eine Konvention?
Es stellte sich heraus, dass ich PHP4-Syntax verwendet habe.
Die Verwendung von var ist in PHP5 anscheinend nicht notwendig. Stattdessen hätte ich die Sichtbarkeit deklarieren sollen (d. h. private $host;).
Danke für den Hinweis!
PHP ist scheiße….
Rails rockt. Du kannst das mit Kommentieren in 10 Minuten in Rails machen.
RoR FTW!!!
Du bist ein Idiot. PHP ist eine großartige Web-Programmiersprache – herumlaufen und Leuten zu sagen, sie sollen stattdessen Rails verwenden, wird bei Anfängern nur Verwirrung stiften. Man verwendet Rails nicht, um Skripte für ein paar einfache Seiten zu erstellen, und es ist ganz bestimmt nicht die einzige verfügbare Option. Und es ist absolut nichts falsch daran, PHP zu verwenden – schau dir CakePHP an.
Vielen Dank. Es ist hilfreich. Ich verwende PHP nach einer langen Pause wieder.
Ich erhalte einen Fehler, wenn ich deinen Code auf meinem Server ausführe
Notice: Undefined index: admin
zeigt auf diese Zeile
echo ( $_GET[‘admin’] == 1 ) ? $obj->display_admin() : $obj->display_public();
Ich erhalte diesen Fehler nicht, wenn ich die Demo (auf deinem Server) verwende.
Irgendeine Idee, warum?
Danke für diesen schönen Artikel. Ich habe PHP und SQL aus einigen Büchern und w3schools gelernt. Ich habe gute Kenntnisse erworben, jetzt suche ich im Internet nach der Entwicklung meiner ersten Website, dein Artikel ist hilfreich, danke.
Ein weiterer Grund, warum Leute, die nicht wissen, was sie tun, nicht versuchen sollten, anderen zu erklären, wie man Code schreibt.
1: Verwendet var mit public. var = PHP4 und public = PHP5 Syntax
2: Folgt keinem etablierten Codierungsstandard (z. B. PEAR-Standard)
3: Klasse wird im Grunde als Wrapper für prozedurale Funktionen verwendet
4: Wie bereits erwähnt, ist der Code überhaupt nicht getrennt.
5: Die Verwendung von if zur Überprüfung, ob ein Array-Index existiert, führt zu einer Warnung, stattdessen sollte isset() verwendet werden
6: Baut DB bei jeder Anfrage auf (wie bereits früher erwähnt)
Da es sich nicht gerade um einen fortgeschrittenen Artikel handelt, könnten die meisten Anfängerprobleme im Code ignoriert werden, aber sie sollten zumindest angesprochen werden. Woher soll ein Anfänger wissen, dass dieser Code schlecht ist und dass er sich weiterbilden sollte, wenn du es ihm nicht sagst?
Toller Artikel, ich mag die Anfänger zu deinem ersten CMS, aber es ist wirklich zu einfach. Es folgt überhaupt keinem MVC-Muster, dem die meisten CMS heutzutage folgen. Du integrierst das HTML in dein HTML, obwohl du es trennen solltest. Ich verstehe, dass es für Anfänger ist, aber du drängst sie in die falsche Richtung, dies sollte eher für „Standards“ in der heutigen Codierung sein und nicht für die 10 Jahre zuvor.
Sehr schlechter Programmierstil … Sie haben versucht, es professionell aussehen zu lassen, aber das ist es nicht. Sie verlassen sich auf einige PHP-Fehler, ignorieren Hinweise, anstatt alles korrekt zu verwenden. Sie trennen sogar NICHT das Design vom Code.
Ich empfehle wirklich niemandem, diesen Code überhaupt zu verwenden. Es gibt Ihnen ein schlechtes Beispiel dafür, wie man ein Programmierer ist.
Tolles Tutorial. Ich habe darüber nachgedacht, PHP zu lernen, gute Programmierer sind schwer zu finden. :) Werde es mit einem Tweet weitergeben.
Hey Kumpel. Ordentliches Tutorial.
Nur ein Hinweis, das „Build the Database“ lässt sich nicht kompilieren, weil der schließende Heredoc-Bezeichner die erste und einzige Sache in der Zeile sein muss, aber er ist eingerückt. keine große Sache, aber PHP löst den Fehler „Parse error: syntax error, unexpected $end…“ aus
Probieren Sie Ajax: http://www.ajaxbasics.com
hmm tote Domain?
Notice: Undefined index: admin in SimpleCMS\display.php on line 48
Notice: Undefined variable: entry_display in SimpleCMS\_class\simpleCMS.php on line 30
Wie löse ich das?
Die Art und Weise, wie Ihr Server Benachrichtigungen eingerichtet hat, verursacht diese Fehler. Um den ersten zu korrigieren, müssen Sie in display.php nur eine Überprüfung hinzufügen, ob die Variable gesetzt ist
echo ( isset($_GET[‘admin’]) && $_GET[‘admin’] == 1 ) ? …
Das andere Problem scheint daher zu rühren, dass ich $entry_display nicht explizit deklariert habe, bevor ich angefangen habe, etwas hinzuzufügen. Um es zu lösen, deklarieren Sie einfach $entry_display = ”; direkt unter dem Start der Funktion display_public.
Ich hoffe, das hilft!
Als relativer PHP/MySQL-Anfänger (nach einem Jahr gemütlichem Codieren) verstehe ich immer noch nicht, warum MySQL so langsam ist.
Ich schätze, mit dem einfachen Code im Tutorial wird der gesamte Prozess schnell sein, aber sobald man Komplexitätsstufen wie WordPress erreicht, finde ich, dass die Geschwindigkeit nicht das ist, was ich mir vorgestellt habe. Klar, wenn Sie Ihre Website/Ihren Blog bei Ihrem ISP hosten oder einen schnellen Firmen-Intranet-Server haben, dann nehme ich an, dass es in Ordnung sein wird. Aber nicht auf meinem Atom 230/2GB RAM Heimserver.
Ich habe viel recherchiert, warum das so ist, und der Engpass war immer MySQL, nicht PHP. Was ist also mit einem einfachen CMS ohne Datenbank oder einem mit einer leichtgewichtigen Datenbank? Trotzdem ein schönes Tutorial, besonders der oophp-Teil, den ich noch nicht angefasst habe. –Hans
Dies ist bei weitem keine nützliche Einführung in PHP. Es ist eine amateurhafte Einführung in PHP.
Eines der Übel der PHP-Programmierung sind SQL-Injections. Sie entstehen durch die Verwendung von String-Verkettung und dem oft vergessenen Escaping. (Was der Autor offensichtlich getan hat.)
Wenn Sie eine echte Einführung in PHP und MySQL erhalten möchten, suchen Sie nach einem Artikel über PDO oder SQL prepared statements. Es ist sicherer und einfacher.
In der heutigen Zeit ist Sicherheit sehr wichtig. Jedes 'mein erstes PHP ___'-Tutorial muss dies abdecken, angesichts des Erbes an Scheiß-Code und Scheiß-Tutorials.
Sie müssen Prepared Statements und parametrisierte Abfragen verwenden. Dies ermöglicht Ihnen eine einfache Datenvalidierung und Bereinigung der Eingaben. Escaping und Strippen decken nicht alle Ihre Basen ab. Dieses Tutorial lässt den Endbenutzer weit offen für sowohl SQL-Injection als auch XSS.
Mysqli ist ein gutes Modul dafür. Das Beste daran ist, dass es in SQL 5 und höher integriert ist. Es gibt keine Entschuldigung für Raw Queries.
Ein sehr schönes Tutorial. einfach und auf den Punkt gebracht. Mir gefällt auch das Design Ihrer Website. Nur neugierig, welches CMS betreiben Sie für Ihre Website? Oder ist Ihre Website komplett von Grund auf neu erstellt?
WordPress, Baby. CMS der Champions =)
Ich schätze die Einführung in dieses Thema, aber mein Hauptproblem mit diesem Tutorial ist, dass es nicht erklärt, warum man diese Dinge überhaupt macht. Ich verstehe zum Beispiel, dass „$this“ offensichtlich eine Variable ist, aber warum schreiben wir „$this->“ vor jeden einzelnen Teil des Datenbankaufrufs? Das ist weniger ein Tutorial als vielmehr eine Anleitung nach dem Motto: „Kopiere blind, was ich mache, um genau das gleiche Ergebnis wie ich zu erzielen.“ Ich habe bereits PHP verwendet und geschrieben, daher habe ich ein grundlegendes Verständnis, aber eine Klärung des Warums ist für mich genauso wichtig wie das Wie.
Nur meine 2 Cent.
Es tut mir leid, aber das ist wirklich eine furchtbare Einführung in die Welt von PHP, und Chris sollte diesen Artikel komplett entfernen. Er wurde von jemandem geschrieben, dem es an Erfahrung mangelt, der viele schlechte Gewohnheiten hat und diese schlechten Gewohnheiten an ahnungslose Anfänger weitergibt.
Es ist nicht furchtbar, da es nicht als enzyklopädische Einführung in die Erstellung eines CMS mit PHP/MySQL gedacht ist, aber es lehrt auch nicht wirklich etwas. In dieser Hinsicht finde ich, dass es Anfängern nicht gerecht wird.
Gott sei Dank für WordPress!
Ich glaube, das ist NICHT für Anfänger. Es gibt eine Menge Dinge, die ich nicht verstehe, und du hättest sie erklären sollen, wenn das Tutorial wirklich für Anfänger wäre
Zum Beispiel: Wann man { } oder [ ] Symbole verwendet, wann man das ; verwendet
Was sind „$r = oder $q= oder $p“? Sind das Variablen oder gehören sie zur PHP-Sprache?
@Jorge, für etwas Grundlegenderes kannst du unter http://w3schools.com/php/ nachsehen
Gruß!
Bisher habe ich nur Kritik an diesem Tutorial gesehen; könnte ein kluger Programmierer bitte eine Liste mit GUTEN Ressourcen posten, d. h. Tutorials, die sich auf gute PHP-Codierungspraktiken, gute Sicherheit, die Trennung von Code und HTML usw. konzentrieren?
Vielen Dank!
Leute lieben es einfach, sich zurückzulehnen und auf den Code anderer zu pinkeln. Es ist eine gute, solide Einführung in ein paar gängige Technologien, lasst mal locker.
Das gesagt, ich habe eine Frage! Ich bekomme den folgenden Fehler, wenn ich versuche, display.php zu laden
Parse error: parse error, expecting
T_STRING' orT_VARIABLE’ or `T_NUM_STRING’ in C:\www\simpleCMS\_class\simpleCMS.php on line 69Zeile 69 lautet
if ( ($p['title']) )
Ich habe sowohl „!empty(…)“ als auch „isset(…)“ ausprobiert, um sicherzustellen, dass $p['title'] in Ordnung ist, aber derselbe Fehler tritt auf. Es sieht so aus, als ob eine Art Typdeklaration benötigt wird, was für eine lose typisierte Sprache seltsam erscheint. Irgendwelche Ideen?
danke.
Jemand hat erwähnt, dass das Ende einer HEREDOC-Anweisung im Quellcode eingerückt war, was zum Code-Bruch führen würde. Überprüfe display_admin() und stelle sicher, dass der schließende Begrenzer („ADMIN_FORM“) keine Leerzeichen davor hat.
Und wenn du diesen Code für etwas anderes als zum Lernen verwenden möchtest, solltest du dich mit Sicherheitsmaßnahmen wie mysqli oder PDO vertraut machen. SQL-Injection ist böse. Du kannst hier darüber lesen.
sehr nützliche Informationen für Anfänger.
Ich hasse es, es zu sagen, aber ich war ein Neuling bei Mysql und PHP und habe dann die Dreamweaver-Funktionen entdeckt, um schnelle CMS zu erstellen
Sobald man loslegt, hört es nie auf, und man kann viel mit einer einfachen GUI machen. Ich weiß, dass es Puristen gibt, die niemals den Notizblock verlassen würden, aber für einen Anfänger ist es ein großartiger Anfang
Was für ein schreckliches Stück Scheißcode ist das? Fehler!
Ich habe gerade genug PHP und MySQL gelernt, um zurechtzukommen. Ich freue mich auf den Rest dieser Serie – insbesondere auf das Anzeigen und Bearbeiten und Speichern von Änderungen.
sehr nützliche Informationen für Anfänger.
das ist nichts für Anfänger, das ist sicher…
Vielen Dank für das großartige Tutorial und bitte weiter so!
Ich mache mir persönlich Sorgen, dass dein CMS das Admin-Formular anzeigt, wenn eine GET-Variable auf 1 gesetzt ist. Du solltest mindestens vorschlagen, dass ein Schlüsselwert (Passwort) vom Administrator festgelegt und stattdessen verwendet wird.
Danke für dieses leicht verständliche PHP/MySql-Tutorial :)
Das ist großartig und eine große Hilfe.
Mach weiter so.
Jason Lengstorf, danke! aber kannst du die delete- und edit-Methode für diese Demo schreiben?
nochmals vielen Dank!!
Das war ein wirklich nützlicher Artikel, gut geschrieben und gut präsentiert. Glaubst du, dass die Verwendung von Klassen und Funktionen so früh für einige der neueren Benutzer von php mysql vielleicht etwas zu viel war?
Leute, CMS ist ein gutes Konzept. Vielen Dank. Wenn ihr über Datenbanken sprecht, konsultiert bitte einen DBA oder jemanden, der sich mit Datenbanken auskennt. Ihr verwechselt eine Datenbank mit einer Tabelle. Mit MySQL könnt ihr viele Datenbanken haben. Datenbanken werden verwendet, um Tabellen zu gruppieren, die miteinander in Beziehung stehen. Eine Tabelle ist keine Datenbank. Eine Datenbank ist keine Tabelle. Ich hoffe, das hilft.
Gott sei Dank haben sich die Leute, die die großen Frameworks schreiben, nicht nur auf die bestehenden Frameworks verlassen. Einfach das zu verwenden, was alle anderen getan haben, ist keine sehr gute Möglichkeit, um neue, bessere Dinge zu bekommen. Es ist eine Sache, den bestehenden Code ständig zu verbessern, aber hin und wieder ist es einfach die beste Lösung, ganz von vorne anzufangen, um alle neuesten Techniken zu verwenden, und so lernt man.
Danke für das Tutorial..
An alle negativen Leute, die schlechte Kommentare gepostet haben. Es ist einfach, negativ zu sein, aber ihr selbst könntet tatsächlich keinen besseren Code schreiben, denn wenn ihr es könntet, dann macht euer eigenes Framework und erzählt uns davon.
Danke für das Tutorial!
Ein Freund und ich haben eine Website mit CMS entwickelt, und während er PHP versteht, tue ich das nicht. Das war eine großartige Möglichkeit, die Datenbankverbindungen zu verstehen, die stattfinden, und wie man Datenbankinhalte mit PHP hinzufügt/anzeigt.
Nochmals vielen Dank,
Chris
Ich denke, das Tutorial war ein anständiges Beispiel dafür, was mit einfachem PHP und MySQL erstellt werden kann.
Es ist wirklich ironisch, dass so viele Leute schreien, dass es schrecklich ist, ohne ein Tutorial als Ersatz zu empfehlen. :/ Wenn du es kritisieren willst, warum bietest du dann nicht zumindest eine Alternative an?
Gutes Zeug, danke.
Danke Mann, es hilft mir, CMS-basierte Projekte zu lernen….
Das gefällt mir sehr gut, kann es kaum erwarten, mehr zu lesen, vielleicht bearbeiten und etwas Ajax einfügen, wie ein kleines Tut, das alles enthält.
Es ist so cool! Danke dafür, Jason!
Kann ich dieses Tutorial übersetzen?
fantastisch…..
Danke, Bruder.
Ich verstehe wirklich nicht, warum jemand sein eigenes CMS erstellen möchte, anstatt einfach Drupal oder etwas anderes, das bereits existiert, zu erweitern
Entschuldigung, dass ich mich mit Negativität einklinke, aber ich finde, wenn man lehrt, wie man ein grundlegendes CMS schreibt, müssen noch mehr Dinge erwähnt werden. (Auf einige der bereits erwähnten Dinge werde ich nicht eingehen)
OOP – Du bemerkst, dass es eine gute Praxis ist, OOP zu verwenden, aber du verwendest OOP in deinem Beispiel nicht effektiv und lehrst es auch nicht korrekt. Wenn Benutzer anfangen, mehr über OOP-Praktiken zu lernen und sie an deinem Beispiel auszuprobieren, werden sie frustriert sein, weil es nicht funktioniert. Du hast eine Superklasse, die viele Funktionen kombiniert. Du kannst diese Klasse nicht wie folgt erweitern
SELECT * FROM… ist langsam und schlechte Praxis. Bringt neuen Benutzern gleich das Richtige bei! Wenn eure Anwendung größer wird, dauern eure MySQL-Abfragen länger, weil MySQL die gesamte Tabelle durchsuchen muss, um die 1 (oder 2) Dinge zu erhalten, die ihr benötigt. Versucht stattdessen
Warum hast du HEREDOC verwendet, anstatt Strings auszugeben oder aus PHP auszubrechen?
Geschweifte Klammern sollten immer verwendet werden. Google „PHP Coding Standards“ oder ich empfehle dies von Evolt.org
Mein Kommentar ist im Cyberspace verloren gegangen, also werde ich ihn neu erstellen (schnell).
Zum Artikel werde ich einige der vorherigen Kommentare nicht erwähnen, aber
– OOP. Sauberer Code und gute Praxis – wenn richtig gemacht. Wenn du eine Technik zeigst, verwende sie bitte korrekt. Wenn einer dieser Benutzer sich eingehender mit OOP beschäftigt, wird er enttäuscht sein, festzustellen, dass er das, was du ihm gelehrt hast, nicht vollständig nutzen kann.
– SQL. SELECT * FROM.. ist langsam und schlechte Praxis, wenn deine Anwendung größer wird. Bitte verwende stattdessen SELECT dies, das FROM.., du möchtest keine vollständigen Tabellendurchsuchen durchführen.
warum ist alles in php, warum nicht asp.net, ich denke, das ist viel besser als php, jetzt will ich nicht wieder eine neue sprache lernen. bitte auch einige asp.net exp geben
Tolle Artikel. Gut, dass ich auf deine Seite gestoßen bin. Danke, dass du diese hilfreiche Seite teilst. Daumen hoch!
Hallo Sir,
Das ist wirklich ein super PHP-Klassenbeispiel! Ich habe die letzten Tage danach gesucht und es endlich gefunden!!
Vielen Dank!!!
Es ist ein nettes Stück.
Sicherheit ist kein relevantes Thema für Anfänger, die lernen wollen, wie man Dinge macht. Seien wir realistisch, glaubst du wirklich, dass ein Neuling auf dieses Tutorial gestoßen ist, um eine Online-Banking-Plattform zu entwickeln? (Es würde mich nicht schockieren, aber ich bezweifle, dass dies die Zielgruppe des Autors war).
Ein Neuling wird eher eine kleine „Hallo Welt“-Seite erstellen oder Bilder seiner Kinder damit anzeigen. Es ist also offen für SQL-Injection, klar… aber wenn der Neuling feststellt, dass PedoBear in die Fotos seiner Kinder eingeblendet wurde, wird er seine Sicherheitskenntnisse verbessern.
Jeder ernsthafte Entwickler belegt einen robusteren Kurs zur professionellen Entwicklung, gefolgt von gelegentlichen Sicherheitsauffrischungskursen. Das weiß jeder.
Nun… Niemand, der mit Open-Source-Technologien arbeitet, sollte es wagen, einen anderen zu bashen, weil er sein Wissen kostenlos teilt. Niemals. Korrigiere Fehler aus Respekt vor den Lesern, aber bashe nicht den Autor. Er versucht lediglich, einen Beitrag zur Community zu leisten. Darum geht es bei Open Source.
Ich mag deinen Stil, es auszuteilen.
Vielen Dank ..
Die Welt braucht Leute wie dich. Gute Arbeit
Dein buildDB(); erstellt eine Tabelle und keine Datenbank, oder? Und deine Variable table ist eigentlich eine Datenbank???
Tolles Tutorial. Der OOP-Ansatz ist definitiv der Weg nach vorn. Ich werde diese Technik in meinem ersten großen PHP-Projekt verwenden
Schönes Tutorial. Ich werde die CLASS-Techniken implementieren, um meine PHP-Codes zu platzieren, weil sie meinen HTML-Code unordentlich aussehen lassen, wenn viele PHP-Einfügungen vorhanden sind..lol…aber dieser Beitrag war wahrscheinlich vor 3-4 Jahren..mir ist aufgefallen, dass er die alten MySQL_* verwendet…Die Verwendung davon in deinem SQL-Code ist nicht sicher und veraltet für höhere PHP-Versionen, wie mir jemand gesagt hat…Ich empfehle die Verwendung von MySQLi_* oder PDO..(mehr über die MySQLi_*-Implementierung auf W3Schools.com)..dies hat bessere Sicherheitspässe im Vergleich zu den alten…weil es nicht mehr gewartet wird..Ich habe gerade auf die Verwendung des neuen aktualisiert…Deshalb erwarte ich hier mehr PHP-Techniken, hauptsächlich zu SQL-Injections, da dies ein sehr großes Problem für Entwickler wie mich ist, die nicht auf Frameworks angewiesen sind….schöne Seite..ich werde sie bookmarken…
Bitte folgt diesem Tutorial nicht und sucht ein viel neueres.
Bitte beachtet, dass dieses Tutorial extrem alt ist und veraltete Methoden verwendet (wie die mysql_*-Funktionen – ihr müsst stattdessen mysqli_* oder PDO verwenden).
Diese Seite würde dem Internet einen Gefallen tun, wenn sie dieses Tutorial komplett von ihrer Seite entfernen würde.
Es ist ein fantastisches Tutorial für Anfänger …. ich habe angefangen, php zu lernen, und dies ist mein erstes Tutorial
Danke Mann
Hallo, schönes Tutorial, aber du solltest den Code aktualisieren, da einiges veraltet ist. Dies ist eine großartige Website und rangiert hoch im Google-Index, daher wird es viele n00bs verwirren, die versuchen, den Code zu verwenden.