Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 14:56 Der er 29 kommentarer og
1 løsning

problem med data fra <select>

hejsa
jeg har en <select name="kategori" class="tbox" size="8" multiple>
som volder lidt problemer...

Som i kan se kan man markere flere på en gang, som så sendes med POST via en form.
Alle value er sat i tal, da de skal give et id som så skal sættes i db.

Problemet er bare at hvis man markere mere end 1 så tager den bare alle markeret value og plusser dem til et tal. jeg ville gerne have dem opdelt med comma. hvordan kan jeg gøre det, så jeg kan få det rigtige ind i min db ???
Avatar billede jaw Nybegynder
30. oktober 2005 - 14:59 #1
Du kunne kalde den name="kategori[]" og så hente dem med $_POST['kategori'][0], $_POST['kategori'][1] osv.

Og den lægger dem da vist ikke sammen, den viser bare kun den sidst valgte ?! :)
Avatar billede jaw Nybegynder
30. oktober 2005 - 15:02 #2
Og så kan du komma-separere dem med en løkke:
$str = "";
for($i = 0; $i < count($_POST['kategori']); $i++) {
    $str .= $_POST['kategori'][$i].",";
}
$str = substr($str, 0, (strlen($str)-1)); //fjerner sidste komma
Avatar billede whatever Nybegynder
30. oktober 2005 - 15:09 #3
jaw:
Det kan gøres lidt lettere:

$str = implode(",",$_POST['kategori']);
Avatar billede jaw Nybegynder
30. oktober 2005 - 15:11 #4
Jojo, det kan det da...
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 15:29 #5
hmm det første eks retunerer ALTID kun "1" lige meget hvad jeg markerer.

eks 2 giver denne fejl. Warning: implode(): Bad arguments. in /web/www/love-life.dk/classes/lager.php on line 143
Avatar billede jaw Nybegynder
30. oktober 2005 - 15:30 #6
Og du har husket at ændre name="kategori" til name="kategori[]" ?
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 15:32 #7
Jaw... er naturligvis gjort :D
Avatar billede jaw Nybegynder
30. oktober 2005 - 15:38 #8
Jamen så ved jeg ikke hvad der sker, for det virker upåklageligt her. Så må du smide lidt kode...
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 15:41 #9
ok ok skal ske :D

i min select

<td width="300"><select name="kategori[]" class="tbox" size="8" multiple>
          <?php
          $a=new lager();
          $a->get_kategori();
          if($a->err_no)
          {
              echo "<p class='redtext'>".$a->err.", ".$a->err_no."</p>";
          }
          else
          {
              for($i = 0; $i <$a->num; $i=$i+1)
              {
                  echo "<option value='".$a->id[$i]."'>".$a->navn[$i]."</option>";
              }
          }

dataen hentes så sådanne og sendes til funktionen der behanler dataen.

$a = new lager();
    $a->opret_vare("" .$_REQUEST["varenr"]. "", "" .$_REQUEST["navn"]. "", "" .$_REQUEST["beskrivelse"]. "", "" .$_REQUEST["pris"]. "", "" .$_REQUEST["tilbud"]. "", "" .$_REQUEST["kategori"]. "", "" .$_REQUEST["udsolgt"]. "", "" .$_FILES["img"]["name"]. "", "" .$_FILES["img"]["tmp_name"]. "", "" .$_FILES["img2"]["name"]. "", "" .$_FILES["img2"]["tmp_name"]. "", "" .$_REQUEST["antal"]. "");

i min funktion skriver jeg så


$kat = implode(",",$kategori);
Avatar billede jaw Nybegynder
30. oktober 2005 - 15:42 #10
Det første der springer mig i øjnene er name="kategori[" - selvom du sagde, at du havde ændret til name="kategori[]"
Avatar billede jaw Nybegynder
30. oktober 2005 - 15:43 #11
Og:
  $kat = implode(",",$kategori);
bør være:
  $kat = implode(",",$_POST['kategori']);
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 15:45 #12
Nixx for $_POST['kategori'] vil ikke virke i min klasse / funktion
Jeg overfører hele arryaet til klassen og skal så implode det derinde...
Avatar billede jaw Nybegynder
30. oktober 2005 - 15:46 #13
Jawohl...
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 15:48 #14
i en klasse kan du ikke modtage variabler med $_POST $_GET o.s.v dem er du nød til at hente på siden og derefter sende dem som almindelige variabler som du så kan benytte i funktinen og det har jeg gjort her..

