Avatar billede andrew Nybegynder
13. februar 2009 - 15:12 Der er 9 kommentarer og
1 løsning

Sende alt indhold i $_POST fra en select menu

Hej eksperter.

Som spørgsmålet lyder, kunne jeg godt tænke mig at vide om det overhovedet er muligt at sende en hel liste fra en "select" i stedet for den som evt er markeret. Det skal siges, at indholdet indsættes via andre lister (tilføj/fjern-funktioner).

Har en postform som følgende:

<form method="POST" action="index.php" name="form">
  Valgt indhold:<br>
  <select size="4" name="mylist" id="mylist"></select><br>
  <input type="submit" name="send" value="Send">
</form>


Når jeg sender ovenstående post, kan jeg kun få udskrevet den markerede linie (hvis noget overhovedet er markeret), men kunne egentlig godt tænke mig at få sendt hele listens indhold:

<?php
  if(isset($_POST['send'])) {
    echo $_POST['mylist'];
  }
?>


Kan nogen hjælpe med en løsning?

På forhånd tak.
Avatar billede psychopixi Nybegynder
13. februar 2009 - 16:58 #1
Der er ingen indbygget funktion til at gøre det du gerne vil.

Dertil kommer også at HVIS man kunne, så ville man jo stå med et relativt stort sikkerheds leak, da post-data sendes fra en computer til en server, hvilket betyder at al data kunne manipuleres, ændres eller undlades. Dette betyder så at selv hvis du kunne sende alle options i en select, ville du ikke kunne stole på disse data.
Avatar billede majbom Novice
14. februar 2009 - 12:29 #2
du kan med javascript vælge alle sammen i forbindelse med at formen submittes:

function selectAllOptions(selStr)
{
  var selObj = document.getElementById(selStr);
  for (var i=0; i<selObj.options.length; i++) {
    selObj.options[i].selected = true;
  }
}

-> #1 - det er da muligt at sende alle muligheder i en select, hvis den er sat til multiple og man vælger alle sammen.

så om man bruger lidt javascript til at vælge alle sammen gør vel ingen forske?
Avatar billede psychopixi Nybegynder
14. februar 2009 - 13:06 #3
#2
Korrekt, men det var ikke det herren ønskede. Han ville gerne at den sendte alle options i en select, hvor ikke alle var valgt:)
Avatar billede majbom Novice
14. februar 2009 - 13:15 #4
ja det er jeg klar over, men afhængigt af ideen kan det jo diskutteres om det er smart.

hvis man nu har en funktion hvor man flytter options fra én select til en anden for at sende alle options fra den select man flytter til, skal de jo alle være valgt før det giver mening...
Avatar billede psychopixi Nybegynder
14. februar 2009 - 13:55 #5
#4
Det er en mulighed, men som jeg skriver i #1 skal man passe meget på med at stole på POST-data. Og jeg kan ikke se hvornår dette skulle være nødvendigt frem for metoder man så at sige kan stole på.

Med andre ord: Andrew, vær forsigtig med POST-data, og ellers, held og lykke med projektet:)
Avatar billede andrew Nybegynder
14. februar 2009 - 20:42 #6
splazz => Dit forslag virker :) Jeg sætter dit script ind som en onclick til min sende-knap. Men spørgsmålet er nu, hvordan jeg udskriver de linier den sender via post? Når jeg laver en alm. udskrift som jeg viste i spørgsmålet, viser den kun sidste linie.

psychopixi => Tak for dit indlæg. Kan du ikke uddybe det lidt, da jeg ikke helt forstår problemmet i sikkerhedshullet :)
Avatar billede andrew Nybegynder
14. februar 2009 - 21:03 #7
Har fundet ud af det.

Ændrede lidt i html:
<select size="4" name="mylist[]" id="mylist"></select>

Og indsatte lidt php:
$test=$_POST['mylist'];
if ($test){
  foreach ($test as $t){echo 'You selected '.$t.'<br />';}
}
Avatar billede majbom Novice
04. november 2010 - 11:13 #8
andrew?
Avatar billede andrew Nybegynder
05. november 2010 - 11:54 #9
Ja, smid et svar - så lukker vi spm.
Avatar billede andrew Nybegynder
05. november 2010 - 11:55 #10
Sorry, så ikke du havde svaret :-)
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

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