Avatar billede totalpc Seniormester
26. september 2017 - 09:39 Der er 5 kommentarer og
1 løsning

Multiple checkbox og inputfelter

Hej
Jeg henter en rækker arter fra en database og laver en checkboks og et inputfelt for hver.
fx
Checkbox - Art 1 - Input
Checkbox - Art 2 - Input
osv
Jeg har en id på arterne som jeg sætter som value i checkboxen.

Nu vil jeg gerne kunne sætte kryds i checkbox for x antal arter og indtaste noget i de tilhørende input felter. Så vil jeg gerne sende alle dem med input videre til en anden side når jeg trykker GEM.
Hvordan kringler jeg lige den?
Avatar billede Rune1983 Ekspert
26. september 2017 - 10:04 #1
Eksempel nedenfor. Har ikke testet det af.

<form name="myform" enctype="multipart/form-data" method="post" action="DenSideDuVilHenTil.php">
<table>
<?php
// Connection til database
// Hent Art data med SQL kald og gem i $SQLDataArt
$CounterAntalArt = 0;
while($RowDataArt=$SQLDataArt->fetch_array())
{
    $CounterAntalArt++;
    $NameChecnBox_Art = "CheckboxName_$CounterAntalArt";
    $NameInputText_Art = "InputName_$CounterAntalArt";
    $NameInputHidden_ArtID = "InputNameArtID_$CounterAntalArt";
    ?>
    <tr>
        <td><input type="checkbox" name="<?php print $NameChecnBox_Art; ?>" value="1" /></td>
        <td>
            <input type="text" name="<?php print $NameInputText_Art; ?>" />
            <input type="hidden" name="<?php print $NameInputHidden_ArtID; ?>" value="<?php print $RowDataArt[ArtID]; ?>" />
        </td>
    </tr>
    <?php
}
?>
<tr>
    <td colspan="2"><input type="submit" value="GEM" /></td>
</tr>
</table>
<input type="hidden" name="AntalCheckboxLinier" value="<?php print $CounterAntalArt; ?>" />
</form>
<?php
////////////////////////////
// Ville så på den side du springer til hente data ud via for loop nedenfor.
for ($i=1; $i <= $_POST[AntalCheckboxLinier]; $i++) {
    $NameChecnBox_Art = "CheckboxName_$i";
    $NameInputText_Art = "InputName_$i";
    $NameInputHidden_ArtID = "InputNameArtID_$i";
   
    // Kontroller checkbox er valgt på linie
    if($_POST[$NameChecnBox_Art] == "1"){
        $InputTekstData_ForLinie = $_POST[$NameInputText_Art];
        $ArtID_ForLinie = $_POST[$NameInputHidden_ArtID];
    }
}
?>
Avatar billede jakobdo Ekspert
26. september 2017 - 12:40 #2
Jeg ville bruge arrays/lister i din opbygning.

Loope dine arter.

Og anvende deres ID således:

<input type="checkbox" name="myCheck[ INDSÆT_ART_ID ]">
<input type="text" name="myText[ INDSÆT_ART_ID ]">

Så vil du i "backend" kunne loope myCheck og så udtrække data fra de værdier i myText.

Håber det giver mening.
Avatar billede totalpc Seniormester
26. september 2017 - 13:32 #3
@jakobdo
Det virker som en god løsning.
Jeg har droppet checkboksen, så nu er det blot værdierne fra input og id jeg skal bruge.

Så nu har jeg:
<input type="text" size="10" name="indvej[<?php echo $art->id ?>]"> gram

Men jeg forstår ikke at hive værdi af navn og input ud?

If($_POST['Submit'])               
    {
            foreach ????
Avatar billede totalpc Seniormester
26. september 2017 - 14:00 #4
Se nu gør jeg sådan her:
If($_POST['Submit'])
{
$indvej=$_POST["indvej"];
var_dump($indvej);
}
?>

og får blandt andet dette ud i mit array:

array(22) { [32]=> string(3) "400"

Det er den rigtige ID, som er 32 og mit input er 400.
Men hvordan får jeg fat på ID og value for dem der har en value. Jeg kan simpelthen ikke regne det ud :)
Avatar billede jakobdo Ekspert
26. september 2017 - 14:51 #5
hvis du laver en post, kan du lave:

if($_POST['Submit']){
  foreach($_POST['indvej'] as $key => $val){
    echo "ID: " . $key . "<br>";
    echo "VALUE: " . $val . "<br>";
  }
}

Du burde kunne bruge noget ala ovenstående.
Avatar billede totalpc Seniormester
26. september 2017 - 17:05 #6
Takker...det virker
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