Avatar billede solten Nybegynder
13. september 2005 - 22:58 Der er 13 kommentarer og
1 løsning

List/Menu retunerer kun én værdi og ikke en liste?

Jeg har en form med en List/Menu.

<select name="emails" multiple id="emails">

Når jeg prøver at hente data
$data = $_POST['emails'];
så sættes $data kun til den første valgte værdi og ikke et array af værdier.
echo $data;  giver måske "valg1"
og
echo $data[1]; giver så "a".

Hvad er der galt????
Avatar billede nielle Nybegynder
13. september 2005 - 23:10 #1
Virker dette ikke som det skal?

$emails = $_POST["emails"];
if (isset($emails))
{
    foreach ($emails as $email)
    {
        echo "Du har valgt: " . $email . "<br>";
    }
}
Avatar billede solten Nybegynder
13. september 2005 - 23:22 #2
Den går ind i 'if' løkken, men ikke foreach!!
Avatar billede solten Nybegynder
13. september 2005 - 23:27 #3
Hvis jeg skriver:
echo $email;
så får jeg den første valgte værdi ud. Vælger jeg f.eks. v1,v1 og v1 fra listen får jeg:
v1
Avatar billede solten Nybegynder
13. september 2005 - 23:39 #4
Laver jeg en:
echo is_array($emails) ? '<br>YES' : '<br>NO';
Er svaret NO... Det er ikke et array???? Hvorfor??
Avatar billede nielle Nybegynder
14. september 2005 - 06:52 #5
> Vælger jeg f.eks. v1,v1 og v1 fra listen får jeg

Hvad mener du? Listen skal indeholde forskellige elementer - ikke en masse ens.
Avatar billede nielle Nybegynder
14. september 2005 - 08:37 #6
Hvordan ser din form ud?
Avatar billede solten Nybegynder
14. september 2005 - 10:32 #7
<form name="form2" method="post" action="./email_remove.php">
<table width="100%"  border="0">
  <tr><td width="72%"><h3>Slet E-mails </h3></td></tr>
  <tr><td></td></tr>
  <tr><td>
  <label>
    <?php $path = $home."/newsletter/newsletter_email_list.txt";
              $lines  = file($path);
              $number = count($lines);
    ?>
    <select name="emails" size="<?php echo($number); ?>" multiple id="emails" >
      <?php 
    $rowcount = 0;
    foreach($lines as $row){
      $email = trim($row);
      echo('<option>'.$email);
      $rowcount++;
    }
      ?>
    </select>
  </label>
  </td></tr>
  <tr><td>&nbsp;</td></tr>
  <tr><td>
  <label>
    <input name="submit_remove"
          type="submit"
          id="submit_remove"
          value="Slet e-mails">
  </label>
  </td></tr>
</table>
</form>
Avatar billede solten Nybegynder
14. september 2005 - 10:36 #8
> Vælger jeg f.eks. v1,v1 og v1 fra listen får jeg
Ups. jeg mener selvfølgelig v1, v2, v3.
Altså forskellige elementer.
Avatar billede nielle Nybegynder
14. september 2005 - 13:57 #9
Prøv at rette din:

echo('<option>'.$email);

- til:

echo('<option>'.$email.'</option>');
Avatar billede solten Nybegynder
14. september 2005 - 15:17 #10
Det giver ingen ændring, desværre.
Avatar billede solten Nybegynder
14. september 2005 - 15:27 #11
Jeg har lavet en MEGET simpel form på en anden server og får det samme problem. Kan der være en speciel måde, at man skal hente POST data fra en multiple SELECT?
Avatar billede solten Nybegynder
14. september 2005 - 15:30 #12
------------------- FORM ------------------------

<form name="form1" method="post" action="./test.php">
  <label>
  <select name="select" size="4" multiple>
    <option value="vala">val1</option>
    <option value="valb">val2</option>
    <option value="valc">val3</option>
  </select>
  <input type="submit" name="Submit" value="Submit">
</label>
</form>

-------------------------- DATA SENDES TIL ----------------------

<body>
<?php
echo "<br> all input: ".$input;
echo "<br> input[0]: ".$input[0];
echo "<br> input[1]: ".$input[1];
?>
</body>

-------------------- RESULTAT I BROWSER ----------------------

all input: valb
input[0]: v
input[1]: a
Avatar billede solten Nybegynder
14. september 2005 - 15:31 #13
HVOR
$input = $_POST['select'];
OG
Jeg havde valgt både val1 og val2.
Avatar billede solten Nybegynder
14. september 2005 - 16:17 #14
Har fundet fejlen!
Navnet på 'select' skal skrives med '[]' for at tilkendegive, at det skal samles i et array:
<select name="select[]" size="4" multiple>
når man skal hente arrayet skriver man bare:
$input = $_POST['select'];

Svaret blev fundet på:
http://www.onlamp.com/pub/a/php/2004/08/26/PHPformhandling.html
Følgende er høfligt lånt derfra:
2. Put [] at the end of the name of a multivalued form parameter.
When you've got a form element like <select multiple> that can submit multiple values to the server, put [] at the end of the form element name so that the PHP interpreter knows to accept multiple values.
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