Wie werden Themen, Posts und Kommentare gelagert?(SQL)

B

BloodSteam

Guest
Hallo,
wie sieht die ganze Struktur der Datenbanken aus?
Wie wird dass alles abgespeichert?

Ich weiß es wird in einer Datenbank abgespeichert wie zb MySQL aber wie genau?
Ich hab zurzeit eine Tabelle mit Usern und jetzt weiß Ich nicht wie es mit den Themen und Posts sein soll.
 
Zuletzt bearbeitet:
Da gibt es verschiedene Wege - Normalisierung .. Denormalisierung.
VBulletin sind da bspw. sehr inkonsistent.

In den 4er-Versionen hast du noch getrennte Tabellen für Foren, Threads und Posts. Die enthalten jeweils die Meta- und Content-Daten.

In der 5er-Version befindet sich alles in einer Tabelle (nodes), in der nur noch durch Content-Typen unterschieden wird, ob es jetzt ein Thread, Post oder Forum ist (totaler scheiß übrigens, wenn man konvertiert). In dem Fall wird aber der Content zumindest in eine separate Tabelle ausgelagert namens "text". Die Node-Tabelle enthält nur Meta-Daten.

Ich würde aber davon abraten zu versuchen ein eigenes Forum zu bauen, da gehört deutlich mehr dazu als nur ein paar Ausgaben und Strukturen und ist extrem überzogener Aufwand.
 
Da gibt es verschiedene Wege - Normalisierung .. Denormalisierung.
VBulletin sind da bspw. sehr inkonsistent.

In den 4er-Versionen hast du noch getrennte Tabellen für Foren, Threads und Posts. Die enthalten jeweils die Meta- und Content-Daten.

In der 5er-Version befindet sich alles in einer Tabelle (nodes), in der nur noch durch Content-Typen unterschieden wird, ob es jetzt ein Thread, Post oder Forum ist (totaler scheiß übrigens, wenn man konvertiert). In dem Fall wird aber der Content zumindest in eine separate Tabelle ausgelagert namens "text". Die Node-Tabelle enthält nur Meta-Daten.

Ich würde aber davon abraten zu versuchen ein eigenes Forum zu bauen, da gehört deutlich mehr dazu als nur ein paar Ausgaben und Strukturen und ist extrem überzogener Aufwand.

Bin erst 23 da gibt es noch viel Zeit. Ich code weil Ich will, nicht weil Ich muss :)

Ich will jetzt nicht für alles ein Thema öffnen (was Ich tun würde da besser für SEO etc :) )

Ich will paar usernamen verbieten, wie Schimpfwörter und namen wie "Admin" etc.
Wie mache Ich es?

Meine Idee war einfach...
Code:
$verboten = ['admin','noob','callofdutyspieler'];
id(in_array($usernameInput)){
    echo "Dieser Username ist verboten.";
}
Also paar Usernamen zu sperren ist nicht schwer aber außer "admin" gibt es noch "4dmin" "4dm1n" "adm1n" "admin1" "admin2" etc...
da kommt man schon auf sehr viele usernamen in einem array. Gibt es da irgendwelche Ideen? Wird dazu pregmatch oder so verwendet?
 
Ja, die vernünftige Prüfung macht man natürlich per RegEx. ^^

Code:
$aForbiddenNames = [
    '#(a|4)dm(i|1|l)n#i',
    '#n(o|0){1,}b#i',
    '#c(a|4)(l|1|i){2}.*?(o|0)f.*?duty#i',
    '#p(e|3)n(i|1|l)(s|5)#i',
    '#huh?r(e|3)#i',
    // etc.
];


if ( preg_match( $sForbiddenNames, $usernameInput ) ) {
  // Whatever
}
 
Zuletzt bearbeitet:
Ja, die vernünftige Prüfung macht man natürlich per RegEx. ^^

Code:
$aForbiddenNames = [
    '#(a|4)dm(i|1|l)n#i',
    '#n(o|0){1,}b#i',
    '#c(a|4)(l|1|i){2}.*?(o|0)f.*?duty#i',
    '#p(e|3)n(i|1|l)(s|5)#i',
    '#huh?r(e|3)#i',
    // etc.
];


if ( preg_match( $sForbiddenNames, $usernameInput ) ) {
  // Whatever
}

Dankeschön.
<ich_verbeuge_mich.gif>

Ich dachte dass man immer die // benutzen muss.
Code:
['/\{[a-zA-Z]\}/']
 
Zuletzt bearbeitet:
Du kannst als Delimiter fast alles verwenden, Hauptsache es ist vorn und hinten das gleiche Zeichen. Wird es in der Expression aber benötigt, muss es dann escaped werden. Weil # aber nur selten vorkommen, nutze ich meist die statt Slashes ^^
 
Ich bin sogar unfähig "Dankeschön" richtig zu schreiben...

Es gibt wieder eine neue Frage von mir :D
Es geht jetzt um die $_SESSION.

Muss ich "session_start();" überall einfügen auch wenn es keine session gibt?
Ganz am Anfang in meiner index.php starte Ich eine session.

Code:
<?php include 'sys/session.php';?>
<!DOCTYPE html>
<html lang="en">

session.php
Code:
<?php
session_start();

