CREATE TABLE {$_POST['user']} hur ?

Permalänk
Medlem

CREATE TABLE {$_POST['user']} hur ?

hejsan!

har fått ett jobb där jag ska göra ett tidrapporterings program, där en admin ska kunna lägga till nya användare och då ska en ny tabell skapas för den användaren, namnet på användaren ska då vara samma som tabellen har fått till så att scriptet skapar en tabell men kan inte lägga in "{$_POST['user']}"

så här ser koden ut:

$skapa_tabell=' CREATE TABLE kunder ( kundnr INTEGER AUTO_INCREMENT, fnamn VARCHAR(30), enamn VARCHAR(50), ort VARCHAR(50), PRIMARY KEY(kundnr) )';

Permalänk
Medlem

Detta borde funka, var dock ett tag sen jag pillade med PHP.

$skapa_tabell=' CREATE TABLE ' . $_POST['user'] . ' ( kundnr INTEGER AUTO_INCREMENT, fnamn VARCHAR(30), enamn VARCHAR(50), ort VARCHAR(50), PRIMARY KEY(kundnr) )'; mysql_query($skapa_tabell);

Permalänk
Medlem

En tabell för varje användare ska du INTE ha. Datan du vill spara är bäst att ha i endast EN tabell, som kan heta just kunder.

Permalänk
Medlem

Bättre att skapa ett bord med kunder och sen fylla det bordet med alla kunder. Ser inga fördelar med att ha ett bord per kund.

$skapa_tabell=mysql_query(' CREATE TABLE 'kunder' ( kundnr INTEGER AUTO_INCREMENT, user VARCHAR(30), fnamn VARCHAR(30), enamn VARCHAR(50), ort VARCHAR(50), PRIMARY KEY(kundnr) )');

Sen fyller du det bordet med informationen:

$insert = mysql_query('INSERT INTO kunder (user, fnamn, enamn, ort) VALUES ($_POST['user'], $_POST['fnamn'], $_POST['enamn'], $_POST['ort']');

Permalänk
Medlem

oj jävlar sorry såg nu att jag länkat fel create table!

den här är det egentligen som ska länkas

$skapa_tabell=' CREATE TABLE ' . {$_POST['user']} . ' ( Vart VARCHAR (30), Börjar VARCHAR(30), Datum VARCHAR(50), Kommentar VARCHAR(50), PRIMARY KEY(Vart) )';

Permalänk
Medlem
Skrivet av jonke:

Detta borde funka, var dock ett tag sen jag pillade med PHP.

$skapa_tabell=' CREATE TABLE ' . $_POST['user'] . ' ( kundnr INTEGER AUTO_INCREMENT, fnamn VARCHAR(30), enamn VARCHAR(50), ort VARCHAR(50), PRIMARY KEY(kundnr) )'; mysql_query($skapa_tabell);

tack så mkt det funkade!

Permalänk
Medlem
Skrivet av koffepro:

tack så mkt det funkade!

Om du designar det på detta viset pga vad bossen sagt att han vill ha, då bör du ta dig ett snack med honom. Ni båda kommer bli gladare av det i längden. Som andra påpekat vill du egentligen inte ha en tabell för varje användare, det är rent av horribel design.

Visa signatur

"Some poor, phoneless fool is probably sitting next to a waterfall somewhere, totally unaware of how angry and scared he's supposed to be." - Duncan Trussell

Permalänk
Medlem
Skrivet av gibbon_:

Om du designar det på detta viset pga vad bossen sagt att han vill ha, då bör du ta dig ett snack med honom. Ni båda kommer bli gladare av det i längden. Som andra påpekat vill du egentligen inte ha en tabell för varje användare, det är rent av horribel design.

nu är det ju så att jag vill ha en tabell för varje användare, då dom sedan ska mata in data i den tabellen och sedan kunna kolla på sin tabell och ingen annan.

om du kommer på ngt bättre sätt att lägga upp det här på be my guest and tell me...

Permalänk
Medlem
Skrivet av koffepro:

nu är det ju så att jag vill ha en tabell för varje användare, då dom sedan ska mata in data i den tabellen och sedan kunna kolla på sin tabell och ingen annan.

om du kommer på ngt bättre sätt att lägga upp det här på be my guest and tell me...

Tycker nog du borde läsa på lite om vyer, funktioner och script samt de 3 normalformerna för databaser så får du se bättre sätt.

Permalänk
Medlem
Skrivet av koffepro:

nu är det ju så att jag vill ha en tabell för varje användare, då dom sedan ska mata in data i den tabellen och sedan kunna kolla på sin tabell och ingen annan.

