Toon posts:

[php] checboxes naar array

Pagina: 1
Acties:

Verwijderd

Topicstarter
gegroet.
*)om te beginnen; ik heb me al rot gezocht naar de oplossing van mijn probleem, maar helaas
*)ik ben een noob, maar ik doe m'n best :)

Het probleem:

ik lees de inhoud van een map uit,(files & folders), en die geef ik weer.
achter de filename komt een checkbox. als deze aangevinkt is, en men drukt op de knop 'delete' moet de file verwijderd worden.
Een file verwijderen is geen probleem, alles werkt, op dit na:
ik zou graag in een array hebben staan welke checkboxes aan, en welke uit zijn.

code:
1
2
3
4
5
<form method="post" action="index.php"><input type="checkbox" name="erree[]" ></form>
                   <?php

                   if (isset($erree[])){
                   foreach ($erree as $value) { echo"<td> ok </td>";}


dus ik ben blij als ik het volgende kan:
code:
1
2
3
4
echo" eerste: $erree[1]";
echo" tweede: $erree[2]";
echo" derde: $erree[3]";
echo" vierde: $erree[4]";


en dan als output:

code:
1
2
3
4
eerste: off
tweede: on
derde: on
vierde: off


dit is wat ik al bij elkaar gesprokkeld heb aan code. Verder raak ik niet...
jullie waarschijnlijk wel? :)

  • InNuedo
  • Registratie: Maart 2000
  • Laatst online: 22-04 15:02
Verwijderd schreef op 27 november 2003 @ 00:45:gegroet.
*)om te beginnen; ik heb me al rot gezocht naar de oplossing van mijn probleem, maar helaas
Mooi :)
Volgende keer is het handig om te zeggen waar je hebt gezocht en wat je hebt gevonden.
*)ik ben een noob, maar ik doe m'n best :)
Geen probleem :P

Twee oplossingen voor je probleem:
Je kan, als je het 'vies' wil doen, de filename gebruiken als key van de array, oftewel:
code:
1
<input type="checkbox" name="erree[FILENAME.BLA]">

deze kan je dan met een for of een while loop uitlezen:
code:
1
2
3
4
5
6
7
while (list($filename,$value) = each($erree)) {
  echo $filename.": ";
  if ($value != "")
    echo "on";
  else
    echo "off";
}
Waarom staat de value niet op off als de checkbox leeg is? nou, dat is omdat als hij leeg is hij een lege value heeft en als hij aangevinkt is, dan krijgt hij een default value of een opgegeven value.


Een nettere oplossing is elke checkbox een id (integer) meegeven en een extra input veld (hidden) in het form zetten waarin de filename staat.
code:
1
<input type="checkbox" name="erree[1]"><input type="hidden" name="file_erree[1]" value="FILENAME.BLA">


Nu kan je met de volgende php code alles ophalen:
code:
1
2
3
4
5
6
7
while (list($id,$value) = each($erree)) {
  echo $id.": ";
  if ($value != "")
    echo "on (".$file_erree[$id].")";
  else
    echo "off (".$file_erree[$id].")";
}


Zie ook http://nl.php.net/manual/en/function.each.php voor het gebruik van each() en list() (example #2)

[ Voor 93% gewijzigd door InNuedo op 27-11-2003 01:38 . Reden: en daar gaat de layout..... ]


  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 20-05 08:42

XangadiX

trepanatie is zóó kinderachtig

ik vind foreach altijd een fijne om arrays uit te lezen

code:
1
2
3
foreach ($erree as $somevalue) {
 echo "eerste: ".$somevalue."<br>";
}


dan loopt ie de array door en laat ie ze gewoon allemaal zien

moet dit niet naar onze buren?

[ Voor 47% gewijzigd door XangadiX op 27-11-2003 04:43 ]

Stoer; Marduq


Verwijderd

Topicstarter
Thx InNuedo!
dat is al een heel eind de goede richting uit.
met wat knutselen heb ik er dit van gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$t=0;
$m=10;
while ($t<$m){?>
<form method="post" action="boxes.php">
<input type="checkbox" name="erree[]">
<input type="hidden"  value="off" >
<?php
 $t++;
 }?>
 <form method="post" action="boxes.php">
<button type="submit" name="submit"> GO! </button>  <br>

<?php
while (list($id,$value) = each($erree)) {
  echo $id.": ";
  if ($value != "")
        echo "on (".$file_erree[$id].")";
  else
        echo "off (".$file_erree[$id].")";
}
if (isset($submit)){
$k=0;
while ($k<$m)
{echo "<br>plaats $k: $erree[$k]";
 $k++;}    }


dit werkt gedeeltelijk, maar er zijn nog 2 probleempjes:
1) de plaats van de 'on' klopt niet. als ik 3 checkboxes aanzet (die niet opeenvolgend zijn), geeft hij de eerste 3 waarden uit de 'erree' als 'on' weer. De plaats is dus wel belangrijk, maar ik weet hier geen oplossing voor.

2) als ik geen checkboxes aanduid, krijg ik volgende Warning:
Warning: Variable passed to each() is not an array or object in [pad]boxes.php on line 15

