Avatar billede hrole Mester
18. april 2019 - 13:00 Der er 5 kommentarer og
1 løsning

Checkbox og array

Hej,
Jeg har en form med en række produkter. De produkter der afkrydses i checkbox udfylder man også måned og år og kun de afkrydsede med datoer skal herefter i et array og gennem en foreach (og på sigt sættes i en sql-databse).

Jeg kan ikke se hvor fejlen er - kan I hjælpe?



        echo '<form action="page.php?basket=add" method="post">';
        while ($row = mysqli_fetch_array($result_new)) {
            echo '<input type="checkbox" name="buy[]" value='.$row['id'].'>'.$row['name'];
            echo ' Date:';
            echo '<select name="exp_m[]">';
            $m = array("01","02","03","04","05","06","07","08","09","10","11","12");
            foreach ($m as $mm) {
                echo '<option value="'.$mm.'">'.$mm.'</option>';
            }
            echo '</select>';
            echo '<select name="exp_y[]">';
            $y = array("2019","2020","2021","2022","2023","2024","2025");
            foreach ($y as $yy) {
                echo '<option value="'.$yy.'">'.$yy.'</option>';
            }
            echo '</select><br>';
        }
        echo '<input type="submit" id="submit_add" name="submit_add" value="Tilføj">';
        echo '</form>';



        if (isset($_POST['submit_add'])) {
            $buy = $_POST['buy'];
            $exp_y = $_POST['exp_y'];
            $exp_m = $_POST['exp_m'];
            foreach ($buy as $key => $n ) {
                echo $n.'-----'.$exp_y[$key].'-'.$exp_m[$key];
}}
Avatar billede ejvindh Ekspert
18. april 2019 - 13:14 #1
Kan du evt. sige noget om, hvad det er, der ikke virker, som det skal? Får du en fejlmeddelelse, eller ser det forkert ud?
Avatar billede hrole Mester
18. april 2019 - 14:13 #2
Foreach løkken virker ikke. Jeg får ikke måned og år med, da de ikke bliver knyttet til buy.
Avatar billede ejvindh Ekspert
18. april 2019 - 14:41 #3
Det virker umiddelbart her hos mig. Hvis man sætter flueben ud for et emne, og ændrer det, så inddrages det efterfølgende i den efterfølgende udskrift.
Avatar billede hrole Mester
18. april 2019 - 15:06 #4
Hvis jeg har følgende:
Skjorte Date: 01/2019
Trøje Date 01/2019
Sokker Date 05/2025
Bukser Date 01/2019

og kun trøje er checked og måned og år er ændret til 05/2025 får jeg
Sokker-----01-2019
Avatar billede ejvindh Ekspert
18. april 2019 - 21:26 #5
Hmja, problemet med din løsning er, at $buy-arrayet ikke får en entry, hvis der ikke sættes et flueben. Et workaround kan være at lave en hidden input, med de samme værdier som til $buy; og så lave en foreach på dette array i stedet. Derved undgår du også fejlen, når der ingen flueben er sat. Noget i stil med:

echo '<form action="page.php?basket=add" method="post">';
$m = array("01","02","03","04","05","06","07","08","09","10","11","12");
$y = array("2019","2020","2021","2022","2023","2024","2025");
while ($row = mysqli_fetch_array($result)) {
    echo '<input type="checkbox" name="buy[]" value='.$row['user_id'].'>'.$row['user_name_visible'];
    echo '<input type="hidden" name="entryCounter[]" value='.$row['user_id'].'>';
    echo ' Date:';
    echo '<select name="exp_m[]">';
    foreach ($m as $mm) {
        echo '<option value="'.$mm.'">'.$mm.'</option>';
    }
    echo '</select>';
    echo '<select name="exp_y[]">';
    foreach ($y as $yy) {
        echo '<option value="'.$yy.'">'.$yy.'</option>';
    }
    echo '</select><br>';
}
echo '<input type="submit" id="submit_add" name="submit_add" value="Tilføj">';
echo '</form>';

       
if (isset($_POST['submit_add'])) {
    $entryCounter = $_POST['entryCounter'];
    $buy = $_POST['buy'];
    $exp_y = $_POST['exp_y'];
    $exp_m = $_POST['exp_m'];
    foreach ($entryCounter as $key => $n ) {
      echo '<br>'.$key.'--'.$n.'---'.$exp_y[$key].'-'.$exp_m[$key].'=====> '.$buy[$key];
      if (in_array ($n, $buy)) {
        echo "----fundet".$key;
      }
    }
}
Avatar billede hrole Mester
18. april 2019 - 23:06 #6
Mange tak for hjælpen!
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