Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

MySQL fra PHP

1 view
Skip to first unread message

ScooterGrisen

unread,
Sep 14, 2009, 9:44:47 AM9/14/09
to
Er det her man skal stille spørgsmål om MySQL ?

Jeg har besluttet mig for at min hjemmeside skal laves om sådan at den
bruge MySQL database.

Jeg programmere i PHP og vil bruger MySQL derigennem.

Jeg har læst og lært til om hvordan man opretter databaser og tables
og indsætter og henter data men jeg mangler en smart måde at gøre det
på...

Min hjemmeside handler om scootere og jeg vil gerne have en fil for
hver scooter hvor første linie er scooterens navn, næste linie er
modellen og næste linie er prisen osv osv.

Det er foreksempel data som disse jeg gerne vil have ind i en
database: http://mentos.wep.dk/scooterhjemmeside/altomagm.html#agmfashion

Jeg syntes ikke rigtig jeg kan finde en smart måde at gøre det på.
Håber i kan komme med nogle råd.

Desuden vil jeg så gerne kunne køre en fil ligesom jeg kan ved
commando prompten...
mysql > \. C:/mappe/scooterdata.txt

Hvordan køre jeg denne kommando gennem en hjemmeside ?
Jeg kan godt sende en query om at oprette og slette databaser og
tables osv men jeg kan ikke finde ud af at køre en fil.

Anders

unread,
Sep 14, 2009, 5:05:13 PM9/14/09
to
ScooterGrisen skrev:
> Er det her man skal stille sp�rgsm�l om MySQL ?
>
Det er vel n�rliggende, n�r du nu skriver siden i PHP

> Jeg har besluttet mig for at min hjemmeside skal laves om s�dan at den


> bruge MySQL database.
>
> Jeg programmere i PHP og vil bruger MySQL derigennem.
>

> Jeg har l�st og l�rt til om hvordan man opretter databaser og tables
> og inds�tter og henter data men jeg mangler en smart m�de at g�re det
> p�...

Det lyder lidt som om du ikke har arbejdet ret meget med databaser
f�r, er det rigtig forst�et?
I s� fald vil jeg kraftigt anbefale, at du l�rer noget om
normalisering. Google - database normalisering - s� skulle der v�re
lidt at tage fat p�. En god database struktur vil kunne spare dig
for rigtig mange timer fremover, s� tiden er givet godt ud.


>
> Min hjemmeside handler om scootere og jeg vil gerne have en fil for

> hver scooter hvor f�rste linie er scooterens navn, n�ste linie er
> modellen og n�ste linie er prisen osv osv.

N�r du siger en fil for hver scooter, betyder det s� en r�kke i en
tabel?
Nogle gange er det en fordel, at dele dataene op i flere tabeller
(normalisering). P� den m�de spare du ogs� plads. F.eks hvis de
fleste scootere er af m�rket AGM, kunne det v�re smart at n�jes med
at skrive det (�n gang) i en tabel for sig og derefter n�jes med at
gemme tabel-n�glen for AGM i sin scooter tabel.


>
> Det er foreksempel data som disse jeg gerne vil have ind i en
> database: http://mentos.wep.dk/scooterhjemmeside/altomagm.html#agmfashion

Det ligner en oplagt side, at bruge en database.
>
> Jeg syntes ikke rigtig jeg kan finde en smart m�de at g�re det p�.
> H�ber i kan komme med nogle r�d.
>
Tror du skal t�nke det lidt p� en anden m�de. I stedet for at have
en masse filer liggende i databasen, kunne du dele det op, s� du har
enkelte specifikke oplysninger i hvert felt. S� kan du derefter lave
nogle helt konkrete s�gninger og f� pr�cis de oplysninger du har
brug for.
Pr�v at "lege" lidt med databasen inden du kaster dig ud i et
konkret projekt. Lav nogle simple PHPscripts hvor du henter og
gemmer adresser p� folk. Eller lav 2 tabeller som peger p� hinanden,
en med postnumrer og en anden med by-navne og s� finde den rigtige
by ud fra postnummeret (og/eller omvendt) i en HTML-form.
Det er i det mindste den sjove m�de at l�re det p�. Det kan godt
virke lidt banalt, men p� den anden side er det ogs� rigtig
irriterende, hvis det viser sig, n�r man er ved at v�re f�rdig, at
man skulle have valgt en anden databasestruktur og derfor er n�d til
at lave det om.

> Desuden vil jeg s� gerne kunne k�re en fil ligesom jeg kan ved


> commando prompten...
> mysql > \. C:/mappe/scooterdata.txt