if (isset($_SESSION["LAST_ACTIVITY"])) {
    if (time() - $_SESSION["LAST_ACTIVITY"] > 30) {
		// Unset the $_SESSION variable after 30min keeping everything cached.
        session_unset();     // unset $_SESSION variable for the run-time 
    }else if(time() - $_SESSION['LAST_ACTIVITY'] > 45){
		// Destroy the $_SESSION from the cache after 45min.
        session_destroy();   // destroy session data in storage
	} else if (time() - $_SESSION["LAST_ACTIVITY"] > 60) {
        $_SESSION["LAST_ACTIVITY"] = time(); // update last activity time stamp
    }
}

Ich mache alle Kommentare auf english. Es funktioniert auch nicht. Es sollte mich nach 30-45s ausloggen jedoch war es nicht der Fall.

Hab bisschen gesucht wie Ich teste ob eine Session existiert, damit Ich dann "session_start();" verwenden kann.

Folgendes gefunden jedoch weiß Ich nicht was up2date ist.

Code:
// Option1
if(session_id() == '' || !isset($_SESSION)) {
    // session isn't started
    session_start();
}

// Option2
if (session_status() == PHP_SESSION_ACTIVE) {
  echo 'Session is active';
}

Mein Login sieht folgend aus:
Code:
elseif ($hashedPwdCheck == true){
//Log in the user here
$_SESSION['loggedIn'] = true;
$_SESSION['type'] = $row['type'];
$_SESSION['user'] = $username;

echo 'GG, you logged in.';
exit();
}

In der login.php Datei steht auch ein "session_start();" ganz oben.
 
Ich würde auf PHP-Sessions verzichten. Die werden lokal abgelegt und erzeugen nur überflüssiges IO.
Baue was eigenes, über Memcached, eine NoSQL-DB oder die Datenbank.

Ich bin sogar unfähig "Dankeschön" richtig zu schreiben...
Macht nichts, Rechnung folgt.
 
Zuletzt bearbeitet:
Ich lade dynamisch die websiten mit der jQuery load() funktion und Ich hab folgendes Problem:

Code:
SyntaxError: expected expression, got '<'
m
https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js:2:704
globalEval
https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js:2:2496
text script
https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js:2:80630
Ut
https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js:2:73768
k
https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js:2:77335
n/<
https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js:2:79907

Die Datei fängt an mit einem <!DOCTYPE html> und es passiert nur mit einer Seite. Die anderen Laden normal.

Ich glaube es mag mein dropdown menu nicht.

@edit
Dies hier funktioniert bei mir nicht :(

Code:
$bannedNames = [
		'#(a|A|4)d(m|n)(i|I|1|l)(n|m)#i',
		'#n(o|0){1,}b#i',
		'#c(a|4)(l|1|i){2}.*?(o|0)f.*?duty#i',
		'#p(e|3)n(i|1|l)(s|5)#i',
		'#huh?r(e|3)#i',
	];

if(!preg_match('#^[a-zA-Z0-9]*$#i', $username) && preg_match($bannedNames, $username)){
 
Zuletzt bearbeitet:
Ich lade dynamisch die websiten mit der jQuery load() funktion und Ich hab folgendes Problem:

Code:
SyntaxError: expected expression, got '<'
Wie genau hat du jquery denn eingebunden?

@edit
Dies hier funktioniert bei mir nicht :(

Der war auch nur aus dem Kopf kurz zusammengeklöppelt, nicht getestet. ^^ War mit dem Kopf bei preg_replace, da kann man Arrays einsetzen als Pattern.

Code:
$bannedNames = [
	'(a|A|4)d(m|n)(i|I|1|l)(n|m)',
	'n(o|0){1,}b',
	'c(a|4)(l|1|i){2}.*?(o|0)f.*?duty',
	'p(e|3)n(i|1|l)(s|5)',
	'huh?r(e|3)',
	'[^a-z0-9]',
];
if( preg_match('#(' . implode('|', $bannedNames) . ')#i', $username) ){
 
Ganz unten im Index.php

Code:
		<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
		<script type="text/javascript" src="js/script.js"></script>
	</body>
</html>
 
Ich hab es getunt und jetzt läuft es.

Code:
    $uidcheck = strtolower($uid);
    $bannedWords =[
        //hier kommen viele schlimme Wörter rein.
    ];
    $bannedNames = [
    ];
    $test1 = ['/a/','/b/','/c/','/d/','/e/','/g/','/i/','/j/','/k/','/l/','/m/','/n/','/o/','/r/','/s/','/t/','/u/','/v/','/w/','/z/'];
    $test2 = ['(a|4)','(b|d|8)','(c|k)','(d|b)','(e|3)','(g|6|9)','(i|l|1)','(j|i)','(c|k)','(l|1|i)','(m|nn|n)','(n|m)','(o|0)','(r|2)','(s|5)','(t|7)','(u|v)','(v|u)','(w|vv|v)','(z|2)'];
    foreach($bannedWords as $a){
        $word = '\'#'.preg_replace($test1,$test2,$a).'#\'';
        array_push($bannedNames,$word);
        
    }

if(!preg_match('/[a-zA-Z0-9]+/i', $uid) || !preg_match('(' . implode('|', $bannedNames) . ')', $username)){
   echo 'BAN';
}else{
  echo 'alles gut';
}
 
Zurück