Avatar billede prop46 Nybegynder
01. maj 2007 - 09:11 Der er 7 kommentarer og
1 løsning

string replace

Jeg har feltet 'emne' i DB, som indeholder en række emner adskilt med et komma. Når jeg trækker emnere ud bruger jeg en explode(",", $emne) for at skille dem ad.

Nu skal der være en mulighed for at slette et emne fra siden vha en dropdown. Emnet man vælger hedder 'valgt_emne'. Jeg har nedestående:

$nye_emner = str_replace(','.$valgt_emne, '', $gl_emne);
$rediger_emner = "UPDATE bruger SET emne='$nye_emner' where brugernavn='$brugernavn'";

Det virker jo fint hvis 'valgt_emne' ligger midt i en streng og derfor rent faktisk starter med et komma. Men hvis 'valgt_emne' ligger først i strengen kan den selvf. ikke finde emnet, da den forventer at det starter med en komma.

Løsningen kunne være at lave flere str_replace. F.eks først fjerne emnet, så lave to kommaer om til et osv.. men jeg tænkte der måske var en nemmere løsning... hvor jeg selvf. stadig beholder min oprindelige tanke med at alle emner ligger i samme DB felt adskilt at kommaer.

Er spørgsmålet mon klart?
Avatar billede hmortensen Nybegynder
01. maj 2007 - 09:25 #1
Du bør lave en eller to tabeller mere, og så sammenholde emnerne vha. af join, i stedet for at lave kommaseperarede strenge.

Hvordan ser din tabel ud nu?
Avatar billede prop46 Nybegynder
01. maj 2007 - 09:30 #2
CREATE TABLE `bruger` (
  `id` int(11) NOT NULL auto_increment,
  `niveau` text NOT NULL,
  `status` text NOT NULL,
  `brugernavn` text NOT NULL,
  `kodeord` text NOT NULL,
  `mail` text NOT NULL,
  `navn` text NOT NULL,
  `billed` text NOT NULL,
  `emne` text NOT NULL,
  `hp` text NOT NULL,
  `tekst` text NOT NULL,
  PRIMARY KEY  (`id`)
)
Avatar billede hmortensen Nybegynder
01. maj 2007 - 09:48 #3
bruger
brugerid
niveau
status
brugernavn
kodeord
mail
navn
billede
hp
tekst

emne
emneid
emnenavn

brugeremne
brugerid
emneid

På den måde har du emnerne i en seperat tabel. Så bruger du "brugeremne" tabellen til at holde en bruger sammen med et emne.

Derudover bør du overveje hvilken datatype du sætter et felt til. Varchar(X), hvor X er 1-255 tegn kan bruges på mange af dine felter. hvis niveau er et tal, kan du måske bruge INT eller TINYINT.
Avatar billede prop46 Nybegynder
01. maj 2007 - 09:51 #4
Men hvorfor lave 3 tabeller når jeg kan have et felt der er adskilt af kommaer?
Avatar billede hmortensen Nybegynder
01. maj 2007 - 09:54 #5
Fordi det giver problemer, og databaser og beregnet til at man laver flere tabeller for at løse denne problemstilling. Ellers kunne du lige så godt gemme det i en tekstfil.
Avatar billede prop46 Nybegynder
01. maj 2007 - 10:24 #6
Okay.. jeg hører dine argumenter, tænker at jeg nok bør lave mine tabeller om, men..... Ja, det er jeg vist lidt træt af :0)
Avatar billede prop46 Nybegynder
01. maj 2007 - 11:00 #7
For nu har jeg valgt at nøjes med flere str_replace, mne jeg takker for de vise ord, og vil ved lejlighed se til at få rettet mine tabeller til :0)

Læg et svar for point.
Avatar billede hmortensen Nybegynder
01. maj 2007 - 11:33 #8
Det er altid nemmere at lave sin database først, så den overholder normal former, og så lave koden bagefter.
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

IT-JOB