om du kommer på ngt bättre sätt att lägga upp det här på be my guest and tell me...

Jag har inte tillräckligt att gå på för att komma upp med en bättre lösning, men den här informationen som användaren ska mata in i sin egen tabell verkar vara namn och ort.. Vad skulle en andra rad i den här tabellen betyda? Att han får två kundnummer till att börja med. Du behöver inte databasens förmåga att skydda data från användare för att peta in den här informationen på rätt plats heller. Och om det är något du verkligen behöver gömma för användare så är det bättre att skapa en view för dem än en egen tabell.

Visa signatur

"Some poor, phoneless fool is probably sitting next to a waterfall somewhere, totally unaware of how angry and scared he's supposed to be." - Duncan Trussell

Permalänk
Medlem
Skrivet av gibbon_:

Jag har inte tillräckligt att gå på för att komma upp med en bättre lösning, men den här informationen som användaren ska mata in i sin egen tabell verkar vara namn och ort.. Vad skulle en andra rad i den här tabellen betyda? Att han får två kundnummer till att börja med. Du behöver inte databasens förmåga att skydda data från användare för att peta in den här informationen på rätt plats heller. Och om det är något du verkligen behöver gömma för användare så är det bättre att skapa en view för dem än en egen tabell.

som jag sa när jag startade tråden så är det ett tidsrapporterings program jag ska göra och man ska mata in 5 variabler Vart, Börjar, slutar, datum, och en kommentar, så för att jag ska slippa krångla allt för mkt så gör jag så att varje gång en ny anställd registreras så görs en ny tebell med den anställdes namn, och som sagt om du vet ngt bättre sätt (som du inte verkar göra men men...) så får du gärna säga till mig hur annars så vill jag inte riktigt ha din åsikt på det här.

Permalänk
Testpilot

Vanligtvis löser man det genom att ha en tabell med alla användare och en annan tabell med alla tider. Du lägger sen till ett fält i tid-tabellen som du kan kalla för userid som är id-numret på användaren i den andra tabellen. Vill du hämta en speciell användares tider är det då bara att använda WHERE och ange den användarens id.

Exempel:

id username details 1 Nisse Chef 2 Kalle Anställd id userid time 1 1 10:00 2 1 09:34 3 2 09:25 4 1 09:45 5 2 10:41

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem
Skrivet av koffepro:

nu är det ju så att jag vill ha en tabell för varje användare, då dom sedan ska mata in data i den tabellen och sedan kunna kolla på sin tabell och ingen annan.

om du kommer på ngt bättre sätt att lägga upp det här på be my guest and tell me...

Hela konceptet går åt skogen om du gör på det sättet du vill.
Varför har du auto_increment på "kundnr" om det ändå bara finns en rad? Alla tabeller kommer få id = 0 (eller 1 beroende på vad din databas börjar med för id) vilket i sin tur betyder att alla kunder kommer ha samma id. Även om du sätter kundnr manuellt till rätt värde så kommer du få det otroligt svårt att hålla koll på hur många kunder som finns. Ex, hur räknar du hur många kunder som är registrerade?

Om detta är ett riktigt projekt och inte bara ett hemmabygge så borde du skriva ner exakt vad du vill göra och hur det ska fungera innan du ens börjar med projektet. Du behöver inte ha koden färdig men konceptet ska vara hållbart.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av koffepro:

som jag sa när jag startade tråden så är det ett tidsrapporterings program jag ska göra och man ska mata in 5 variabler Vart, Börjar, slutar, datum, och en kommentar, så för att jag ska slippa krångla allt för mkt så gör jag så att varje gång en ny anställd registreras så görs en ny tebell med den anställdes namn, och som sagt om du vet ngt bättre sätt (som du inte verkar göra men men...) så får du gärna säga till mig hur annars så vill jag inte riktigt ha din åsikt på det här.

Well du får min åsikt vare sig du vill ha den eller ej, sen är det upp till dig att läsa eller inte.
"för att jag ska slippa krångla allt för mkt", men det är precis det du gör nu.
Förslagsvis kan du ha en tabell "pass" med de där attributen samt ett till attribut för användar-id. Sen har du en annan tabell, "anställda" kanske, där du har dessa användar-idn som key.
Vill du att en anställd ska kunna se sina pass och inga andra kan du då antingen skapa av view för denna (om användarna har direkt access till databasen tex) eller helt enkelt endast plocka ut användarens pass ur tabellen när du visar dessa.

Se hundens tabell.

Visa signatur