Her er jeg st�et lidt af, vil du have et s�gefelt hvor du kan skrive
en kommando, eller bruge et "rullegardin"? Er det en bestemt scooter
du vil kunne hente frem p� den m�de eller en f�rdiglavet side?
N�r du skriver C:/mappe/scooterdata.txt, er det s� den f�rdige tekst
til en side, nogle informationer der bliver genereret on-the-fly fra
databasen?
>
> Hvordan k�re jeg denne kommando gennem en hjemmeside ?


> Jeg kan godt sende en query om at oprette og slette databaser og

> tables osv men jeg kan ikke finde ud af at k�re en fil.

Med "k�re en fil" mener du s�, hente en fil til visning p� en web-side?
Hvis din tabel ser ud som:

mine_scootere:
scooter_id | producent | model | type | pris | info | img

kan du i dit PHPscript skrive:

$scooterID = 18; // den lille lyser�de min kone dr�mmer om
$SQL = "SELECT * FROM mine_scootere WHERE scooter_id='$scooterID'";
if ( $result = mysql_query($SQL) )
{
while ($row = mysql_fetch_array($result, MYSQL_ASSOC) )
{
echo '<p><img src="' . $row['img'] . '" alt="scooter nr. ' .
$row['scooter_id'] . '"></p>';
echo '<p>Producent:' . $row['producent'] . '<br>Scootertype: '
. $row['type'] . '<br>Pris: ' . $row['pris'] . '<br>Diverse info: '
. $row['info'] . '</p>';
}
} else echo '<p>FEJL: ' . mysql_error() . '</p>';


Kolonnen info r�kke 18 kunne s� v�re et tekstfelt svarende til filen
scooterdata.txt

ScooterGrisen

unread,
Sep 15, 2009, 10:24:34 AM9/15/09
to
> Det lyder lidt som om du ikke har arbejdet ret meget med databaser
> før, er det rigtig forstået?

Yep

> Når du siger en fil for hver scooter, betyder det så en række i en
> tabel?

Jeg er ligeglad jeg vil bare gerne gøre det på den smarte måde.

> Nogle gange er det en fordel, at dele dataene op i flere tabeller

> (normalisering). På den måde spare du også plads. F.eks hvis de
> fleste scootere er af mærket AGM, kunne det være smart at nøjes med
> at skrive det (én gang) i en tabel for sig og derefter nøjes med at
> gemme tabel-nøglen for AGM i sin scooter tabel.

Ja det ville være mest smart kun at skrive det 1 sted men hvordan gør
jeg ?

> Tror du skal tænke det lidt på en anden måde. I stedet for at have
> en masse filer liggende i databasen, kunne du dele det op, så du har
> enkelte specifikke oplysninger i hvert felt. Så kan du derefter lave
> nogle helt konkrete søgninger og få præcis de oplysninger du har
> brug for.
> Prøv at "lege" lidt med databasen inden du kaster dig ud i et


> konkret projekt. Lav nogle simple PHPscripts hvor du henter og

> gemmer adresser på folk. Eller lav 2 tabeller som peger på hinanden,
> en med postnumrer og en anden med by-navne og så finde den rigtige


> by ud fra postnummeret (og/eller omvendt) i en HTML-form.

> Det er i det mindste den sjove måde at lære det på. Det kan godt
> virke lidt banalt, men på den anden side er det også rigtig
> irriterende, hvis det viser sig, når man er ved at være færdig, at
> man skulle have valgt en anden databasestruktur og derfor er nød til
> at lave det om.

Jeg har prøvet at lege med det nogle dage nu og har lige lånt nogle
bøger som hjalp lidt.

Se for eksempel : http://mentos.wep.dk/scooterhjemmeside/php/kildekode.php?mappe=/scooterhjemmeside&fil=altomagm.html
Det er dataerne i $databasecenter jeg gerne vil have ind i en
database.
Indtil videre har jeg sat dem som hedder model, ogsåkaldet,
scootertype, varianter.... , motortype, volume osv ind i database og
det virker fint.
Men der er de "kategorier" som hedder generelt, motor, dimensioner dem
kan jeg ikke finde ud af hvordan jeg skal lave på en smart måde.

Skal jeg lave 1 database for alle scooter dataerne.
Også 1 table for hvert scootermærker (agm, aprilia, honda osv)
også 1 table for hver kategori (generelt, motor, dimensioner osv)
også derinde gemmer jeg så de egentlige data...

jeg syns bare ikke det virker så smart.

> Her er jeg stået lidt af, vil du have et søgefelt hvor du kan skrive


> en kommando, eller bruge et "rullegardin"? Er det en bestemt scooter

