|
Posted by Michael Vilain on 11/13/06 08:36
In article <dbS5h.855$J32.437@read1.cgocable.net>,
Amer Neely <perl4hire@softouch.on.ca> wrote:
> Jerry Stuckle wrote:
> > Amer Neely wrote:
> >> Jerry Stuckle wrote:
> >>
> >>> Amer Neely wrote:
> >>>
> >>>> Jerry Stuckle wrote:
> >>>>
> >>>>> Amer Neely wrote:
> >>>>>
> >>>>>> flamer die.spam@hotmail.com wrote:
> >>>>>>
> >>>>>>> Amer Neely wrote:
> >>>>>>>
> >>>>>>>> I've got a dynamically built form with checkboxes for each
> >>>>>>>> element ( a
> >>>>>>>> list of file names in a directory). I need to grab only those
> >>>>>>>> checkboxes
> >>>>>>>> that are checked, so I can then delete those files.
> >>>>>>>>
> >>>>>>>> Does each checkbox name have to be unique? I was hoping to just
> >>>>>>>> group
> >>>>>>>> them under one name, and select from that array.
> >>>>>>>>
> >>>>>>>> PHP is not my native language - I'm coming at this from Perl, so
> >>>>>>>> bear
> >>>>>>>> with me, things are a little different in that country.
> >>>>>>>>
> >>>>>>>> I've tried:
> >>>>>>>> foreach ($_REQUEST as $field => $value)
> >>>>>>>> {
> >>>>>>>> echo "$field = $value<br>";
> >>>>>>>> }
> >>>>>>>> but that just grabs the last entry in the group.
> >>>>>>>>
> >>>>>>>> The line in question is:
> >>>>>>>> <input type="checkbox" name="DeleteThis" value="<?php
> >>>>>>>> echo("$allfiles[$i]")?>"> <?php echo("$allfiles[$i]")?><br>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> in html, if your checkbox is called "blah123" then when its
> >>>>>>> checked it
> >>>>>>> will have the variable name of blah123 with a value of blah123,
> >>>>>>> if it
> >>>>>>> is unchecked then blah123==null. the easy way is:
> >>>>>>>
> >>>>>>> if (!empty($_POST['blah123'])) { do stuff }
> >>>>>>>
> >>>>>>> Flamer.
> >>>>>>>
> >>>>>>
> >>>>>> Hmmm. OK, so I will need to also walk through each of the new
> >>>>>> input names, and check them with the 'empty' function. I'll work
> >>>>>> on that. Thanks.
> >>>>>>
> >>>>>>
> >>>>>
> >>>>> Amer,
> >>>>>
> >>>>> No. It's much easier than that. Have all the checkboxes names the
> >>>>> same, with square brackets ( "[]" ) following. The you will be
> >>>>> able to use an array on the PHP side, i.e.
> >>>>>
> >>>>>
> >>>>> <input type="checkbox" name="DeleteThis[]" value="<?php
> >>>>> echo("$allfiles[$i]")?>"> <?php echo("$allfiles[$i]")?><br>>
> >>>>>
> >>>>>
> >>>>> To process the input, all you need is:
> >>>>>
> >>>>> foreach ($_POST['DeleteThis'] as $delfile) {
> >>>>> // Validate the filename is OK here
> >>>>> unlink $delfile;
> >>>>> }
> >>>>>
> >>>>> This will work whether the checkbox is set via a mouse click or
> >>>>> javascript.
> >>>>>
> >>>>> Of course, you will want to validate your filenames. That part I
> >>>>> left out because I have no idea what the criteria is.
> >>>>>
> >>>>
> >>>> OK, I have your code inserted, but it gives me an error when I use
> >>>> my 'Select All' JS:
> >>>>
> >>>> Warning: Invalid argument supplied for foreach() in show_spam4.php
> >>>> on line 116
> >>>>
> >>>> If I click any box with the mouse it returns 'on' for the output.
> >>>>
> >>>> [116] foreach ($_POST['DeleteThis'] as $value)
> >>>> {
> >>>> echo "$value<br>";
> >>>> }
> >>>>
> >>>
> >>> Amer,
> >>>
> >>> I didn't mean for that to be the only code. Rather it was a guide to
> >>> get you going in the right direction.
> >>>
> >>> The invalid argument is probably because none of the checkboxes are
> >>> checked, so you're not getting anything in your PHP code. To make
> >>> sure you're getting good information, check out isset() and isarray()
> >>> functions.
> >>>
> >>
> >> :) Sorry, I'm new with PHP so everything is literal. But as I
> >> mentioned, if I check all the boxes with JS, and submit the form, it
> >> throws that error. I'm going to do some reading and see what I can
> >> come up with. Thanks for the input and direction so far.
> >>
> >
> > I would suggest your javascript isn't doing it's job. When I check
> > boxes with js the do appear in PHP.
> >
>
> That isn't the problem - they appear just fine in the page. I can toggle
> them off and on all night.
>
> It's only when the page is submitted that the values don't seem to be
> getting through.
This is normal and expected behavior. If a checkbox isn't checked, it's
value is not reported. There's no way around that--it's just the way it
works. You'll have to code around it.
--
DeeDee, don't press that button! DeeDee! NO! Dee...
Navigation:
[Reply to this message]
|