• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> 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
 

torben1

Celler Dickstiel
Registriert
05.08.08
Beiträge
796
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.
 

_lio_

Süsser Pfaffenapfel
Registriert
15.02.09
Beiträge
661
Jeder Benutzer eine neue Datenbank? Oder jeder Benutzer einen neuen Wert in der Datenbank z.B. "Benutzer" ?
 

Korg

Granny Smith
Registriert
05.01.12
Beiträge
17
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";
}  
?>
 

_lio_

Süsser Pfaffenapfel
Registriert
15.02.09
Beiträge
661
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?
 

martinv2

Doppelter Prinzenapfel
Registriert
14.04.12
Beiträge
437
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.
 

Korg

Granny Smith
Registriert
05.01.12
Beiträge
17
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
 

Korg

Granny Smith
Registriert
05.01.12
Beiträge
17
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...
 

martinv2

Doppelter Prinzenapfel
Registriert
14.04.12
Beiträge
437
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).
 

Korg

Granny Smith
Registriert
05.01.12
Beiträge
17
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?
 

torben1

Celler Dickstiel
Registriert
05.08.08
Beiträge
796
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.
 

Korg

Granny Smith
Registriert
05.01.12
Beiträge
17
Vielen Dank Torben!!
Funktioniert endlich!
 

Korg

Granny Smith
Registriert
05.01.12
Beiträge
17
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.
 

das_micha

Leipziger Reinette
Registriert
11.03.07
Beiträge
1.795
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.
 

timmy38233

Rhode Island Greening
Registriert
20.07.08
Beiträge
474
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…)
 

Korg

Granny Smith
Registriert
05.01.12
Beiträge
17
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?
 

timmy38233

Rhode Island Greening
Registriert
20.07.08
Beiträge
474
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)
 

U_nix$_@

Tokyo Rose
Registriert
25.10.12
Beiträge
66
Hi,

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