> du vil kunne hente frem på den måde eller en færdiglavet side?
> Når du skriver C:/mappe/scooterdata.txt, er det så den færdige tekst


> til en side, nogle informationer der bliver genereret on-the-fly fra
> databasen?

C:/mappe/scooterdata.txt laver jeg selv og den skal så indenholde alle
data på alle scooterene.
Filen indenholder:
****
CREATE DATABASE allescootere;

use ALLESCOOTERE;

CREATE TABLE agm........
*****

Jeg vil så gerne kunne udføre denne fil, altså sende den til
mysql_query på en elle anden måde fra min hjemmeside.
Sådan at jeg bare kan gå ind på min hjemmeside og trykke på en knap
også blive hele databasen med alle dataerne oprettet.

> Med "køre en fil" mener du så, hente en fil til visning på en web-side?

Nej jeg mener at sende kommandoer til mysql.

> Hvis din tabel ser ud som:
>
> mine_scootere:
> scooter_id | producent | model | type | pris | info | img
>
> kan du i dit PHPscript skrive:
>

> $scooterID = 18; // den lille lyserøde min kone drømmer om


> $SQL = "SELECT * FROM mine_scootere WHERE scooter_id='$scooterID'";
> if ( $result = mysql_query($SQL) )
> {
>    while ($row = mysql_fetch_array($result, MYSQL_ASSOC) )
>    {
>      echo '<p><img src="' . $row['img'] . '" alt="scooter nr. ' .
> $row['scooter_id'] . '"></p>';
>      echo '<p>Producent:' . $row['producent'] . '<br>Scootertype: '
> . $row['type'] . '<br>Pris: ' . $row['pris'] . '<br>Diverse info: '
> . $row['info'] . '</p>';
>    }
>
> } else echo '<p>FEJL: ' . mysql_error() . '</p>';
>

> Kolonnen info række 18 kunne så være et tekstfelt svarende til filen
> scooterdata.txt

Hvis jeg har noget scooter data i en fil sådan her:

'agm'
,'fashion'
,'7995'
,'45'

så det jo meget simpelt og smart lige indtil der kommer en masse
tommefelter:

'agm'
,'fashion'
,'7995'
,'45'
,''
,''
,''
,''
,'49,5'
,''

nu ved jeg jo ikke lige hvad de tomme felter ,'' skal indholde fordi
om det handler om scooterens farve eller dens olie, så skal jeg til at
kigge i kode og se hvad række dataen handler om..

Så kunne man gøre sådan her:

INSERT INTO model VALUES('agm');
INSERT INTO undermodel VALUES('fashion');
INSERT INTO pris VALUES('7995');

men er det smart ?

Jeg vender tilbage med noget kode.

Stig Johansen

unread,
Sep 15, 2009, 10:44:53 AM9/15/09
to
ScooterGrisen wrote:

> S� kunne man g�re s�dan her:


>
> INSERT INTO model VALUES('agm');
> INSERT INTO undermodel VALUES('fashion');
> INSERT INTO pris VALUES('7995');
>
> men er det smart ?

Nej, overhovedet ikke.

Hvis vi kun snakker Scooter data, har du kun brug for en (m�ske 2) tabeller
i een database.

Tabellen kunne se s�dan her ud:
- Fabrikant
- Model
- Scootertype
- Pris
- Hastighed
- Volume
osv..

Jeg har taget udgangspunkt i det link du oprindeligt sendte.
Her ville felterne se s�ledes ud:
Fabrikant: AGM
Model: AGM Fashion
Scootertype: HN50QT-K
osv.

Jeg skrev 2 tabeller, for du ville m�ske skrive lidt om fabrikanten, i det
tilf�lde AGM, hvor du s� kan lave en tabel, fabrikanter, med f.eks.
- Fabrikant
- Oplysninger
m.m.

N�glen vil i disse telf�lde v�re fabrikant.
Jeg vil anbefale dig at starte ovre i dk.edb.database, og f� opbygget din
database struktur og SQL'er.

F�r du kan simulere det hele 'i h�nden' skal du ikke kode noget som helst,
for SQL'et skal bruges i koden.

Du skal nok ogs� forvente at m�de personer, der vil normalisere sig ihjel,
blot for at lave (un�dvendige) surrogate keys.

Slut herfra, men nu har du f�et et par ledetr�de til din endavour udi i
databaseverdenen ;)

--
Med venlig hilsen
Stig Johansen

ScooterGrisen

unread,
Sep 16, 2009, 9:56:27 AM9/16/09
to
Se eventuetuelt sidde filer:

