Hallo mates,
ich möchte euch mein neues Lernprojekt vorstellen. Ich hab schon etwas länger nicht mehr mit PHP gearbeitet und bin etwas eingerostet, deswegen dachte ich mir, dass es schlau wäre, wenn ich mal an ein CMS abseits von Habbo arbeite. Ein BlogCMS ist daher ein ideales Erstprojekt ( Würde ich übrigens jeden Neueinsteiger in OOP empfehlen ). Dabei möchte ich mich recht herzlich bei @phil bedanken, der mir bei der aktuellen Entwicklung immer mal Tipps gibt und mich bei den Basickram unterstützt. Lange rede kurzer Sinn. Hier sind Screenshots und bisher alle PHP Snippets. Wer gerne mehr über Wlog erfahren möchte, kann sich gerne weiter unten informieren.
Screenshots:
Startseite
Registrieren
News
Profilseite + Badgetooltip
Snippets:
Connection
<?php
include_once('Configuration.php');
class Connection extends MySQLi
{
private static $_instance = null;
public static function get()
{
if(self::$_instance == null)
{
self::$_instance = new Connection();
}
return self::$_instance;
}
public function __construct()
{
parent::__construct(Configuration::MYSQL_HOST, Configuration::MYSQL_USER, Configuration::MYSQL_PASSWORD, Configuration::MYSQL_DATABASE);
}
}
Alles anzeigen
Login
<?php
include_once('Connection.php');
class Login
{
private $_errors = [
"emptyerror" => "Bitte fülle alle Felder aus!",
"loginerror" => "Dein Passwort oder dein Benutzername ist falsch, bitte korrigiere deine Angaben!"
];
public function __construct()
{
@session_start();
}
public function login($username, $password)
{
$connection = Connection::get();
if (!empty($username) && !empty($password)) {
$password = md5($password);
$check = $connection->query("SELECT * FROM users WHERE username = '" . $connection->real_escape_string($username) . "' AND password = '" . $password . "'");
if ($check->num_rows > 0) {
$check = $check->fetch_object();
if ($username == $check->username AND $password == $check->password) {
$_SESSION["username"] = $check->username;
$_SESSION["password"] = $check->password;
}
} else {
echo $this->_errors["loginerror"];
}
} elseif (empty($username) || empty($password)) {
echo $this->_errors["emptyerror"];
}
}
}
Alles anzeigen
News
<?php
include_once('Connection.php');
session_start();
class NewsFactory
{
public function getById($news_id)
{
$connection = Connection::get();
$query = $connection->query("SELECT * FROM `article` WHERE id = '" . $connection->real_escape_string($news_id) . "'");
if ($query->num_rows > 0) {
$news_row = $query->fetch_object();
return new News($news_row);
}
return null;
}
public function getLatestNews()
{
$connection = Connection::get();
$query = $connection->query("SELECT * FROM `article`");
$result = [];
while ($news_row = $query->fetch_object()) {
$news = new News($news_row);
$result[] = $news;
}
return $result;
}
}
class News
{
private $_row;
public function __construct($row)
{
$this->_row = $row;
}
public function getId()
{
return $this->_row->id;
}
public function getTitle()
{
return $this->_row->title;
}
public function getSubText()
{
return $this->_row->subtext;
}
public function getMainText()
{
return $this->_row->maintext;
}
public function getAuthorName()
{
return $this->_row->authorname;
}
public function getAuthorAvatar()
{
return $this->_row->authoravatar;
}
public function getAuthorAge()
{
return $this->_row->authorage;
}
public function getAuthorText()
{
return $this->_row->authortext;
}
public function getImage()
{
return $this->_row->newsimg;
}
public function getDate()
{
return $this->_row->date;
}
public function addComment($comment)
{
$connection = Connection::get();
if (isset($_SESSION['username'], $_SESSION['password'])) {
if (!empty($comment)) {
$commentquery = $connection->query("INSERT INTO article_comments (username, comment, news_id) VALUES ('" . $_SESSION['username'] . "', '" . $comment . "', '" . $this->_row->id . "')");
}
} else {
echo "spast";
}
}
public function getComments()
{
$connection = Connection::get();
$commentsquery = $connection->query("SELECT * FROM article_comments WHERE news_id = '" . $connection->real_escape_string($this->_row->id) . "' ORDER BY id DESC");
$comments = [];
while ($row = $commentsquery->fetch_object()) {
$comments[] = $row;
}
return $comments;
}
}
Alles anzeigen
Register
<?php
include('Connection.php');
class Register
{
private $_error = [
"emptyerror" => "Bitte fülle alle Felder aus!",
"mailerror" => "Deine E-mail Adresse ist ungültig!",
"repwerror" => "Deine Passwörter stimmen nicht überein, bitte überprüfe deine Angaben!",
"existmailerror" => "Diese E-mail Adresse wird bereits benutzt!",
"existaccountnameerror" => "Dieser Benutzername ist bereits vergeben!",
"bothexisterror" => "E-mail und Benutzername ist bereits vergeben!"
];
public function __construct()
{
session_start();
if (isset($_SESSION['username'])) {
header("Location: ./index.php");
exit;
}
}
public function register($username, $mail, $password, $repassword)
{
$connection = Connection::get();
if (!empty($username) && !empty($mail) && !empty($password) && !empty($repassword)) {
if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
$existcheck = $connection->query("SELECT * FROM users WHERE username = '" . $connection->real_escape_string($username) . "' OR mail = '" . $connection->real_escape_string($mail) . "'");
if ($existcheck->num_rows > 0) {
$existcheck = $existcheck->fetch_object();
if ($existcheck->username == $username && $existcheck->mail == $mail) {
echo $this->_error["bothexisterror"];
} elseif ($existcheck->mail == $mail) {
echo $this->_error["existmailerror"];
} elseif ($existcheck->username == $username) {
echo $this->_error["existaccountnameerror"];
}
} else {
if ($password == $repassword) {
$password = md5($password);
$userimport = $connection->query("INSERT INTO users (username, password, mail) VALUES ('$username', '$password', '$mail')");
$user_query = $connection->query("SELECT * FROM users WHERE id = '" . $connection->insert_id . "'");
$user = $user_query->fetch_object();
$_SESSION['username'] = $user->username;
$_SESSION['password'] = $user->password;
header("Location: ./index.php");
exit;
} else {
echo $this->_error["repwerror"];
}
}
} else {
echo $this->_error["mailerror"];
}
} else {
echo $this->_error["emptyerror"];
}
}
}
Alles anzeigen
Profile
<?php
include_once('Connection.php');
class Profile
{
private $_userData = [];
public function getUserById($userid)
{
if (!isset($this->_userData[$userid])) {
$connection = Connection::get();
$query = $connection->query("SELECT * FROM users WHERE id ='" . $connection->real_escape_string($userid) . "'");
if ($query->num_rows > 0) {
$user_var = $query->fetch_object();
$this->_userData[$userid] = $user_var;
}
}
return $this->_userData[$userid];
}
public function getUserBadges($userid)
{
$connection = Connection::get();
$query = $connection->query("SELECT * FROM badges WHERE userid = '" . $connection->real_escape_string($userid) . "'");
$result = [];
while ($badges_row = $query->fetch_object()) {
$badges = new Badges($badges_row);
$result[] = $badges;
}
return $result;
}
}
class Badges
{
private $_row;
public function __construct($row)
{
$this->_row = $row;
}
public function getBadge()
{
return $this->_row->badgeimg;
}
public function getBadgeDesc()
{
return $this->_row->badgedesc;
}
}
Alles anzeigen
Was ist Wlog?
Wlog ist ein BlogCMS mit einer Benutzeroberfläche. In Wlog kannst du Blogeinträge verfassen, mit anderen registrierten Wlog Nutzern schreiben und deine Meinung in Form von Bild & Text in eleganter Form präsentieren.
Was ist noch geplant mit Wlog?
Ehrlich gesagt habe ich keine großen Pläne für Wlog. Wlog soll nur ein kleines Lernobjekt für mich darstellen, an dem ich meine Programmierfähigkeiten erweitern kann. Natürlich habe ich Interesse daran an mehreren Versionen zu arbeiten, allerdings mehr nicht. Wlog ist ein Free-Release BlogCMS, dass nach Fertigstellung für jeden zugänglich ist.
Mit welchen Programmiersprachen wird Wlog programmiert?
Wlog wird aktuell mit PHP und SQL programmiert. Später, wenn die erste Version des BlogCMS fertiggestellt wurde, wird es immer mal neue Versionen von Wlog geben die das ganze System updaten. Das bedeutet auch, dass in neueren Versionen neue Programmiersprachen wie JS hinzugefügt werden. Wie die Updatepolitik von Wlog aussieht und wie die Updates aussehen werden, wird sich in den nächsten Wochen und Monaten zeigen.