• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

if (isset $POST) wird nicht ausgeführt

Diskordier

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
161
Hallo leute ich hab ein problem welches ich nicht verstehe.

Also ich erzeuge mehrere submit Buttons wo jeder Button einen Namen hat.

Dann will ich per _POST das er genau wenn ich diesen einen Button klicke er den code ausführt.

Mit isset kuck ich ob der Button true ist. Aber aus irgend einem Grund schriebt er immer [namedes Button] -> string Fertig geschaut! dieses stam von der $submitvalue = 'Fertig geschaut!'; Ich verstehe nicht warum er dies in die_POST schriebt wenn ich doch nur die [$i] angebe ?

[src=php]<?php if($userid == $userID){ ?>
<form method="POST" action="<?php $_SERVER['REQUEST_URI'] ?>">
<?php $i= $watchanime['animeID'];?>
<input type="submit" name="<?=$i?>" value="<?=@$submitvalue?>"></form><br><?php
if (isset($_POST['$i'])) {
$rohanime = $watchanime['animeID'];
$qry = $sql->prepare("UPDATE anmi1_watch SET status1='seen' WHERE animeID = $rohanime AND userID = $userID");
$qry->execute();
} ?>[/src]
 

electric.larry

\''; DROP TABLE user; --
Teammitglied

Registriert
13 Dez. 2014
Beiträge
4.549
Ort
Raum 43
Probier einmal soetwas:

[src=php]<input type="submit" name="<?php print $i; ?>" value="<?php print $submitvalue; ?>">[/src]
 

CroneKorkN

★ ☆ ☆ ☆ ☆

Registriert
6 Aug. 2014
Beiträge
289
Ort
0176 323 223 71
Um frei bei der Benennung der Buttons zu bleiben, könntest auch auch mehrere Form-Elemente verwenden mit verschiedenen actions und hidden input elementen. Ich steige bei dem Code aber auch nicht ganz durch. Läuft der in einer Schleife? Soll 'animeID' wirklich ein String sein?
 

virtus

Gehasst

Registriert
24 Apr. 2015
Beiträge
1.689
Ort
AUF DEM MOND
[src=php]if (isset($_POST['$i'])) {[/src]

$_POST['$i'] wird nicht gesetzt sein.
$_POST[$i] oder $_POST["$i"] hingegen würde funktionieren.

Der Hintergrund ist, dass in einfachen Anführungszeichen keine Auswertung von Variablen stattfindet:
[src=php]$name = "Peter";
echo "Mein Name ist $name."; // Mein Name ist Peter.
echo "Mein Name ist ".$name."."; // Mein Name ist Peter.
echo 'Mein Name ist $name.'; // Mein Name ist $name.[/src]
 

Diskordier

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
161
  • Thread Starter Thread Starter
  • #5
Vielen Dank ich werd gleich mal testen. Ihr seit die Besten *_*

@CroneKorkN nun ja die werden mit einer foreach erzeug tund ich weiss ja nicht wie viele es davon gibt manahcmal so viel und bei einem anderen Aufrufer nur so viel.

Be der gelegehit möchte ich noch die Gunst der Stunde nutzen und fragen, Wenn ich eine normale Kommentar db habe wie würdet Ihr die anlegen wenn man nun zusätzlich eine möglichkeit einbauen will das man auf einem Kommentar antworten kann ? normal wäre ja KommentarID , UserID Kommentare.
 

CroneKorkN

★ ☆ ☆ ☆ ☆

Registriert
6 Aug. 2014
Beiträge
289
Ort
0176 323 223 71
Könntest du mal den kompletten Code posten?

---
Zur DB: Es gibt diverse Animes und man kann Kommentare dazu abgeben. Jetzt möchtest du, dass man nicht nur einen Anime, sondern gezielt einen Kommentar kommentieren kann?
 

virtus

Gehasst

Registriert
24 Apr. 2015
Beiträge
1.689
Ort
AUF DEM MOND
Ein Kommentar
stammt von einem Nutzer,
bezieht sich auf einen Beitrag oder einen anderen Kommentar
und sollte eindeutig identifizierbar sein.

Daher sollte deine Tabelle für Kommentare die Nutzer ID, die ID des Beitrags oder Kommentars, worauf er sich bezieht, sowie eine eindeutige ID erhalten.
Zusätzlich sollte natürlich der eigentliche Text des Kommentars erfasst werden und es könnte die Uhrzeit gespeichert werden, zu der der Kommentar verfasst wurde.
 

Timon3

Team ModMii

Registriert
17 Juli 2013
Beiträge
499
@Diskordier: So eine Art Forensystem hab ich einmal über JSON-Strings implementiert. Diese werden in die Datenbank abgelegt, von PHP ausgelesen, ggf modifiziert und wieder eingespeichert. Ist sicher nicht die sauberste Möglichkeit, da das ganze über eine eigene Tabelle und Foreign Keys auch möglich wäre, kann man aber auch implementieren, wenn man sich um das Datenbankdesign nicht zu viel kümmern will.
 

Diskordier

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
161
  • Thread Starter Thread Starter
  • #10
Danke es funktioniert nun, ich hab es anders gelöst das mit den Buttons.


Also die Kommentar funktion funktioniert schon die struktur meiner tb für die Kommentare sieht so aus.


commentID, animeID,userID, messages, dateModified, dateCreated



Was ich aber nicht eingebaut habe ist das ein user auf den Kommentar eines anderen user Antworten kann.

Ich bin nicht sicher ob ich da noch eine weitere spalte einfüge mit dem Namen Subcomment

Das heisst wenn der User auf Kommentar Antworten klick wird bei Subcomment eine 1 gesetzt und hochgezählt bei jedem Komment zu dem Anime, aber irgendwie gibt es ja noch das man auf den kommentar des 1.ten (Auf den Kommentar) antwortet. usw ?? XD Vielleicht überlege ich auch zu kompliziert.




[src=text]
commentID, animeID, userID, messages, dateModified, dateCreated, Subcomment
1 1 1 BLA XXXX CCCC 0
2 1 2 REGBLA XXX1 CCC1 1
3 1 3 REREBLA XXX2 CCC2 2
4 1 2 BLANEU XXX3 CCCC 0[/src]

Man ich bekomm das nicht hin das es richtig dargestellt wird, so mir lang es hie rein Bild.

tbl.JPG
 

CroneKorkN

★ ☆ ☆ ☆ ☆

Registriert
6 Aug. 2014
Beiträge
289
Ort
0176 323 223 71
Ein Kommentar gehört immer entweder zu einem Anime oder zu einem anderen Kommentar. Die übersichtlichste Lösung wäre imho:

id, anime_id, comment_id, ...

Gehört der Komentar zu einem Anime, wird anime_id gesetzt, gehört er zu einem anderen Komentar, wird in comment_id die ID des entsprechenden Kommentares gesetzt und anime_id bleibt leer. Die Reihenfolge ergibt sich stets aus date_created.

Oder du speicherst in einer Spalte "ref" stets die ID, in der anderen ("ref_type", boolean) nur, ob ein Anime oder ein Kommentar als Referenz gemeint ist. Diese Lösung wäre in vernachlässigbarem Umfang sauberer.
 

virtus

Gehasst

Registriert
24 Apr. 2015
Beiträge
1.689
Ort
AUF DEM MOND
@CroneKorkN: das ist so nicht ganz korrekt. Ein Kommentar gehört logisch sowohl zu einem Anime, als auch zu einem anderen Kommentar.
Wobei der zugeordnete Kommentar null sein darf.


[src=text]
comments
id aid uid message datecreated
0 1 15 "......." 28.04.2015 16:35:15
1 1 38 "......." 28.04.2015 18:42:26
2 1 15 "......." 29.04.2015 08:29:01
3 1 36 "......." 29.04.2015 16:26:45
4 1 22 "......." 30.04.2015 18:59:26[/src]

[src=text]c2c
cid1 cid2
1 0
2 1
4 0[/src]

Die Struktur dazu sieht dann wie folgt aus

ANIME 1
---- Kommentar 0
-------- Kommentar 1
------------ Kommentar 2
-------- Kommentar 4
---- Kommentar 3


Kommentar 1 bezieht sich auf Kommentar 0
Kommentar 2 bezieht sich auf Kommentar 1
Kommentar 4 bezieht sich auf Kommentar 0
Kommentar 0 und 3 beziehen sich jeweils auf keinen anderen Kommentar

Die Abfrage um den ganzen Baum zu erhalten müsste eine Rekursive Abfrage formuliert werden.
 

CroneKorkN

★ ☆ ☆ ☆ ☆

Registriert
6 Aug. 2014
Beiträge
289
Ort
0176 323 223 71
Wenn du sowohl die kommentar-Id als auch die Anime-Id speicherst, liegt diese information redundant vor. Die Anime ID ergibt sich schon eindeutig aus dem Eltern-Kommentar, es darf also immer nur eine ID gesetzt sein.
 

Shodan

runs on biochips

Registriert
14 Juli 2013
Beiträge
661
Ort
Citadel Station
Wenn du sowohl die kommentar-Id als auch die Anime-Id speicherst, liegt diese information redundant vor. Die Anime ID ergibt sich schon eindeutig aus dem Eltern-Kommentar, es darf also immer nur eine ID gesetzt sein.

Du hast insofern Recht, dass die Anime-Id von der Kommentar-Id abhängt. Dadurch entsteht eine Update-Anomalie: Wird dem Eltern-Kommentar eine andere Anime-Id zugewiesen, müssen die Kind-Kommentare geändert werden. Im Allgemeinen ist es sinnvoll das durch ein Datenbankmodell in Normalform zu verhindern.

Aber: Im Speziellen sieht das eventuell anders aus!
Wenn der Fall "Anime-Id eines Kommentars wird geändert" im Programmablauf nicht auftreten kann (der Fall "jemand pfuscht per Hand in der DB herum" ist zu vernachlässigen), dann hat es keinen Vorteil die Normalform zu forcieren (abgesehen von: dieser Fall kann nachgerüstet werden).
Ein Anwendungsfall, der aber sicher auftreten wird, ist "gib mir alle Kommentare zu Anime-Id". Aus dieser trivialen Abfrage wird, bei nicht redundanter Speicherung, dann eine nicht triviale Abfrage, insbesondere wenn Kommentare über mehrere Ebenen verschachtelt sind. Hohe Abfragekomplexität ist ein Nachteil.

Ist das Vermeiden der Update-Anomalie nicht relevant, würde ich mir den Ärger sparen und redundant speichern. Für einen Anime können sehr einfach alle Kommentare abgefragt werden und aus dieser Liste kann in PHP sehr einfach der Tree aufgezogen werden.

Das Abwiegen zwischen den Vor- und Nachteilen verschiedener Modelle muss der TS anhand der Anforderungen machen.
 
Zuletzt bearbeitet:

CroneKorkN

★ ☆ ☆ ☆ ☆

Registriert
6 Aug. 2014
Beiträge
289
Ort
0176 323 223 71
Ich muss dir voll und ganz zustimmen. Es erschien mir in diesem Fall allerdings der einfachere Weg, den Kommentar-Baum per rekursiver Schleife zusammenzubauen und für jeden Kommentar eine eigene Abfrage durchzuführen.

Dein Weg ist performanter, ich hatte ihn aber als schwieriger bewertet. Jetzt muss sich diskordier nur noch entscheiden :)

edit:
Was halt wegfällt bei meinem Ansatz, ist die Notwendigkeit, das eindimensionale SQL-Result per PHP wieder in eine Baum-Struktur zu klamüsern.
 
Zuletzt bearbeitet:

virtus

Gehasst

Registriert
24 Apr. 2015
Beiträge
1.689
Ort
AUF DEM MOND
Wenn du sowohl die kommentar-Id als auch die Anime-Id speicherst, liegt diese information redundant vor. Die Anime ID ergibt sich schon eindeutig aus dem Eltern-Kommentar, es darf also immer nur eine ID gesetzt sein.

Da hast du Recht, das Datenbankdesign ist nicht in Normalform. Als ich den Beitrag heute morgen verfasst habe, war mir das schon klar und ich dachte bereits, dass das angemerkt wird.
Allerdings ist das Design ohnehin schon kaputt und nicht erst durch meine Änderungsempfehlung. Prinzipiell sind Beitrag und Kommentar bis auf eine Ausnahme gleich: Ein Kommentar hat immer einen Vorgänger, ein Beitrag nie. Erstrebenswert wäre es daher eine Ober- und Unterklassen- Hierarchie aufzustellen. In Java könnte das so aussehen:

[src=java]class Article {}

class Comment extends Article {
private int predecessorID;

public Comment(..., int predecessorID){
predecessorID = predecessorID;
super(...);
}
}[/src]

Mir ist in SQL leider kein schönes hierarchisches System bekannt, daher würde ich mit einem kleinen "Trick" arbeiten.
Es gibt einen allgemeinen Beitrag, der entweder ein Beitrag oder ein Kommentar ist:

[src=text]article
article_id | predecessor_id | autor_id | time | article_text[/src]

Ein Beitrag ist dann ein Beitrag, wenn er keinen Predecessor (null) hat, sonst ist es ein Kommentar.
Das ist sicherlich auch nicht die schönste Lösung, aber zumindest hast du so wiederum keine Verletzung der Normalform.
Zusätzlich sparst du sogar noch Tabellen.
 

Diskordier

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
161
  • Thread Starter Thread Starter
  • #17
Mit Java kenne ich mich nicht aus, und ich hab schon vor das ganze weiterhin wie die normalen Kommentare in php mysql zu programmieren, wenn möglich will ich auf andere sprachen wie zb java script verzichten. Hmm Ehrlich gesagt so ganz klar wie ich das nun aufbauen soll ist mir das noch nicht. Ich müsste also noch jeweil 2 zusätzliche Kommentar ID mit einbauen eine wo den Comment hochzählt zum hauptcommet und eine wo sagt zu welchem aspekt des hochgezählten comment der Comment gehört ? Angenommen ich hab den button auf Kommentar antworten. User 2 klicktdieses Buttons würde bei cid1 eine 1 gesetzt. wenn der user1 auf Button zb Kommentar schreiben, würde did1 0 bleiben. wenn user 3 auf Kommentarantworten button klickt beim user 2 Kommentar wurde did1 2 gesetzt und did2 eine 1
 
Oben