Automatisch MYSQL Tabellen erstellen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
benutzer
benutzername
brauche
code
datenbank
eigene tabelle
erstellen
grund
idee
jemand
nutzer
problem
string
tabelle
text
url
versuch
verwenden
vokabel
zeichen
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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. -
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 -
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}......
-
vokabelfreak schrieb:
Dann erklär wofür du das bräuchtest. Erklär den Hintergrund von deinem Vorhaben.
Ja aber ich brauche für jeden user eine eigen, glaub mir
dexus85 hat recht...
Wenn du wirklich an deiner Idee festhalten möchtest:
Das funktioniert mit allen Zeichen als Benutzername... und ist gegen SQL-Injections geschützt, worauf dexus85 nicht geachtet hat$user = mysql_real_escape_string($username); $sql = "CREATE TABLE `vok_$user` (deine Tabellendefinition)"; mysql_query($sql);
-
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 -
hackyourlife schrieb:
vokabelfreak schrieb:
Dann erklär wofür du das bräuchtest. Erklär den Hintergrund von deinem Vorhaben.
Ja aber ich brauche für jeden user eine eigen, glaub mir
dexus85 hat recht...
Wenn du wirklich an deiner Idee festhalten möchtest:
Das funktioniert mit allen Zeichen als Benutzername... und ist gegen SQL-Injections geschützt, worauf dexus85 nicht geachtet hat$user = mysql_real_escape_string($username); $sql = "CREATE TABLE `vok_$user` (deine Tabellendefinition)"; mysql_query($sql);
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
einzugeben wäre es sinnvoller$user
zu verwenden{$user}
-
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. -
dexus85 schrieb:
So ist es natürlich auch möglich, das würde aber voraussetzen, dass der TE die Filterung zusammenbringt.
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 ;)
dexus85 schrieb:
Das ist hier egal. Der Grund: danach kommt ein
und statt nur
einzugeben wäre es sinnvoller$user
zu verwenden{$user}
-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:
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.
Ja ähm ich hab je probleme mit der Tabellendifinition kann mir das jemand erklären?
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. -
Danke ich versuchs gleich mal
-
vokabelfreak schrieb:
Und was möchtest du mit der Tabelle pro Benutzer bewirken?
Danke ich versuchs gleich mal
Erklär uns bitte deine Hintergrundgedanken bzw. was du vor hast. -
Das hab ich oben schon geschrieben. Und ich habs immernochnicht kapiert
-
vokabelfreak schrieb:
Sorry, das hab ich übersehen...
Das hab ich oben schon geschrieben. Und ich habs immernochnicht kapiert
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:
In der Variablen ersetzt du dann den Tabellennamen (der sieht irgendwie so aus:
$user = mysql_real_escape_string($username); $sql = "CREATE TABLE `vok_$user` (deine Tabellendefinition)"; mysql_query($sql);
) mit dem Code`vok_benutzername`
.`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
der Benutzername stehen, für den die Tabelle angelegt werden soll.$username
-
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 -
vokabelfreak schrieb:
Nein, das ist er nicht. Der erscheint nur gleich nach dem erstellen der Tabelle.
Ist es der Code???
SELECT*
FROM`vok_standart`
PROCEDUREANALYSE ()
was anderes hab ich leider nicht gefunden.
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 mitCREATE TABLE `vok_standart` ...
Die folgenden Zeilen sind der gesuchte Code. -
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':
Tabelle 'languages'id SERIAL PRIMARY KEY username TEXT hash BINARY(32)
Tabelle 'vocabulary'id SERIAL PRIMARY KEY language 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.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
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 -
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. -
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.
-
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:
Mit dieser Information kannst Du ja dann das Neuanlegen von Einträgen erlauben oder verbieten.SELECT COUNT(id) FROM vocabulary WHERE id_user = <hier user id eintragen>
Wenn Du eine Übersicht über alle Benutzer haben willst, dann kannst Du diese folgendermaßen erstellen:
Damit bekommst Du zu jedem Benutzer die Gesamtanzahl der angelegten Ausdruckspaare wobei das Ergebnis aufsteigend nach dem Benutzernamen sortiert ist.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
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage