• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

MySQL-Datenbank für neuen Benutzer erstellen

Korg

Granny Smith
Registriert
05.01.12
Beiträge
17
Hallo zusammen!

Ich habe ein PHP/MySQL - Script geschrieben für einen Benutzer. Jetzt möchte ich, dass wenn sich andere Leute registrieren, eine Datenbank erstellt wird mit den nötigen Tables und Columns. Wie muss ich das umsetzen? Falls nötig schicke ich auch gerne das Script (hier auf dem Forum oder Dropbox)

P.S: Ich hoffe diese Beschreibung war präzise genug

Korg
 
Nein es ist nicht präzise genug...
Wozu eine Neue Datenbank oder eine neue Tabaelle? Ich habe auch keinen Plan was Du in der Tablle Speichern möchtest. Aber am Einfachsten und Sinvollsten ist es sich vorher Gedanken über die zu Speichenden Informationen zu mach und dann die Tabellen anzulegen.
Pfanne folgt noch die Normalisierung http://de.wikipedia.org/wiki/Normalisierung_(Datenbank) und gut ist...
Danach brauchst Du meist nur noch INSERT, SELECT, UPDATE und DELETE.
 
Jeder Benutzer eine neue Datenbank? Oder jeder Benutzer einen neuen Wert in der Datenbank z.B. "Benutzer" ?
 
Tja, das muss ich dann noch mal üben mit dem guten Problemerklären in Foren....
Also, ich habe ein Script ausgelegt für eine Datenbank (mit 3 Tabellen). Dieses Script funktioniert nur für eine Person. Jetzt möchte ich, dass andere Leute sich registrieren und dabei eine "private" Datenbank erstellen (natürlich sollen sie nichts davon merken).
Ich hab schon angefangen, aber er gibt mir einen Fehler...

Code:
<?php
if(isset($_SESSION['count']))
    $_SESSION['count'] = $_SESSION['count']+ 1;
else
    $_SESSION['count'] = 1;

$num = $_SESSION['count']; 
$data = database + $num;

/*counter*/
$con = mysql_connect("localhost","root","");
$erstellen = "CREATE DATABASE" .$data;
$ergebnis = mysql_query($erstellen, $con);
if (!$ergebnis) {
  echo mysql_error();
}else{
  echo "Datenbank erstellt";
}  
?>
 
Tja, das muss ich dann noch mal üben mit dem guten Problemerklären in Foren....
Also, ich habe ein Script ausgelegt für eine Datenbank (mit 3 Tabellen). Dieses Script funktioniert nur für eine Person. Jetzt möchte ich, dass andere Leute sich registrieren und dabei eine "private" Datenbank erstellen (natürlich sollen sie nichts davon merken).
Ich hab schon angefangen, aber er gibt mir einen Fehler...

Code:
<?php
if(isset($_SESSION['count']))
    $_SESSION['count'] = $_SESSION['count']+ 1;
else
    $_SESSION['count'] = 1;

$num = $_SESSION['count']; 
$data = [U]database[/U] + $num;

/*counter*/
$con = mysql_connect("localhost","root","");
$erstellen = "CREATE DATABASE" .$data;
$ergebnis = mysql_query($erstellen, $con);
if (!$ergebnis) {
  echo mysql_error();
}else{
  echo "Datenbank erstellt";
}  
?>

Was soll das database sein?
 
Ich hab schon angefangen, aber er gibt mir einen Fehler...
<seufz>

Meine Glaskugel ist gerade in Reparatur, und meine psychischen Fähigkeiten sind nicht so toll - was für einen Fehler?

In erster Iteration würde ich mal ein Leerzeichen zwischen "CREATE DATABASE" und $data einfügen.
 
Also...
der Fehler ist
Code:
You have an error in your SQL syntax; check the manual that corresponds  to your MySQL server version for the right syntax to use near  'DATABASE2' at line 1
Line 1 ist
Code:
<?php
session_start();  ?>
Das Database ist nur der Name. Ich möchte, dass es Datenbanken kreiert, die "database1, database 2, database 3, usw" heissen.

Korg
 
Ja, das mit dem Leerzeichen hab ich probiert...scheint nicht zu funktionieren...könntest Du mir mal sagen wie man gewöhlich eine Datenbank erstellen mit einem Namen, den ich in einer Variablen in PHP gespeichert habe..
etwa
Code:
"CREATE DATABASE $name"
oder
Code:
"CREATE DATABASE" .$name
da bin ich unsicher...
 
Okay, mein Fehler (so oft erstelle ich keine Datenbanken in PHP)

Wie die PHP-Dokumentation ausführt, erstellt man eine Datenbank nicht mit mysql_query(), sondern mit mysql_create_db() .

P.S.: Die beiden Code-Fragmente in Deinem letzten Post bewirken dasselbe (bis auf das fehlende Leerzeichen im zweiten Fragment).
 
In der PHP-Dokumentation stand aber auch, dass mysql_create_db() veraltet ist und man lieber mysql_query nehmen sollte. Das Problem ist liegt meiner Meinung im Maskieren (ist das der richtige Ausdruck?). Sprich...
Wie verkaufe ich MySQL, dass dieses $name eine Variable von PHP ist und kein Name. Muss man dafür nicht so
Code:
/ ' "
dafür benutzen?
 
Mit
$data = "database".$num;
und
$erstellen = "CREATE DATABASE " .$data;

