Datenstruktur in einem Datenbankfeld abbilden

Noeden

Erfahrenes Mitglied
Hallo Leute,
ich hab eine Datenstruktur, wie eine Karteikarte. Die hat ja Vorder- und Rückseite. Ich hab dafür aber nur eine Spalte ('Inhalt'). Ich arbeite mit jQuery, php und MySQL.

Natürlich weiß ich, dass es einige möglichkeiten gibt Strukturen wie ein Array als String abzubilden. (XML, oder insbesondere JSON würden sich ja anbieten)

Meine Frage ist jetzt, wie sorge ich dafür, dass wenn ein Nutzer in dem Inhalt eine JSON-Struktur eintippt, diese sozusagen escaped wird und nicht beachtet wird.

Ich hoffe ihr versteht was ich meine.

Danke
MfG noeden
 
Verwende einen BBCode Tag.

Beispielsweise mein News Script verwendet einen [PREVIEWEND] Tag
um den Preview (Einleitung) vom rest zu trennen.

Um das ganze dan zu trennen kannst du die methode explode
http://de.php.net/manual/de/function.explode.php
verwenden.

in meinem Beispiel:
PHP:
$array = explode("[PREVIEWEND]",$string);

Du könntest z.B. [NEXTSITE] o.Ä. verwenden.
So würden die einzellnen Seiten im array landen.
Und BBCodes werden ja in der Regel nicht gefiltert^^
PHP:
$array = explode("[NEXTSITE]",$string);

Dies ist natürlich nur ein Beispiel.. Es brauch nicht unbedingt eine komplexe Struktur um Texte von einander zu trennen.


Optimal wäre es natürlich 2 Tabellen zu machen.
1. Karteikarten [id, titel, beschreibung] oder so ähnlich
2. Seiten [kartenId, seite, text]

So fragst du die Karteikarte ab und suchst alle Einträge
mit der entsprechenden kartenID..
Und sortierst due einträge nach der seite.
 
@H4ckHunt3r:
Danke für deine Antwort: Mein Problem ist nicht, dass MySQL oder php meine Werte escapen und ich so meinen String nicht mehr trennen kann, sondern mein Problem ist es, dass der User, der sich, in diesem Fall eine Karteikarte, baut, eine solche bauen wollen könnte:

Frage:
Was bedeutet dieser BB-Code: [BACK]

Antwort:
Er trennt Vorder und Rückseite von Karteikarten in der Datenbank

Nach dem "in die Datenbank Speichern" und laden, würde php folgendes Exploiden:
Was bedeutet dieser BB-Code:

Antwort:
[BACK]Er trennt Vorder und Rückseite von Karteikarten in der Datenbank

@Napofis:
Dass das nicht schön ist, ist mir leider klar, aber ist es nicht performanter? Ich habe eine Tabelle mit Inhaltselementen (die ich so auch leider brauche). Die hat eine Spalte 'Inhalt' und eine Spalte 'typ'. Wenn jetzt in der Spalte Typ steht, müsste ich jedes mal noch eine weitere Datenbankabfrage machen, wenn ich mir alle Daten aus der Tabelle hole. Ist es da nicht, wie gesagt performanter, wenn ich dann einfach ne encode-Funktion bei jeder Karteikarte aufrufen würde?

Danke schonmal vielmals
 
Ich würde gerne nochmal etwas dazu fragen:

1. Glaubt ihr, es ist performanter, per regexp den Code immer zu escapen und unescapen, und dann in zwei Teile zu teilen, oder an der Stelle einen Join zu machen?

2. Bei dem Join wäre es ja so, dass ich am Besten nicht, in PHP eine Abfrage mache, ob der Typ eine Karteikarte ist und mir dann aus einer anderen Tabelle vor und Rückseite holen, sondern lieber direkt im Mysql-Select-Befehl zu sagen, WHERE Typ = Kateikarte join, oder so. Sodass ich im assoziativen Array aus dem Result direkt folgendes ziehen kann
PHP:
if( $row['typ'] == 'karteikarte ){
   $ausgabe .= $row['vorne'] . $row['hinten']
}

Ist sowas möglich? Danke
 
Ich versteh gerade nicht so ganz was du vor hast, könntest du eventuell mal die Tabellenstruktur mit 1 oder 2 Beispiel Datensätzen Posten?

Bei so Kleinigkeiten geht es meistens mit einer Abfrage.
 
Danke, aber ich habe mittlerweile (vergessen hier zu posten und) der Tabelle eine Spalte hinzugefügt, die überflüssig ist, wenn ein Datensatz gespeichert wird, der nicht vom Typ Karteikarte ist. Ist zwar kein schönes Design, aber ich müsste sonst ne umständliche Abfrage machen, also eigentlich zwei, die ich dann verbinde. Da ich die Informationen von den Karteikarten bei jeder Abfrage aus dieser Tabelle brauche, ist das ein annehmbares Übel, dafür gibt es kein gefummel im PHP.

DANKE
 
Zurück