Automatisch Tabelle mit dem namen einer Spalte einer anderen Tabelle erstellen

Chris-P

Grünschnabel
Hallo zusammen :)

Ich bin Anfänger in Sachen php und mysql und steh da vor einem kleinen Problem das ich einfach ned hinbekomm :mad:

Und zwar möchte ich mit folgendem Script nach absenden eines Registrierungsformulars eine Tabelle erstellen.

PHP:
$sql = 'CREATE TABLE Tabelle2 ( `id` mediumint( 8 ) NOT NULL AUTO_INCREMENT ,'
        ' `Spalte1` varchar(30 ) NOT NULL default \'\','
        ' `Spalte2` varchar( 30) NOT NULL default \'\','
        ' `Spalte3` varchar( 40 ) NOT NULL default \'\','
        ' PRIMARY KEY ( `id` ) ) TYPE = MYISAM AUTO_INCREMENT =2';

$result=mysql_query($sql);

$sql='INSERT INTO Tabelle2 VALUES("Text1", "Text2", "Text3")';
$result=mysql_query($sql);

Nun kommt mein eigentliches Problem. Der Name der zu erstellenden Tabelle2 soll aus dem Wert Spalte uid einer weiteren Tabelle1 ermittelt werden.

Wie mache ich das? Wär nett wenn mir jemand mein Script umschreiben könnte so wie das dann letztendlich funktioniert.

Ich sag schonmal im Voraus Danke :)
 
PHP:
$sql = 'SELECT name FROM Tabelle1 WHERE uid='.$uid.''; // In die Variable $uid musst du vorher nur schreiben welche uid du haben willst

$result=mysql_query($sql);

$sql1 = 'CREATE TABLE '.$result['name'].' ( `id` mediumint( 8 ) NOT NULL AUTO_INCREMENT ,'
        ' `Spalte1` varchar(30 ) NOT NULL default \'\','
        ' `Spalte2` varchar( 30) NOT NULL default \'\','
        ' `Spalte3` varchar( 40 ) NOT NULL default \'\','
        ' PRIMARY KEY ( `id` ) ) TYPE = MYISAM AUTO_INCREMENT =2';

$result1=mysql_query($sql1);

$sql2='INSERT INTO Tabelle2 VALUES("Text1", "Text2", "Text3")';
$result2=mysql_query($sql2);

Ich hab den Code nicht getestet, sollte aber so funktionieren.
 
danke schonmal für deine antwort...

jetz hatte ich einen kleinen denkfehler.. sorry...

der Name der zu erstellenden Tabelle soll sich aus Tabelle und der Session-ID des eingeloggten Users zusammensetzen. Und nicht wie geschrieben aus einer uid einer anderen Tabelle.

Also wenn die Session-ID 01 ist sollte die neue Tabelle Tabelle01 heissen..

Da ich die Session-ID erst nach einem Login bekomme, muss ich das Script zum Erstellen dieser Tabelle an anderer Stelle ausführen.. Aber das macht ja nix...

Kannst du mir da auch weiterhelfen
 
Willst du wirklich jedes Mal bei einer anderen session_id eine neue Tabelle erstellen? Das wird mit der Zeit ziemlich unübersichtlich.

So sollte es funktionieren:
PHP:
$sid = $_GET['sid']; //Wenn du die Session_id an die Url angehängt hast

// Wenn noch keine sid vorhanden ist kannst du folgendes machen

if ($sid == '')
{
  $sid = get_sid();
}

$sql = 'CREATE TABLE Tabelle'.$sid.' ( `id` mediumint( 8 ) NOT NULL AUTO_INCREMENT ,'
        ' `Spalte1` varchar(30 ) NOT NULL default \'\','
        ' `Spalte2` varchar( 30) NOT NULL default \'\','
        ' `Spalte3` varchar( 40 ) NOT NULL default \'\','
        ' PRIMARY KEY ( `id` ) ) TYPE = MYISAM AUTO_INCREMENT =2';