opretter databse og tables:
http://mentos.wep.dk/scooterhjemmeside/download/uploadede_filer/scootere.txt

sætter data fra en scooter ind i tables:
http://mentos.wep.dk/scooterhjemmeside/download/uploadede_filer/agmdata.txt

funktioner til mysql er sidste i filen:
http://mentos.wep.dk/scooterhjemmeside/download/uploadede_filer/funktioner.php

Giver det mening ?

Anders

unread,
Sep 16, 2009, 4:38:22 PM9/16/09
to
ScooterGrisen skrev:

> Se eventuetuelt sidde filer:
>
> opretter databse og tables:
> http://mentos.wep.dk/scooterhjemmeside/download/uploadede_filer/scootere.txt

Nu har jeg kun skimmet det hurtigt igennem, men du har slet ingen
PK's (Primary Keys). Ingen felter er markeret med 'NOT NULL' hvilket
vil sige du i teorien vil kunne inds�tte fuldst�ndig tomme r�kker ind.
Hvorfor bruger du ikke bare phpMyAdmin til at lave dine tabeller med?

> s�tter data fra en scooter ind i tables:
> http://mentos.wep.dk/scooterhjemmeside/download/uploadede_filer/agmdata.txt

Der er temmelig mange tomme felter. Kommer der siden data i dem,
eller er det meningen de bare skal st� tomme?

> funktioner til mysql er sidste i filen:
> http://mentos.wep.dk/scooterhjemmeside/download/uploadede_filer/funktioner.php
>
> Giver det mening ?

Indr�mmer jeg har temmelig travlt, s� jeg f�r ikke lige kigget
koden, men kan se du udskifter danske bogstaver �, � og � - hvorfor
det? Og hvis du endelig vil udskifte dem hvorfor s� ikke bruge
&aelig;, &oslash; og &aring;?

ScooterGrisen

unread,
Sep 21, 2009, 11:38:22 AM9/21/09
to
> Nu har jeg kun skimmet det hurtigt igennem, men du har slet ingen
> PK's (Primary Keys). Ingen felter er markeret med 'NOT NULL' hvilket
> vil sige du i teorien vil kunne indsætte fuldstændig tomme rækker ind.

> Hvorfor bruger du ikke bare phpMyAdmin til at lave dine tabeller med?

Jeg aner ikke hvad Primary keys er og hvordan de bruges.
Jeg har læst om dem i de bøger jeg har lånt og der er også noget med
INDEX men jeg ved ikke hvordan jeg skal bruge det.
Jeg kan godt lave dem med NOT NULL men tænkte ikke det var så vigtigt
før jeg havde lavet noget mere.
Altså jeg vil jo gerne kunne skrive et tom felt altså '' fordi lad os
sige jeg ikke kender prisen på en scooter så vil jeg jo gerne have at
feltet er tomt sådan at der ikke kommer til at står pris på
hjemmesiden.

> Der er temmelig mange tomme felter. Kommer der siden data i dem,

> eller er det meningen de bare skal stå tomme?

Det er meningen at jeg så kan indsætte data hvis nu jeg finder mere
information om scooteren. for eksemepel hvor store hjul der er på men
hvis jeg ikke har noget info om hjulet så skal feltet bare være tomt
med ,''

> Indrømmer jeg har temmelig travlt, så jeg får ikke lige kigget
> koden, men kan se du udskifter danske bogstaver æ, ø og å - hvorfor
> det? Og hvis du endelig vil udskifte dem hvorfor så ikke bruge


> &aelig;, &oslash; og &aring;?

Det er ikke meningen der skal udskiftes nogen æøå tegn i mysql. Jeg
skifter øæå til oea i filnavne som uploades og når jeg bruger <a
name="#rodgrodmedflode"> så det bruges ikke til mysql.

Kan du give et simpelt eksempel på hvordan du bruges primary keys ?

Anders

unread,
Sep 22, 2009, 6:05:02 AM9/22/09
to
ScooterGrisen skrev:

> Jeg aner ikke hvad Primary keys er og hvordan de bruges.
> Jeg har l�st om dem i de b�ger jeg har l�nt og der er ogs� noget med

> INDEX men jeg ved ikke hvordan jeg skal bruge det.
> Jeg kan godt lave dem med NOT NULL men t�nkte ikke det var s� vigtigt
> f�r jeg havde lavet noget mere.
> Alts� jeg vil jo gerne kunne skrive et tom felt alts� '' fordi lad os
> sige jeg ikke kender prisen p� en scooter s� vil jeg jo gerne have at
> feltet er tomt s�dan at der ikke kommer til at st�r pris p�
> hjemmesiden.

