Avatar billede nemlig Professor
12. august 2010 - 13:12 Der er 20 kommentarer og
1 løsning

Adskil for- og efternavn

Hejsa.
Jeg har lige konverteret en Access DB til MySQL.
Jeg har den udfordring, at et felt (navn) indholder medlemmets fulde navn:

Ex: Jens Peter Hansen eller Ingeborg Slot

Jeg vil gerne isolere efternavnet - dvs. det sidste hele ord i feltet, således jeg ender med 2 variabler, hvor:

$var1 = for- og evt. mellemnavne
$var2 = efternavn
Avatar billede nemlig Professor
12. august 2010 - 13:18 #1
Det må jo være noget med
$var = explode(' ',$row['navn']);

Men hvordan "fanger" jeg det sidste felt i arrayet og sammensætter de første.
Avatar billede Slettet bruger
12. august 2010 - 13:29 #2
Hvis ellers dine data er velformede - alle HAR mindst ét mellemrum:
$var = explode(' ',$row['navn']);
$efterNavn = array_pop($var);
$forNavn = implode(' ',$var);
Avatar billede repox Seniormester
12. august 2010 - 13:30 #3
<?php

$name_a = explode(" ", $row["navn"]);
$lastname = array_pop($name_a);
$firstname = implode(" ", $name_a);

?>
Avatar billede michael_stim Ekspert
12. august 2010 - 13:36 #4
Og hvis man hedder Anders Jens Hansen Jensen Petersen?
Avatar billede nemlig Professor
12. august 2010 - 13:37 #5
hehe - det var I meget enige om. Efter opdateringen tjekker jeg databasen via PhpMyAdmin for evt. fejl. Der er ca. 400 poster.

T4NK3R var hurtigst - men tak til begge.
Avatar billede nemlig Professor
12. august 2010 - 13:38 #6
#4 Jeg er helt bevidst om denne problemstilling, men tager den manuelt via PhpMyAdmin. Jeg gætter på, at den simple kode løser 95% af posterne.
Avatar billede repox Seniormester
12. august 2010 - 13:48 #7
#4
Hvordan vil det ændre på at efternavnet stadigvæk kun er "Petersen" og fornavne vil være "Anders Jens Hansen Jensen"?
Avatar billede showsource Seniormester
12. august 2010 - 13:51 #8
Der er også strrpos()

<?php
$str = "Showsource synes php er fedt!";

$laststr = strrpos($str, " ");

echo substr($str, 0, $laststr);
echo"<br />";
echo substr($str, $laststr);

?>
Avatar billede nemlig Professor
12. august 2010 - 13:52 #9
Formålet med adskillelsen er i øvrigt, at jeg kan være mere personlig, når der sendes email og SMS'er til medlemmerne.

Hej Jens.....

i stedet for

Hej Jens Isaksen.
Avatar billede michael_stim Ekspert
12. august 2010 - 13:52 #10
#7
Jeg har 4 navne. 2 fornavne/mellemnavne og 2 efternavne ;o)
Avatar billede danco Nybegynder
12. august 2010 - 15:04 #11
Lige et lille spørgsmål.
Jeg troede jeg netop at én af hoved pointerne i netop databasedesign var at man burde undgå flerværdi attributter, således at man opnår muligheden for at hente det ud der er behov for.
Det er korrekt at det kan løses programmeringsmæssigt, men jeg er sikker på at din database vil elske dig hvis du splitter op i fornavn og efternavn, medmindre at det naturligvis har en anden væsentlig årsag.
Avatar billede nemlig Professor
12. august 2010 - 15:07 #12
#11. Det kan være, at jeg misforstår dig, men mit ønske er jo netop, at jeg vil opdele ét nuværende felt med navneoplysninger til 2 felter, hvor felt 1 er for- og mellemnavne, mens felt 2 er efternavn.

Misforstår vi hinanden?
Avatar billede Slettet bruger
12. august 2010 - 15:21 #13
Yes! Sejr på målfoto - 20 sekunder - Stram op, Repox!
Avatar billede repox Seniormester
12. august 2010 - 15:21 #14
#10
Jf. navnelovgivningen kan du kun have et efternavn. Det fremgår af §8 som kan læses her: https://www.retsinformation.dk/Forms/R0710.aspx?id=31494

Medmindre dit navn består af forholdsord, er loven jo ikke anderledes for dig - men da jeg med rimelighed ikke kan gisne om dit fulde navn må det som udgangspunkt være det eksempel du angav til at starte med, hvorfor "Petersen" er efternavnet på "Anders Jens Hansen Jensen Petersen".
Avatar billede repox Seniormester
12. august 2010 - 15:23 #15
#13
Bahh ;) jeg er også ved at være en træt gammel mand :p
Avatar billede showsource Seniormester
12. august 2010 - 18:23 #16
Nu er jeg lidt forvirret, fordi hvis ønsket blot er at kunne sende fornavn er der ingen grund til at dele op. ( Vil jeg mene )
Så vil et felt være bedre, og så la' php om at få fornavn alene.

Men hvis man f.eks. skal kunne søge, vil det give menning at dele navn op i fornavn og efternavn.



Og ja, jeg vil da mene at man kun kan ha' et efternavn. ?
Avatar billede nemlig Professor
12. august 2010 - 18:39 #17
#16 Jeg forstår din pointe, men jeg vil hellere kunne styre det ved en opdeling incl. en manuel indsats.

Dermed kan jeg bedre styre fornavnene.

Jens Chr. Hansen, skal i fornavn have Jens Chr., og Hansen i efternavn, mens fx.  Lars Hedegaard Rasmussen, kun skal have Lars i fornavn og Hedegaard Rasmusen i efternavn.

Dermed vil jeg i email og SMS'er kunne starte med:
Hej Jens Chr. og
Hej Lars.

Jeg er klar over, at det kræver en manuel stillingtagen, hvor det fulde navn består af mere end 2 navne.
Avatar billede nemlig Professor
12. august 2010 - 19:28 #18
Jeg fatter det ikke - koden opdaterer ikke tabellen, men henter fint Fornavne (det fulde navn) og splitter dem.
De 2 nederste echo-linjer viser korrekt indhold.
Kan du/I se, hvad der er galt:

$res = mysql_query("SELECT * FROM `kal01_medlemmer`");
while($row = mysql_fetch_array($res)) {

$var = explode(' ',$row['Fornavne']);
$efterNavn = array_pop($var);
$forNavn = implode(' ',$var);
   
mysql_query("UPDATE `kal01_medlemmer` SET
    `Fornavne` = ".$forNavn.",
    `Efternavn`=".$efterNavn."
    WHERE `id`=".$row['id']."");   

echo $forNavn."<br>";
echo $efterNavn."<br>";
}
Avatar billede michael_stim Ekspert
12. august 2010 - 19:30 #19
Glem ikke ' før og efter dine variabler.
Avatar billede michael_stim Ekspert
12. august 2010 - 19:32 #20
Og glem ikke at sætte en or die på. Det gør det lidt lettere at opdage fejlen ;o)
Avatar billede nemlig Professor
12. august 2010 - 19:41 #21
Hold da op, hvor er jeg en klaphat. Tak for det Michael.
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