$result=mysql_query($sql1);

$sql1='INSERT INTO Tabelle2 VALUES("Text1", "Text2", "Text3")';
$result1=mysql_query($sql1);
 
es geht um folgendes...

ich plane ein votingsystem bei dem für jeden user eine votingseite erstellt wird. Und dafür möchte ich die Votingtabellen für den einzelnen user automatisch erstellen...

Ich weiß sonst keine möglichkeit wie ich das sonst lösen könnte.

hättest du eine idee?
 
Soll es für jeden User gleich aussehen?

Du brauchst nur eine einzige Datenbank für alle User.
PHP:
$sql = 'CREATE TABLE Vote_User ( `id` mediumint( 8 ) NOT NULL AUTO_INCREMENT ,'
        ' `uid` int(3 ) NOT NULL default \'\','
        ' `Spalte1` varchar(30 ) NOT NULL default \'\','
        ' `Spalte2` varchar( 30) NOT NULL default \'\','
        ' `Spalte3` varchar( 40 ) NOT NULL default \'\','
        ' PRIMARY KEY ( `id` ) ) TYPE = MYISAM AUTO_INCREMENT =2';

$result=mysql_query($sql1);

In das Feld uid musst du nur immer die Userid eintragen.
 
jeder user bekommt eine seite auf dem er sich vorstellen kann und dann soll jeder andere user über schaltflächen einfach nur ja oder nein voten können...

und jeder user darf nur einmal voten...
 
Dann brauchtst du 2 Tabellen: Eine in der jeder User eingetragen ist und wo die Anzahl der Ja's und Nein's steht und eine wo steht welcher User bereits abgestimmt hat.
Tabelle 1 wo jeder User drin steht und die Anzahl der Votes für Ja und der Votes für Nein stehen:
PHP:
$sql = 'CREATE TABLE Vote_User ( `id` mediumint(8) NOT NULL AUTO_INCREMENT ,'
        ' `uid` int(3) NOT NULL default \'\','
        ' `Ja` int(5) NULL default \'\','
        ' `Nein` int(5) NULL default \'\','
        ' PRIMARY KEY ( `id` ) ) TYPE = MYISAM AUTO_INCREMENT =2';

In id steht die Id des Eintrags, in uid die Id des Users, in dem Feld Ja steht die Anzahl der Votes für Ja und in Feld Nein steht die Anzahl der Votes für Nein. Du musst da dann einfach bei einem entsprechendem Vote 1 addieren.

Die zweiter Tabelle in der die User für einen anderen User voten:
PHP:
$sql = 'CREATE TABLE User_Vote ( `id` mediumint(8) NOT NULL AUTO_INCREMENT ,'
        ' `uid` int(3) NOT NULL default \'\','
        ' `fuid` int(3) NOT NULL default \'\','
        ' `vote` varchar(4) NULL default \'\','
        ' PRIMARY KEY ( `id` ) ) TYPE = MYISAM AUTO_INCREMENT =2';

id ist die Id des Eintrags, uid die Id des Users der gevotet hat, fuid ist die Id von dem User für den gevotet wird und in vote steht drin wie der Spieler gevotet hat, also entweder Ja oder Nein.

Hoffe das hilft dir.
 
hey danke :) hört sich sehr gut an

jetz noch eine frage...

wie lautet dann der code für die Abfrage ob ein user schon gevotet hat oder ned

könntest mir den auch sagen
 
PHP:
$user = $_GET['user']; 

$sql = mysql_query("SELECT fuid FROM User_Vote WHERE uid = ".$uid.""); //uid ist die Userid des Users der Voten will 

if ($sql != $user) {
    noch nicht gevotet
} else {
    schon gevotet
}

In der If Anweisung musst du nur noch das entsprechende einbinden. Also entweder das Formular zum Voten oder einen Text der sagt das bereits für den User gevotet wurde.
 
Zurück