ik zou graag die warning onderdrukken (of beter nog: niet hebben :))
anyone?
thx...

  • ikke007
  • Registratie: Juni 2001
  • Laatst online: 21-05 13:08
Hmm als ik het goed begrijp wil jij dat je vooraf EN achteraf een lijst kan creeren van welke er geselecteerd zijn.

dat lijkt me wel lastig omdat je alleen de waarden mee krijgt van checkboxes die je selecteerd.
Hieronder volgt mijn oplossing om weer te geven welke files(checkboxes) er geselecteerd zijn om te worden gedelete.

PHP:
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?PHP
$erree = array(1 => 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt');
?>
Delete wich?
<FORM method="post" action="boxes2.php">
    <?PHP
    foreach ($erree as $value)
    {
        echo "<INPUT TYPE="CHECKBOX" NAME="del_file[]" VALUE="".$value."">".$value."<BR>";
    }
?>

<INPUT TYPE="SUBMIT" NAME="SUBMIT" VALUE="Delete">
</FORM>

<?PHP
if (isset($SUBMIT))
{
    foreach ($del_file as $value)
    {
        echo $value." = to be deleted<BR>";
    }
}
?>


edit: Ik heb nog even zitten verder denken over een manier om ook te kunnen weer geven of een bestand niet is geselecteerd (hoewel ik het niet logisch vind maargoed u vraagt wij draaien

code is zelfde alleen submit gedeelte heb ik veranderd
PHP:
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?PHP
if (isset($SUBMIT))
{
    $teller=0;
    while(isset($del_file[$teller]))
    {
        $selected = false;//per looping selected weer false maken
        $teller2 = 0;//per looping teller2 weer 0 maken
        while (isset($del_file_checkt[$teller2]))//zolang deze cursor nog geldig is
        {
            if ($del_file[$teller] == $del_file_checkt[$teller2])//als de file ook geselecteerd is
            {
                echo $del_file[$teller] ."=selected<BR>";
                $selected = true;//hij is geselecteerd we printen nix meer ;)
            }
            $teller2++;
        }
        if ($selected == false)//blijkbaar nog niet geselecteerd
        {
                echo $del_file[$teller] ."=UNselected<BR>";
        }
        $teller++;//volgende file bekijken of deze geselecteerd is
    }
}
?>


Ik zelf vind deze manier niet zo netjes alleen.. Is er iemand die een mooiere manier heeft? (In PHP)

[ Voor 58% gewijzigd door ikke007 op 27-11-2003 19:20 . Reden: 2de optie ingevoegd ]

Lets remove all security labels and let the problem of stupidity solve itself


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

mwa, met een beetje javascript:

HTML:
1
<form method="post" action="bla.php" onsubmit="do_checkboxes(this)">


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
function do_checkboxes(form) {

  var el = form.elements;
  var i = el.length;
  while (i--) {
    if (el[i].type == 'checkbox' && el[i].checked == false) {
      el[i].value = 'no';
      el[i].checked = true;
    }
  }

}

Intentionally left blank


Verwijderd

Topicstarter
niet echt wat ik zoek... enkel PHP (men server doet nix anders :p)
mijn probleem met de plaats in de array is dus nog niet opgelost... iemand...?
toch bedankt :)

Verwijderd

Topicstarter
Gevonden!
en wel zo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$t=0;
$m=10;
while ($t<$m){?>
<form method="post" action="boxes.php">
<?php
echo"<input type=\"checkbox\" value=\"on\" name=\"erree[$t]\">";
echo"<input type=\"hidden\"  value=\"on\" name=\"file_erree[$t]\">";
$t++;
}?>
<form method="post" action="boxes.php">
<button type="submit" name="submit"> GO! </button>  <br>
<?php
$k=0;
if (isset($submit)){
while (list($id,$value) = each($erree)) {
while ($k<$m)
{echo "<br>plaats $k: $erree[$k]";
 $k++;}  }  }

thx 2 all :)

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 27 november 2003 @ 19:42:
niet echt wat ik zoek... enkel PHP (men server doet nix anders :p)
mijn probleem met de plaats in de array is dus nog niet opgelost... iemand...?
toch bedankt :)
je wou toch dat niet geselecteerde plaatjes ook in je POST-vars zou terugkomen, maar met een andere value? wel, dat kan met javascript aan de clientkant; mij maak je niet wijs dat jouw browser geen javascript kent.
Verwijderd schreef op 27 november 2003 @ 19:54:
Gevonden!
en wel zo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$t=0;
$m=10;
while ($t<$m){?>
<form method="post" action="boxes.php">
<?php
echo"<input type=\"checkbox\" value=\"on\" name=\"erree[$t]\">";
echo"<input type=\"hidden\"  value=\"on\" name=\"file_erree[$t]\">";
$t++;
}?>
<form method="post" action="boxes.php">
<button type="submit" name="submit"> GO! </button>  <br>
<?php
$k=0;
if (isset($submit)){
while (list($id,$value) = each($erree)) {
while ($k<$m)
{echo "<br>plaats $k: $erree[$k]";
 $k++;}  }  }

thx 2 all :)
dat is zowel qua HTML als qua PHP het meest ranzige stukje code dat ik ooit gezien heb en het verbaast me dat het ueberhaupt werkt :X

Intentionally left blank

Pagina: 1