Avatar billede konnerup Nybegynder
17. september 2012 - 12:49 Der er 13 kommentarer

Brug af Arrays til MySQL forespørgsler

Jeg skal bruge et system, hvor man ud fra en form, kan oprette en MySQL tabel. Jeg havde tænkt, at man skulle skrive navnet i formen, og jeg så kunne bruge $_POST[] arrayet til sætte navnet på tabellen, men jeg kan ikke rigtig få det til at virke..

Min kode ser således ud:

$name = $_POST["titel"];

$query = "CREATE TABLE $name (id INT AUTO_INCREMENT, link VARCHAR(50))";

...........
Jeg har inkluderet min database forbindelse

Jeg har også prøvet at sætte variablen ind således: ".$name."
Men det fungerer heller ikke.

Jeg håber nogen kan hjælpe mig :)
Avatar billede konnerup Nybegynder
17. september 2012 - 13:00 #1
Jeg har selvfølgelig os afsluttet med:
mysql_query($query);
Avatar billede erikjacobsen Ekspert
17. september 2012 - 13:27 #2
Det virker ikke gennemtænkt at oprette nye tabeller - bedre at have få tabeller og bruge et felt til at adskille tingene.

Men du skal tage og be' MySQL selv fortælle dig hvad der er galt:

  mysql_query($query) or die(mysql_error());
Avatar billede konnerup Nybegynder
17. september 2012 - 13:31 #3
Det foregår inde fra en Admin side, hvor det skal være muligt at oprette et album, hvor der kan tilføjes billeder.. Kan du anbefale en bedre løsning, ville det være rigtig fint :)
Avatar billede olebole Juniormester
17. september 2012 - 13:43 #4
<ole>

Du kan oprette et felt med et tal/tekst, som angiver albummet. Så kan du have alle album i samme tabel.

Det vigtigste råd, du kan få, er dog nok at smide det gamle og forældede MySQL-API langt væk og i stedet komme igang med at kode i MySQLI - eller evt. PDO  =)

/mvh
</bole>
Avatar billede konnerup Nybegynder
17. september 2012 - 14:01 #5
Så hvert album får et id, og et navn?

Hva så med med de billeder der uploades, som skal tilhøre de forskellige album?
Jeg har indtil videre lagt sti'en til billeder ind i databasen..
Og var os det jeg havde forestillet mig lidt med det her.
Sådan, at hvert billede får sit eget ID i tabellen, som er albummet.
Jeg synes måske selv, det er en ret indviklet metode, men jeg har ikke lige kunne se hvordan ellers..

Det med MySQLI, har jeg forsøgt at læse lidt om, men jeg er i forvejen meget ny inden for PHP og MySQL, da jeg kun har programmeret i 2-3 mdr.
Avatar billede olebole Juniormester
17. september 2012 - 14:10 #6
"Så hvert album får et id, og et navn?" >> Nej, et ID eller et navn.

"Hva så med med de billeder der uploades, som skal tilhøre de forskellige album?" >> Du indsætter stien til hvert billede i tabellen - og samtidigt indsættes det ID (album), billedet tilhører.

At du er helt ny, gør det endnu mere presserende at undgå dårlige vaner og komme igang med MySQLI hurtigst muligt. Begynd evt. med denne guide  *o)
Avatar billede jogii Nybegynder
17. september 2012 - 14:13 #7
Nu kender jeg ikke til php, men jeg synes der er noget galt med denne linie:

$query = "CREATE TABLE $name (id INT AUTO_INCREMENT, link VARCHAR(50))";

Skulle der ikke stå noget i stil med

$query = "CREATE TABLE " + $name  + " (id INT AUTO_INCREMENT, link VARCHAR(50))";

?
Avatar billede jogii Nybegynder
17. september 2012 - 14:17 #8
En anden ting er dog, du skal passe med med SQL-injections. Man kan meget nemt indtaste ting i din formular, som ødelægger hele dit system.
Avatar billede konnerup Nybegynder
17. september 2012 - 14:17 #9
Hvis jeg forstår det ret, så skal jeg ikke bruge AUTO_INCREMENT, men istedet selv definere et id til billederne, og derefter, i hvert album, hente de data der har den rigtige værdi?

Og tak for guiden, den vil jeg få kigget på :)
Avatar billede konnerup Nybegynder
17. september 2012 - 14:19 #10
Jogii.

Jeg er opmærksom på SQL-injection, jeg har bare ikke skrevet det med her :)
Avatar billede olebole Juniormester
17. september 2012 - 14:53 #11
@jogii: Hvis man er opmærksom på SQL-injections benytter man ikke MySQL, men MySQLI eller PDO  *o)

I PHP parses variabler, som er escaped af dobbelte gåseøjne, så på dét punkt er spørgers syntaks korrekt. Til gengæld skal et felt med auto incrementing være en primary key:

$query = "CREATE TABLE $name (id INT AUTO_INCREMENT, link VARCHAR(50), PRIMARY KEY (id))";
Avatar billede jogii Nybegynder
17. september 2012 - 15:48 #12
olebole, jamen jeg kan da se jeg skal lade være med at blande mig i noget jeg ikke har forstand på :o)
Avatar billede olebole Juniormester
17. september 2012 - 19:02 #13
jogii: Princippet er godt nok. Faktisk kan jeg bedst lide din syntaks, da den syntaksfarver variablen i min IDE og derfor mindsker antallet af potentielle fejlkilder  *o)

Dog er der lige den detalje, at + operatoren kun anvendes til addition i PHP. Strengkonkateneringsoperatoren (sikke et ord!) er et punktum i PHP. Men idéen var god nok  =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester