tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Napofis
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
381
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Noeden Noeden ist offline Mitglied Gold
    Registriert seit
    Dec 2010
    Beiträge
    150
    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
     

  2. #2
    Avatar von H4ckHunt3r
    H4ckHunt3r H4ckHunt3r ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Ort
    Ennepetal (NRW)
    Beiträge
    66
    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-Code:
    $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-Code:
    $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.
     
    Lg H4ckHunt3r
    Auf Danke klicken kostet nichts und weh tut es auch nicht ;)
    Meine Homepage | Mein Projekt | Mein Clan

  3. #3
    Avatar von Napofis
    Napofis Napofis ist offline require 'brain.php';
    Registriert seit
    Jun 2007
    Ort
    Bayern
    Beiträge
    587
    Das mit den JSON ist schon ein guter Ansatz, escapen kannst du es mit mysql_real_escape_string(). Allerdings verstößt es gegen die allgemeine Normalform einer Datenbank: speichere keine Wertelisten.
     

  4. #4
    Noeden Noeden ist offline Mitglied Gold
    Registriert seit
    Dec 2010
    Beiträge
    150
    @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
     

  5. #5
    Noeden Noeden ist offline Mitglied Gold
    Registriert seit
    Dec 2010
    Beiträge
    150
    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-Code:
    if( $row['typ'] == 'karteikarte ){
       $ausgabe .= $row['
    vorne'] . $row['hinten']

    Ist sowas möglich? Danke
     

  6. #6
    Avatar von Napofis
    Napofis Napofis ist offline require 'brain.php';
    Registriert seit
    Jun 2007
    Ort
    Bayern
    Beiträge
    587
    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.
    Noeden bedankt sich. 

  7. #7
    Noeden Noeden ist offline Mitglied Gold
    Registriert seit
    Dec 2010
    Beiträge
    150
    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
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 12.09.09, 20:03
  2. Schräge Datenstruktur abbilden
    Von jccTeq im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 16.05.07, 14:47
  3. Datenbankfeld abfragen
    Von Henselmania im Forum PHP
    Antworten: 10
    Letzter Beitrag: 11.01.07, 21:56
  4. Datenbankfeld überprüfen
    Von DrMueller im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 04.12.06, 12:08
  5. Antworten: 1
    Letzter Beitrag: 25.07.02, 15:11