Avatar billede mac10 Nybegynder
06. november 2009 - 18:35 Der er 8 kommentarer og
1 løsning

En masse arrays og efterfølgende i DB, puha - hjælp!

Hej allesammen.

Jeg har gentagne felter som skal smides in i den samme mellemtabel.

<input name="fornavn[]" type="text" />
<input name="efternavn[]" type="text" />

<input name="fornavn[]" type="text" />
<input name="efternavn[]" type="text" />

<input name="fornavn[]" type="text" />
<input name="efternavn[]" type="text" />

Når jeg så udskriver med print_r(); så får jeg de 2 opdelt i 2 forskellige arrays. Først fornavn og bagefter efternavn.

Hvordan kan man samle dem så det er lettere at lave en foreach og smide dem i en database?
Avatar billede Slettet bruger
06. november 2009 - 18:49 #1
Hvad sker der, hvis du poster til denne kodestump?

foreach($_POST['fornavn'] as $key => $value){
    echo $value . " " . $_POST['efternavn'][$key] . "<br>";
}
Avatar billede Slettet bruger
06. november 2009 - 19:11 #2
Jeg tror ikke at dine [] i feltnavnene har nogen effekt.
- flere felter med samme navn, samles (i browseren) inden submit - og "kommasepareres"

Fornavn = "Ole,Peter,Osama,John"
Efternavn = "Olsen,Hansen,BinLaden,Wayne"

i PHP:

$fornavnE = explode("," , $_POST[fornavn] );
$efternavnE = explode("," , $_POST[efternavn] );

MEN du skal på én eller anden måde, sikre at der ikke optræder kommaer i nogle af felterne - for det vil selvfølgelig få det hele til at skride.

Måske ved at cykle igennem:
formen.elements[ pedal ].value.replace("," , "KommaErsatz")
- og tilbaws igen hjemme i PHP
Avatar billede erikjacobsen Ekspert
06. november 2009 - 19:25 #3
"Hvordan kan man samle dem så det er lettere at lave en foreach og smide dem i en database? "  Du kan lave en for-løkke med en index-variabel, $i, som så kan bruges på begge arrays. Det ser ud til de er lige store.
Avatar billede preppydude Nybegynder
06. november 2009 - 21:39 #4
Hvis et feltnavn sluttes med [] betragtes det som en del af et array med det navn som feltet har.

kvadratrodenaf1's svar burde virke for dig, hvis ikke så prøv noget lignende:
<?php
$fornavne = $_POST['fornavn'];
for($i=0;$i<sizeof($fornavne);$i++) {
  printf("Fornavn: %s<br />", $fornavne[$i]);
}
?>
Avatar billede tjaz Nybegynder
06. november 2009 - 21:40 #5
$keys = $_POST["fornavn"];
$values = $_POST["efternavn"];

$namesArray = array_merge($keys, $values);

foreach($namesArray as $fornavn => $efternavn)
{
  mysql_query("INSERT INTO navne (fornavn, efternavn) VALUES ('". $fornavn ."','". $efternavn ."')");
}
Avatar billede tjaz Nybegynder
06. november 2009 - 21:41 #6
sorry ... det er array_combine og ikke array_merge
Avatar billede preppydude Nybegynder
06. november 2009 - 21:48 #7
... husker lige at læse hele spørgsmålet næste gang.
Avatar billede mac10 Nybegynder
09. november 2009 - 12:30 #8
tjaz, hvad hvis det er 3 felter jeg vil have sammen? Så virker array_combine jo ikk :S
Avatar billede mac10 Nybegynder
09. november 2009 - 12:41 #9
Fandt mit svar her efter jeg undersøgte jeres indlæg:
http://phpforbeginners.com/?p=5

Mange tak for hjælpen, smid venligst et svar.
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