sollte es funktionieren. MySQL musst Du nichts über die PHP-Variablen beibringen. PHP sendet einen String an die Datenbank. Den baust Du ja vorher auf.
Wenn nicht kannst Du Dir die Variable erstellen doch einfach ausgeben lassen und in phpMyAdmin oder ähnlich testen. Aber nochmal. Eine neue Datenbank ist bestimmt nicht der richtige Weg Dein Problem zu realisieren.
 
Vielen Dank Torben!!
Funktioniert endlich!
 
Ich bin jetzt noch ein weiter kleines Problem gestosssen. Wie muss ich den folgenden Code korrigieren?
Code:
mysql_select_db(".$data", $con);
$table = "CREATE TABLE Persons
(
FirstName varchar(15),
LastName varchar(15),
Age int
)";
Das .$data ist wahrscheinlich falsch.
 
Naja in der Doku steht auch das die MySQL Funktionen veraltet sind. Schau die mal die mysqli Sachen an.

Aber trotz allem versteh ich nicht wieso du für jeden User eine eigene dB anlegst. Sorry, aber mir fällt nicht ein plausibler Grund außer ner gekapselten datenhaltung für sicherheitsrelevante Daten ein, was ich mal aufgrund der geringen Tabellenanzahl und der nicht vorhandenen rechtezuweisung und sqluserverwaltung auf die einzelnen Datenbanken ausschließe, besonders wenn du betonst das der User davon garnichts mitbekommt. Wenn es nicht "Top Secret" ist würde ich mich freuen wenn du den Beweggrund für diese vorgehensweise mal erklären würdest.
 
Ich sehe das ähnlich wie micha… Vielleicht solltest Du nochmals darüber nachdenken was das Prinzip hinter so einer Datenbank ist.
Wenn Du verschiedene Benutzer hast, sollte man i.d.R. nicht für jeden Benutzer eine eigene Datenbank anlegen, sondern eher in einer Datenbank eine Tabelle "Benutzer" anlegen, in der die einzelnen Benutzer gespeichert werden. Auf diese Weise kannst Du jedem Nutzer eine universelle ID zuweisen. Diese ID kannst Du dann in den anderen Tabellen als zusätzlichen Wert angeben und bei dem Auslesen der Daten die jeweilige Benutzer-ID zusätzlich abfragen, damit auch nur die Daten zurückgegeben werden die für diesen Nutzer relevant sind.

Simples Beispiel:

Du möchtest einfach ein System erstellen, bei dem die Benutzer Notizen online speichern können, aber auch Presets (Vorgeschriebene Texte, die man nach Belieben wieder einfügen kann) erstellen können.

Die Datenbank könnte dann zum Beispiel so aussehen:
Code:
TABLE Benutzer (
  benutzer_id  int(11),
  vorname      varchar(30),
  nachname     varchar(30),
  passwort     varchar(30)
)


TABLE Notizen (
  notiz_id     int(11),
  notiz        text( ),
  benutzer     int(11)
)


TABLE Presets (
  preset_id    int(11),
  presettext   text( ),
  benutzer     int(11),
)

Jetzt brauchst Du nur eine Datenbank, kannst aber theoretisch für unendlich Benutzer Notizen und Presets abspeichern.
Man fragt einfach ab, zu welcher Benutzer-ID die jeweiligen Notizen/Presets gehören und kann so alles korrekt zuordnen.

(Das Obere ist nur ein Beispiel zur Veranschaulichung. Natürlich hätte man auch hier schon mit Fremdschlüsseln etc arbeiten können, aber das wäre hier glaub ich zu viel des Guten…)
 
Ich habe einen grossen Denkfehler gemacht!!!! Vielen Dank für die Erklärung. Ich habe noch eine Frage. Wie frage ich jetzt die ID vom Benutzer zum jeweiligen Eintrag ab in Code?
 
Mit Bezug auf mein Beispiel:

Wenn Du jetzt zum Beispiel alle Notizen eines Benutzers in einer Liste ausgeben möchtest, dann musst Du natürlich bei der SQL-Abfrage darauf achten dass auch nur die Notizen für den einen Benutzer und nicht etwa für mehrere Benutzer ausgegeben werden.
Sagen wir mal der Benutzer mit der ID 67 (diese muss bereits beim Eintragen des Benutzers angelegt werden; also bei der Registrierung ;)) möchte sich seine Notizen anzeigen lassen. Die SQL Abfrage könnte dann zum Beispiel so aussehen:
Code:
[COLOR=#000000]$sql = "SELECT * FROM 'Notizen' WHERE 'benutzer' = 67";
[/COLOR]$result = mysql_query($sql);
Im Result hätten wir hier also alle Notizen und die dazugehörigen IDs zu dem Benutzer mit der ID 67.

Wichtig ist hier also die WHERE-Klausel, mit der Du Dein MySQL-Result schon bei der Abfrage eingrenzen kannst.

(Auch hier gilt: Das Beschriebene ist nur zur Veranschaulichung gedacht und die beschriebene Lösung könnte noch deutlich komplexer gestaltet werden, um eine bessere Performance zu erzielen oder einen sichereren, "schöneren Code" zu bekommen)
 
Hi,

Der Root user unter MySQL sollte nicht für sowas genutzt werden. Ein weniger priviligierter Nutzer wäre sicherer.