kostenloser Webspace werbefrei: lima-city


Automatisch MYSQL Tabellen erstellen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Ich brauche ein Script das mir bei der registration eines Users automatisch eine Tabelle erstellt wird. Der Name soll "vok_[username]" heissen. Ich hätte gern ein Script das mir hilft das ganze zu erstellen.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Warum benötigst du für jeden user eine eigene Tabelle?

    Eigentlich reicht eine Tabelle für alle User.

    Wenn man für die Daten des Users eine ID von User setzt.
  4. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Ja aber ich brauche für jeden user eine eigen, glaub mir
    Ich weiss das es scripte gibt aber ich hab mich schon dumm gegoogelt!

    Beitrag zuletzt geändert: 31.3.2012 15:53:42 von vokabelfreak
  5. Wenn du das Brauchst hast du doch phpMyAdmin lässt dir da den Create DB SQL Statement ausgeben und fügst das in dein PHP script ein.

    Natrürlich fügst du nach
    $username sollte nur 0-9 und a-z enthalten.

    $sql= " ... vol_{$username}......
  6. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    vokabelfreak schrieb:
    Ja aber ich brauche für jeden user eine eigen, glaub mir
    Dann erklär wofür du das bräuchtest. Erklär den Hintergrund von deinem Vorhaben.

    dexus85 hat recht...

    Wenn du wirklich an deiner Idee festhalten möchtest:
    $user = mysql_real_escape_string($username);
    $sql = "CREATE TABLE `vok_$user` (deine Tabellendefinition)";
    mysql_query($sql);
    Das funktioniert mit allen Zeichen als Benutzername... und ist gegen SQL-Injections geschützt, worauf dexus85 nicht geachtet hat :wink:
  7. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Ja ich verwende PHPmyadmin, aber ich frage mal ganz unwissend: Wo kann ihc mir dieses Script aussdrucken?

    Ich brauche das für den Zweck das die User Vokabeln am computer üben können. Der einfachhalt halber hätte ich gerne eine Tabelle für jeden User.

    Beitrag zuletzt geändert: 31.3.2012 16:05:26 von vokabelfreak
  8. hackyourlife schrieb:
    vokabelfreak schrieb:
    Ja aber ich brauche für jeden user eine eigen, glaub mir
    Dann erklär wofür du das bräuchtest. Erklär den Hintergrund von deinem Vorhaben.

    dexus85 hat recht...

    Wenn du wirklich an deiner Idee festhalten möchtest:
    $user = mysql_real_escape_string($username);
    $sql = "CREATE TABLE `vok_$user` (deine Tabellendefinition)";
    mysql_query($sql);
    Das funktioniert mit allen Zeichen als Benutzername... und ist gegen SQL-Injections geschützt, worauf dexus85 nicht geachtet hat :wink:


    Was die $user variable angeht, habe ich extra nur 0-9 und a-z genommen um SQL-injection zu verhindern, das Filtern der User Eingabe ist ja nicht meine Aufgabe ;)

    und statt nur
    $user
    einzugeben wäre es sinnvoller
    {$user}
    zu verwenden :wink:
  9. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Ja ähm ich hab je probleme mit der Tabellendifinition kann mir das jemand erklären?
  10. Mach ein Backup deiner MySQL-DB und kopiere die vorhandene vok_*user* und ändere diese ab.

    Schließlich musst du ja bereits eine Tabelle haben, die du dann für jeden user nutzen willst.
  11. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    dexus85 schrieb:
    Was die $user variable angeht, habe ich extra nur 0-9 und a-z genommen um SQL-injection zu verhindern, das Filtern der User Eingabe ist ja nicht meine Aufgabe ;)
    So ist es natürlich auch möglich, das würde aber voraussetzen, dass der TE die Filterung zusammenbringt.

    dexus85 schrieb:
    und statt nur
    $user
    einzugeben wäre es sinnvoller
    {$user}
    zu verwenden :wink:
    Das ist hier egal. Der Grund: danach kommt ein
    `
    -Zeichen, das sowieso einen längeren gültigen Variablennamen verhindert.
    Hier kannst du den genauen Unterschied nachlesen (falls du das nicht mehr ganz weißt) ;)

    vokabelfreak schrieb:
    Ja ähm ich hab je probleme mit der Tabellendifinition kann mir das jemand erklären?
    Erstell dir dazu in phpMyAdmin eine Tabelle für einen Benutzer. phpMyAdmin gibt dir dann den ausgeführten MySQL-Code aus. Den kopierst du dir und ersetzt den Tabellennamen durch das, was ich vorher gepostet habe.

    Alternativ kannst du auch eine existierende Tabelle exportieren (als SQL-Dump). Dort findest du auch die Tabellendefinitionen als SQL-Befehle... wie es eben dexus85 schon beschrieben hat.
  12. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Danke ich versuchs gleich mal :biggrin:
  13. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    vokabelfreak schrieb:
    Danke ich versuchs gleich mal :biggrin:
    Und was möchtest du mit der Tabelle pro Benutzer bewirken?
    Erklär uns bitte deine Hintergrundgedanken bzw. was du vor hast.
  14. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Das hab ich oben schon geschrieben. Und ich habs immernochnicht kapiert
  15. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    vokabelfreak schrieb:
    Das hab ich oben schon geschrieben. Und ich habs immernochnicht kapiert
    Sorry, das hab ich übersehen...

    Was hast du nicht kapiert?

    Erstell dir mit phpMyAdmin eine Tabelle für einen Benutzer. phpMyAdmin schreibt dann oben in einem Kästchen einen Code, wo irgendwas mit "CREATE TABLE ..." steht. Den kopierst du dir in die $sql-Variable von dem Code hier:
    hackyourlife schrieb:
    $user = mysql_real_escape_string($username);
    $sql = "CREATE TABLE `vok_$user` (deine Tabellendefinition)";
    mysql_query($sql);
    In der Variablen ersetzt du dann den Tabellennamen (der sieht irgendwie so aus:
    `vok_benutzername`
    ) mit dem Code
    `vok_$user`
    .

    Damit das ganze funktioniert musst du vor dem Codeblock eine Verbindung mit dem MySQL-Server geöffnet haben sowie deine Datenbank ausgewählt haben.

    Natürlich muss beim ausführen des Scripts in
    $username
    der Benutzername stehen, für den die Tabelle angelegt werden soll.
  16. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Ist es der Code???

    SELECT*
    FROM`vok_standart`
    PROCEDUREANALYSE ()

    was anderes hab ich leider nicht gefunden.

    Beitrag zuletzt geändert: 31.3.2012 17:07:03 von vokabelfreak
  17. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    vokabelfreak schrieb:
    Ist es der Code???

    SELECT*
    FROM`vok_standart`
    PROCEDUREANALYSE ()

    was anderes hab ich leider nicht gefunden.
    Nein, das ist er nicht. Der erscheint nur gleich nach dem erstellen der Tabelle.

    Den gesuchten Code bekommst du jetzt so:
    1) Wähl bei phpMyAdmin deine Tabelle aus
    2) geh auf "Exportieren"
    3) Wähl als Format "SQL" aus und klick auf "OK"

    Dann bekommst du eine Datei (xxxx.sql). Die öffnest du mit einem Editor (Notepad/Notepad++/...) und suchst dir die Zeilen mit
    CREATE TABLE `vok_standart` ...


    Die folgenden Zeilen sind der gesuchte Code.
  18. Hallo vokabelfreak,

    eigentlich benötigst Du nicht für jeden Benutzer eine extra Tabelle.
    Du kannst die Datenbank ja ungefähr so aufbauen:

    Tabelle 'users':
    id       SERIAL PRIMARY KEY
    username TEXT
    hash     BINARY(32)
    Tabelle 'languages'
    id       SERIAL PRIMARY KEY
    language TEXT
    Tabelle 'vocabulary'
    id           SERIAL PRIMARY KEY
    id_user      BIGINT REFERENCES users(id)
    id_language1 BIGINT REFERENCES language(id)
    id_language2 BIGINT REFERENCES language(id)
    expression1  TEXT
    expression2  TEXT
    Damit kannst Du beliebig viele Benutzer und Sprachen verwalten und hast auch die Möglichkeit z.B. 'griechisch' <-> 'französisch' oder ähnliches zu speichern.

    Edit:
    Es empfiehlt sich die Tabelle 'vocabulary' bzgl. der Felder 'id_user', 'id_language1' und 'id_language2' zu indizieren um auch bei großen Datenmengen noch eine gute Performance zu haben.

    Beitrag zuletzt geändert: 31.3.2012 22:21:22 von darkpandemic
  19. Eigentlich würde ich gar keine andere herangehensweise als die von darkpandemic verwenden!

    MySQL ist eine Relationale Datenbank, was eben heißt das sich ihre Vorteile durch das Referenzieren zwischen Tabellen funktioniert.
    Wenn du für jeden Nutzer eine eigene Tabelle dynamisch erstellst hast du keine möglichkeit herauszufinden wieviel Nutzer du hast, und du sprengst sehr schnell die Speichergrenzen und bist auch nicht performant.
    Das klingt jetzt im Moment ein bisschen seltsam, aber solltest du wirklich mal mehr wie nur 5 Nutzer erwarten wird das sehr schnell zum Problem.
    Solltest du tatsächlich einen triftigen Grund dafür haben, würde es mich sehr interessieren wenn du ihn hier mal ausführst oder per PN an mich schickst... Da ich täglich mit Datanbanken arbeite und ehrlich bis jetz noch auf keinen Grund dafür gehört oder gesehen habe freu ich mich auch mal was neues zu sehen (oder hald nicht ;-) ).

    Außerdem mal nebenbei: Du solltest auf deiner Seite (da sie nicht als nicht Fertig oder ähnliches gekennzeichnet ist) eine Registrierungsmöglichkeit bietet, sowie auch was von kaufbaren Inhalten erwähnt eventuell mal was zum Thema Datenschutz und Impressum anbringen. Auch wenn du kein Unternehmen bist haftest du für die Daten die bei dir eingegeben werden und musst Richtlinien befolgen.
  20. Autor dieses Themas

    vokabelfreak

    vokabelfreak hat kostenlosen Webspace.

    Ich bin zwar halbwegs fit mit php aber mit Datenbanken hab ich noch meine Probleme. Ichw erde das mal noch ausprobieren mit nur einer tabelle aber ich will halt regeln können wieviele 'vokabeln' jeder user anlegt.
  21. Hallo vokabelfreak,

    sofern Du obiges Schema (oder ein ähnliches) verwendest, kannst Du die Anzahl der Vokabeln (Ausdruckspaaren), die ein Benutzer angelegt hat mit folgender Abfrage herausfinden:
    SELECT COUNT(id) FROM vocabulary WHERE id_user = <hier user id eintragen>
    Mit dieser Information kannst Du ja dann das Neuanlegen von Einträgen erlauben oder verbieten.
    Wenn Du eine Übersicht über alle Benutzer haben willst, dann kannst Du diese folgendermaßen erstellen:
    SELECT users.id, users.username, COUNT(vocabulary.id)
    FROM users LEFT JOIN vocabulary
        ON users.id = vocabulary.id_user
    GROUP BY users.id, users.username
    ORDER BY users.username ASC
    Damit bekommst Du zu jedem Benutzer die Gesamtanzahl der angelegten Ausdruckspaare wobei das Ergebnis aufsteigend nach dem Benutzernamen sortiert ist.

    Edit: Für die Übersicht braucht man natürlich einen 'LEFT JOIN' und keinen 'INNER JOIN', damit auch die Benutzer ohne Ausdruckspaare angezeigt werden.

    Beitrag zuletzt geändert: 1.4.2012 18:24:56 von darkpandemic
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!