kombinere databaser

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009

Er det en stor sak å kombinere databaser? Hvordan gjøres det?

 

Altså, tenker å ha...

... en database for login (ID, brukernavn og passord)

... en database som skal inneholde informasjon om brukeren (personlig info, medlems info etc)

... en database for personlig instillinger som skal huskes (statestikk, valg, registreringer etc.)

 

Innbiller meg at det kan bli en litt stor jobb da.

Bruker man database i forbindelse med posting av kommentarer, innlegg, artikkler? hvis det er tilfelle, så bør jeg vel ha en database for dette også?

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Databaser, normalisering og tabeller

Man bruker stort sett én database per system. Dvs: Hvis du har to websider, så opererer gjerne hver webside i sin database. Et eksempel er hvis du har nettbutikk og forum, da bruker man gjerne én database til hver implementasjon.

For å skille informasjon (brukerdata, artikler, innstillinger) på en webside, bruker man gjerne tabeller.

Kommentarer, artikler og så videre lagres gjerne i databasen, ja. Videre er det noe som heter normalisering, det går ut på at man ikke skal lagre samme data mer enn én gang. Ta dette eksemplet:

Man har en bruker med brukerID 1, i databasen har denne brukeren registrert brukernavn, vanlig navn og så videre. Hvis brukeren skriver en kommentar, så trenger man ikke lagre brukernavnet én gang til for hver kommentar, men man tar heller utgangspunkt i brukerIDen.

Det vil si: En kommentar lagres med brukerIDen til kommentatoren, videre kan man bruke SQL joins for å hente ut data fra to (eller flere) tabeller i samme query, f.eks. brukernavn, hjemmesiden til brukeren, link til profilen til brukeren og selve kommentaren.

Tips: Når du skal opprette databasene - ikke overkompliser databasestrukturen. Totalt unødvendig å skille logiske data fra hverandre i forskjellige tables. I brukertabellen putter du alt som har med brukeren å gjøre, fra navn til adresse og kanskje også preferanser vedkommende har satt på websiden din.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
skrev noen feil. mente å

skrev noen feil. mente å kunne hente data fra flere tabeller til bruk inne på medlemsområdet.