Det er helt korrekt ikke at bruge NOT NULL p� et felt der muligvis
ikke skal v�re data i, men hvis du har nogle felter der SKAL v�re
data i skal du s�tte NOT NULL. Eksempel: hvis du i tabellen
'generelt' altid kender fornavn, efternavn, scootertype og pris,
skal disse felter ogs� have v�rdien NOT NULL, s� vil MySQL
protestere hvis du pr�ver at inds�tte NULL-v�rdier i disse.

> Kan du give et simpelt eksempel p� hvordan du bruges primary keys ?

I dit eksempel ville jeg bruge primary keys til at holde styr p�
scooternes data. Hvis du kun har �n scooter er det jo ligegyldigt,
men hvis du har 100 scootere med hver deres fornavn, efternavn... i
tabellen generelt og 50 motorer lagret i tabellen motor, hvordan ved
du s� hvilken motor der passer til hvilken scooter, n�r du engang
skal bruge dataene igen?

Hvis du s�tter et felt mere ind i tabellen motor og kalder det
motor_ID og g�r det til primary key for tabellen motor, og samtidig
s�tter feltet motor_ID i tabellen generelt, kan du skrive flg. SQL:

SELECT fornavn, efternavn, pris, k�ling
FROM generelt, motor
WHERE motor.motor_ID = generelt.motor_ID;

Vupti har du den rigtige motor p� den rigtige scooter igen. Forudsat
selvf�lgelig, at du har indsat samme motor_ID i begge tabeller
dengang du lagrede dataene p� den p�g�ldende scooter.

scootergrisen

unread,
Oct 5, 2009, 10:33:28 AM10/5/09
to
Okay nu har jeg lavet en database med en table og der er indsat data
fra 2 scootere.

Jeg opfører denne fil i MySQL for at oprette det hele :
http://mentos.wep.dk/scooterhjemmeside/mysql/scootere.txt

Ser det ikke meget godt/rigtigt du ?
Der er en primary key for hver scooter.

I kan eventuelt logger på http://mentos.wep.dk/scooterhjemmeside/phpmyadmin/index.php
med
brugernavn : testq
kodeord : testq

I må gerne lave om og oprette nye ting hvis i vil vise en mere smart/
rigtig måde at gøre det på.
Hvad er forskellen på primary key og index ?

Anders

unread,
Oct 5, 2009, 7:08:57 PM10/5/09
to
scootergrisen skrev:

> Okay nu har jeg lavet en database med en table og der er indsat data
> fra 2 scootere.
>
> Jeg opf�rer denne fil i MySQL for at oprette det hele :

> http://mentos.wep.dk/scooterhjemmeside/mysql/scootere.txt
>
> Ser det ikke meget godt/rigtigt du ?
> Der er en primary key for hver scooter.
>
> I kan eventuelt logger p� http://mentos.wep.dk/scooterhjemmeside/phpmyadmin/index.php

> med
> brugernavn : testq
> kodeord : testq
>
> I m� gerne lave om og oprette nye ting hvis i vil vise en mere smart/
> rigtig m�de at g�re det p�.
> Hvad er forskellen p� primary key og index ?

Jeg mener ikke du beh�ver at inds�tte alle de mange "tomme" felter,
det er vist bare at forvirre b�de mig og dig selv. Du kan bare n�jes
med at inds�tte data i de felter hvor du rent faktisk har noget at
s�tte ind. Jeg kan se du har sat Primary Key til automatisk at t�lle
op, s� der er ingen grund til specifikt at s�tte en v�rdi der heller.
ex:
INSERT INTO
modeller (fornavn, efternavn, scootertype, ..., producent)
VALUES('AGM','fashion','HN50QT-K', ..., 'fosti motorcycle company
limited');

Optimalt set er der ingen tomme v�rdier i en database. Nu ved jeg
godt virkeligheden nogen gange ser lidt anderledes ud, men dine
mange tomme felter lugter lidt af manglende normalisering. Du kan
normalisere dig halvt ihjel og det er selvf�lgelig ikke meningen,
men din tabel er i �jeblikket temmelig lang og det meste af den
best�r tilsyneladende af tomme felter, s� m�ske du kunne dele den
lidt op? M�ske beh�ver du ikke - det vil du nok hurtigt finde ud af,
n�r du begynder at bruge den :S
Mht. index m� du nok sp�rge en anden, jeg har aldig haft s� store
tabeller, at det spillede nogen egentlig rolle at indexere, men jeg
mener du bruger index til at optimerer din s�gning, s� hvis du har
rigtig mange data i dine tabeller, er det nok en id� at s�tte sig
ind i det ogs�.

0 new messages