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]
 
Probier einmal soetwas:

[src=php]<input type="submit" name="<?php print $i; ?>" value="<?php print $submitvalue; ?>">[/src]
 
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?
 
[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]
 
  • 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.
 
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?
 
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.
 
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.
 
  • 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
 
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.
 
@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.
 
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.
 
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:
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:
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.
 
  • 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
 
Zurück
Oben