har satt opp bruker_id på alle. Tenkte at for å kunne hente ut riktig data, så må hver tabell ha en identisk ref. å forholde seg til?

  • Login - (bruker_id, bruker navn, passord)
  • Brukerinfo (bruker_id, fullt navn, fornavn, etternavn, startdato, kontakt:(telefon, epost), medlemsskapinfo
  • Bruker innstillinger (bruker_id, statestikk, valg*, registreringer av mål, oppnådde mål etc.)

 

personlig side, instillinger og statestikk:

hver bruker får en personlig side hvor de naturligvis kan foreta endringer i forbindelse med personlig info etc.

De kan også bygge opp en statestikk hvor de kan sette seg mål og registrere (manuelt) fremgangen sin.

 

legger det med innlegg, artikkler og kommentarer litt på is da det, for meg, virker evig innviklet og vansklig...

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
BrukerID og artikkelID

Ja, man må ha én referanse å forholde seg til, og man kan bruke linking tables som utelukkende inneholder referansenøkler (IDer).

Eksempel: Man har en webside hvor brukere kan skrive artikler, hvert medlem har sin ID og hver artikkel har sin ID. Man lagrer naturligvis medlemsinfo i én tabell, mens artikkelen og artikkelID går i en annen.

Nå kan man opprette en tredje tabell som inneholder to felter, ett for brukerID og ett for artikkelID. Dermed har man linket hver artikkel til hver bruker, uten å forsøple artikkel-tabellen med et felt for brukerIDer.

Det samme kan man gjøre med kommentarer. En tabell for brukeren, en tabell for artikler og en tabell for kommentarer. I tillegg til en linketabell som holder brukerID, artikkelID og kommentarID. På den måten har man knyttet hver kommentar til en artikkel og en bruker. Man kan så hente ut opplysninger fra både artikkel- bruker- og kommentartabellen i én og samme query/spørring.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
skjønte ikke helt... Kunne du

skjønte ikke helt...

 

Kunne du lagt ett eksempel som ikke inneholder kommentarer etc.?

 

eksempelvis login og bruker info?

Når det kommer til bruker info og login-info kunne jeg sett for meg at bruker ID var tilgjenglig i begge tabellene.

Lettere og administrere og få oversekt ville ser jeg for meg...

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Tables igjen

Login og brukerinfo kan jo være i samme tabell, da all informasjonen som angår en bruker inngår logisk i brukertabellen (de gjelder jo brukeren). Det er ikke nødvendig å skille ut ting som epost, adresse, passord, telefonnummer og så videre i andre tabeller. De lagrer man sammen med brukerID, slik at man kan bruke brukerID for å hente ut denne informasjonen om den trengs.

Det er først når man ønsker å knytte andre elementer til brukeren at det er interessant å lage flere tabeller.

Tenk på artiklene igjen:

  1. Tabell med brukerdata og bruker-ID
  2. Tabell med artikkel og artikkel-ID
  3. Tabell som knytter artikkel-ID til bruker-ID

Tabell nummer 3 har bare to felter, ett for brukerID og ett for artikkelID. Deretter kan man begynne å joine tables når man skriver spørringer.

Jeg vet ikke ellers hvordan jeg skal forklare det, det blir som at man linker ting sammen med IDer. (Staten bruker personnummerne våre på denne måten. Det er din ID i samfunnet, og all informasjon om deg, bøter, selvangivelser og you name it linkes opp mot denne).

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
skjønner, så jeg kan bare

skjønner, så jeg kan bare legge til brukernavn og passord i samme tabell da?

Tenkte at de burde være sepparate av sikkerhetsmessige grunner. men kansje ikke nødvendig...

 

Men da løste jeg det problemet, så for jeg komme tilbake til joining etc. av tabeller når jeg kommer til at jeg skal legge opp statestikk og kommentarfunksjoner etc.

 

EDIT:

Du kjenner til Bluehost, sant? Og når jeg setter opp felter, så kan jeg velge "action" - primary, unique, index. Bør jeg sette opp Username på UNIQUE, slik at ikke flere kan benytte samme brukernavn?

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Tabeller i MySQL

Ja, bare legg alt sammen i samme tabell.

Det vanligste når man lar brukerne sette sine egne brukernavn er å først kjøre en spørring på det brukernavnet, og hvis det finnes så sier man ifra at det er opptatt, hvis det er ledig så lar man brukeren registrere seg. Ved å gjøre det på den måten så får de jo anledning til å sette et brukernavn som ikke er opptatt også.

(UNIQUE gir vel også en error dersom brukernavnet er opptatt, men jeg synes det er enklere å gjøre det med en spørring).

Det vanligste er at man setter IDen på hver tabell til primary key, og gjerne auto increment.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
Jeg kutter ut brukernavn og

Jeg kutter ut brukernavn og kjører bare ID og passord...

Det jeg må lage da er kun en form hvor brukeren kan definere ett eget passord da. På brukerens personlig side...

Slik at når en gitt bruker er logget inn, så kan de endre sitt passord. Jeg må ha en valideringsfunksjon som da laster opp brukeren passord til riktig person da... sant?

 

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Brukere og passord

Ok. Angående passord: Du kan sette brukerID i en session og når vedkommende skifter passord, så endrer du passordet i databasen for den brukerIDen. Ville også kryptert passord, det gjør du ved å bruke funksjonen PASSWORD('passordet') i SQL-spørringen.

F.eks. "UPDATE users SET pass = PASSWORD('12345') WHERE userID = 1;"

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
Helt utrulig. men klare

Helt utrulig. men klare faktisk å få dette med å oppdatere passord. Det eneste jeg gjerne skulle hatt i tillegg hadde vert en sånn "gjenta passordet"...

  • hvordan setter man opp en slik?

Gjerne slik at man ser det "live".

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Gjenta passord

Angående gjenta passord: Lag to inputs av type password. Kjør en IF i PHP som sjekker hvorvidt den første er lik den andre, Legg så inn det nye passordet hvis begge er like.

Hva mener du med å se det "live"?

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
Brukeropplevelse ved endring av passord

hmmm, sånn at når man har skrevet likt i begge feltene så kommer det opp en "V" eller "OK" i det brukeren har skrevet inn i feltene. Istedenfor at de må klikke på "Bytt passord" for så å få en feilmelding om at passordene samsvarte ikke... Ikke at det er noe big-deal. Virker bare som en god bruker opplevelse...

tenker du noe sånn som

<?php
if($_POST['pass1'] == $_POST['pass2']) {
 
gå videre...
} else {
 
header("Location:/domene.no/try-againl.php");
}
?>

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
jQuery

Jeg skjønner hva du mener. Til det kan du bruke jQuery (eller JavaScript). På samme måte som du validerer i PHP kan du validere med jQuery. Du henter verdien av de to feltene, du sammenligner de to feltene, hvis samstemt så viser du OK (og aktiverer submitknappen), ved feil er submitknappen deaktivert, og beskjeden er "feil", el.l.

Du har jo en god del ønsker om slik interaktivitet på websiden din, så jeg skjønner ikke hvorfor du ikke bare begynner å lære deg litt jQuery. Du forstår jo både HTML, CSS og mye PHP - så da er jo jQuery ganske plankekjøring - i alle fall på dette nivået.

Det handler jo bare om å velge elementer (f.eks. en paragraf/avsnitt), hente eventuelle verdier i elementer og kjøre tester på dem, endre verdier o.l.

Angående PHP-eksemplet ditt, slik ville jeg gjort det.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
hvor?

hvor kan jeg lese om helt grunnleggende jQuery?

Når jeg starter på noe, så ønsker jeg å kunne ta det helt fra begynnelsen... gjerne historie bak emnet...

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
jQuery

Det er ikke så mye historie bak jQuery, da det ble lansert i 2006. Siden da har det blitt det mest brukte JavaScript biblioteket i verden. Du kan lese mer om jQuery på Wikipedia.

Ellers er det bare å sette seg ned og prøve seg frem egentlig. W3Schools har litt om jQuery, men personlig liker jeg best å bruke jQuery sine websider. Her er endel tutorialer i jQuery på deres side. De har også en utmerket wiki som jeg bruker mens jeg koder, nemlig "API Refrence", der kan man sjekke ut alle funksjoner, hva de gjør og de har rikelig med eksempler.

Blir nok litt om jQuery her på Hjemmeside etterhvert også, men først må jeg sette meg ned å få laget et par videoer til i de andre emnene. Det er jo mye triveligere på holde på i forumet enn å sitte å lage de videoene, hehe.

Svar på forumemnet

(If you're a human, don't change the following field)
Your first name.
Innholdet i dette feltet blir holdt privat og vil ikke bli vist offentlig.