$a->opret_vare("" .$_REQUEST["varenr"]. "", "" .$_REQUEST["navn"]. "", "" .$_REQUEST["beskrivelse"]. "", "" .$_REQUEST["pris"]. "", "" .$_REQUEST["tilbud"]. "", "" .$_REQUEST["kategori"]. "", "" .$_REQUEST["udsolgt"]. "", "" .$_FILES["img"]["name"]. "", "" .$_FILES["img"]["tmp_name"]. "", "" .$_FILES["img2"]["name"]. "", "" .$_FILES["img2"]["tmp_name"]. "", "" .$_REQUEST["antal"]. "");
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 15:50 #15
men kan da gør noget andet.
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 15:54 #16
nu har jeglagt implode samme sted som formen og derfor kunne jeg bruge min $_REGUEST men det giver stadig samme fejl

koden er
$kat = implode(",",$_REQUEST["kategori"]);
    $a = new lager();
    $a->opret_vare("" .$_REQUEST["varenr"]. "", "" .$_REQUEST["navn"]. "", "" .$_REQUEST["beskrivelse"]. "", "" .$_REQUEST["pris"]. "", "" .$_REQUEST["tilbud"]. "", "$kat", "" .$_REQUEST["udsolgt"]. "", "" .$_FILES["img"]["name"]. "", "" .$_FILES["img"]["tmp_name"]. "", "" .$_FILES["img2"]["name"]. "", "" .$_FILES["img2"]["tmp_name"]. "", "" .$_REQUEST["antal"]. "");
Avatar billede jaw Nybegynder
30. oktober 2005 - 15:55 #17
Har du fulgt min kommentar 15.42.55 ?
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 16:01 #18
heh den havde jeg slet ikke læst men ja den står sådan "ren copy"
<td width="300"><select name="kategori[]" class="tbox" size="8" multiple>
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 16:01 #19
hmm det er eksperten der fjerner det sidste ]
når jg skriver det står det rigtigt men når det er sendt forsvinder "]"
hmm underligt
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 16:06 #20
nu har jeg testet med en
print "$kat, " .$_REQUEST["kategori"]. "";

Jeg får følgende retur.

, 14

Med andre ord den laver det ikke til et array men tager stadig den sidste value ???
Avatar billede jaw Nybegynder
30. oktober 2005 - 16:08 #21
Det kunne næsten se ud som om, at din select-box så ikke funker helt som den skal. Har du tjekket din kildekode fra browseren og set om alle values etc er som du tror de er?
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 16:12 #22
<td width="300">
<select name="kategori[]" class="tbox" size="8" multiple>
<option value='1'>testkat1</option><option value='2'>testkat2</option>
</select></td>

Taget fra "vis kilde" i IE
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 16:13 #23
hehe exp.dk laver stadig ballade med den ene "]"
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 16:44 #24
hvis jeg kører den igennem validator.w3 får jeg heller ingen fejl på denne select.
Avatar billede jaw Nybegynder
30. oktober 2005 - 17:03 #25
Jeg ved det ikke. Men med din kilde virker det også fint hos mig.
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 17:05 #26
nå men det der skide select er nu droppet... det gider jeg ikke spilde mere af min tid med.... så derfor har jeg benyttet checkboxe i stedet og hvad skete der så ?? det funker som det skal....

Vil gerne dele points imellem jer da i begge havde et fint svar... så hvis i venligst vil svare så kan vi lukke dette spm :-)
Avatar billede jaw Nybegynder
30. oktober 2005 - 17:05 #27
Ok
Avatar billede whatever Nybegynder
30. oktober 2005 - 17:16 #28
Giv alle pointene til jaw, han var vist den mest aktive ;-)
Avatar billede bacce.dk Nybegynder
30. oktober 2005 - 19:08 #29
Det er bare i orden :-)
Avatar billede jaw Nybegynder
30. oktober 2005 - 19:15 #30
Tak til jer begge :)
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