"Some poor, phoneless fool is probably sitting next to a waterfall somewhere, totally unaware of how angry and scared he's supposed to be." - Duncan Trussell

Permalänk
Medlem

Herregud... trådskaparen måste verkligen lära sig hur en databas funkar.

Permalänk
Medlem

ni får tycka vad ni vill men jag har gjort så som jag tycker känns bäst för det här projektet, och jag har fått hjälp med det jag vill ha hjälp med. sen tror jag folk inte förståt riktigt hur jag vill att den ska funka kan bero på att jag inte har förklarat allt, jag förklarade så mkt så att ni skulle förstå vad jag behöver hjälp med... sen funkar dom saker ni har sagt också men alla löser saker olika.

tack så mkt för hjälpen

Permalänk
Medlem
Skrivet av koffepro:

nu är det ju så att jag vill ha en tabell för varje användare, då dom sedan ska mata in data i den tabellen och sedan kunna kolla på sin tabell och ingen annan.

om du kommer på ngt bättre sätt att lägga upp det här på be my guest and tell me...

Det går såklart att göra i en tabell där du har flera användare. Bara att skriva in en WHERE clause efter du ska selecta (hämta) eller updata (sätt in)
Till exempel:

$hamta = mysql_query("SELECT * FROM kunder WHERE kundnamn='$_SESSION['kund']");

Då hämtar du bara raden där bara användaren har sin information.

Permalänk
Medlem

Herregud, använd en tabell för alla istället och lägg till en kolumn user_id...

Permalänk
Medlem
Skrivet av koffepro:

nu är det ju så att jag vill ha en tabell för varje användare, då dom sedan ska mata in data i den tabellen och sedan kunna kolla på sin tabell och ingen annan.

om du kommer på ngt bättre sätt att lägga upp det här på be my guest and tell me...

Hur tänker du räkna ut hur många användare ni har och hur tänker du kolla om ett användarnamn är upptaget?

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

man kan väl sammanfatta det hela med följande;
om du inte har ett otroligt bra argument för att ha separata tabeller för alla användare, så ska du inte ha det.
argumentet att användarna skall vara separerade från varandra är tyvärr inte tillräckligt bra. det finns betydligt lättare lösningar att filtrera ut och presentera information som hör till en specifik användare, än att bolla runt med ett okänt antal tabeller.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem

Jo det låter verkligen som något kommer bli galet knasigt med den här databasdesignen.

Jag undrar lite smått hur trådskaparen har tänkt att skapa övergripande rapporter med den där lösningen. Det är ju inte vidare svårt att göra en query med grupperingar och summeringar om allt ligger i samma tabell. Men 20 000 tabeller (om man har 20 000 personer) låter ju helt fantastiskt fel.

//C

Permalänk
Medlem

No offense, men det känns som att det skulle vara vettigt att leta upp någon som har läst Programmering och databashantering på åtminstonde gymnasienivå om det ska användas i ett företag. Speciellt om detta system inte kommer ligga i ett intranät vilket gör säkerhet väldigt mycket viktigare. Din nuvarande kod är väldigt öppen för SQL injections och kommer inte att klara av lilla Bobby Tables.

Permalänk
Medlem
Skrivet av koffepro:

ni får tycka vad ni vill men jag har gjort så som jag tycker känns bäst för det här projektet, och jag har fått hjälp med det jag vill ha hjälp med. sen tror jag folk inte förståt riktigt hur jag vill att den ska funka kan bero på att jag inte har förklarat allt, jag förklarade så mkt så att ni skulle förstå vad jag behöver hjälp med... sen funkar dom saker ni har sagt också men alla löser saker olika.
tack så mkt för hjälpen

Du har fått hjälp med det du vill ha hjälp med men du tar inte till dig det du BEHÖVER ha hjälp med. Dessutom är du arrogant mot dom som försöker förklara hur man faktiskt bygger dessa lösningar. Så du kommer sitta med en lösning som inte skalar (men det kanske den inte behöver) och en lösning där det verkar komma finnas grundläggande säkerhetsmissar (SQL injects). Och så säger du att vi inte förstår vad du ska göra för att du inte förklarat allt (vilket iofs är en poäng) men med den exempelkod du visat ser vi alla att du inte har speciellt stor koll på saker och ting.

Permalänk

Finns en del kompetent folk på det här forumet, vilket du tydligen håller med om, annars hade du inte frågat om hjälp här.
Alla har svarat likadant, du gör på fel sätt.
Så, gör om gör rätt.
http://sv.wikipedia.org/wiki/Normalform_(databaser)
http://www.rejas.se/fritis/databashantering/normalisering.htm...