Solved

PHP list checkboxes - some checked some unchecked

Posted on 2009-03-30
10
854 Views
Last Modified: 2013-12-12
I am writing a php function to list all categories stored in a mysql database as checkboxes. It is used as part of an update function so i need to display some of the checkboxes as "checked" and some as "unchecked" depending on values in the database. Below is the code i have come up with. It lists all the categories successfully but only ticks one text box even if the item belongs to multiple categories. The arrays hold the correct values I just cant figure out how to check the boxes.

In short i need to display all items in $data as checkboxes, checking all those items that are also present in $data2
function getAllCategoriesCheckedCheckbox($clientID)
{
	$data = mysql_query("SELECT * FROM Category")
    or die(mysql_error()); 
	$data2 = mysql_query("SELECT Category.categoryID FROM ClientCategory, Category WHERE ClientCategory.clientID = $clientID AND ClientCategory.categoryID = Category.categoryID")
    or die(mysql_error()); 
	
	$c = 1;
    
	//categories that should be checked array
    $clientCategories = mysql_fetch_array($data2);
	
	//all categories array
	while($categories = mysql_fetch_array($data))
    {
			if (in_array($categories['categoryID'], $clientCategories, true)) {
    			echo $c.'a<input name="category[]" id="category'.$c.'" value="'.$c.'" type="checkbox" checked="checked" /><span>'.$categories['categoryName']."</span><br />\n";
			}
			else {
				echo $c.'b<input name="category[]" id="category'.$c.'" value="'.$c.'" type="checkbox" /><span>'.$categories['categoryName']."</span><br />\n";
			}
			$c++;	
	}
}

Open in new window

0
Comment
Question by:somerider
  • 6
  • 3
10 Comments
 
LVL 5

Expert Comment

by:allmer
ID: 24026019
echo $c.'a<input name="category[]" id="category'.$c.'" value="'.$c.'" type="checkbox" checked /><span>'.$categories['categoryName']."</span><br />\n";

Shouldn't category[] contain an index? (e.g.: category[$i])
Otherwise there may be conflicts with checkboxes named alike. Which will then make them all checked/ unchecked depending on the last checkbox being created.
This could be your problem.
I usually use just checked instead of checked="checked" and it works fine in these situations.
HTH
Jens


0
 
LVL 1

Author Comment

by:somerider
ID: 24034866
Thanks for trying but giving each checkbox an index did not help. It is still ticking only one item even if more than one IDs are in the $clientCategory array.

Any help appreciated....im tearing my hair out.
0
 
LVL 5

Expert Comment

by:allmer
ID: 24036314
Which item is checked exactly?
Can you post the part ot the code including the index again?
0
Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

 
LVL 1

Author Comment

by:somerider
ID: 24036373
It is ticking the first item listed in the $clientCategories array. Here is the code again. Sorry about the formatting. It looks far nicer in DW.

Heres an example....

$clientCategories contains:
2
3
4
12

$categories contains:
1 Web Sites
 2 Graphic Design
 3 Banking, Finance & Insurance
 4 Building, Property & Landscaping
 5 Retail & Services
 6 Technology, Engineering, Manufacturing & Automotive
 7 Education & Learning
 8 Medical & Scientific
 9 Sporting & Recreational
 10 Government, Community & Charities
 11 Flash Animation
 12 Logo Design

OUTPUT:
A checkbox is outputted for each of the $categories array items
Only item 2 checkbox is checked. I need item 2, 3 ,4 ,12 to be ticked.

Its almost like if (in_array($categories['categoryID'], $clientCategories, true)) is only returning true on the first pass.

Stumped! Im sure theres a very obvious solution

function getAllCategoriesCheckedCheckbox($clientID)
{
    
	$data = mysql_query("SELECT * FROM Category")or die("<p class=\"red\">An Error occurred.</p><p>".mysql_error()."</p>"); 
	$data2 = mysql_query("SELECT Category.categoryID FROM ClientCategory, Category WHERE ClientCategory.clientID = $clientID AND ClientCategory.categoryID = Category.categoryID")or die("<p class=\"red\">An Error occurred.</p><p>".mysql_error()."</p>"); 
	
	$c = 1;
    
	//categories that should be checked array
    $clientCategories = mysql_fetch_array($data2);
	
	//all categories array
	while($categories = mysql_fetch_array($data))
    {
			if (in_array($categories['categoryID'], $clientCategories, true)) {
    			echo $c.'a<input name="category['.$c.']" value="'.$c.'" type="checkbox" checked="checked" /><span>'.$categories['categoryName']."</span><br />\n";
			}
			else {
				echo $c.'b<input name="category['.$c.']" value="'.$c.'" type="checkbox" /><span>'.$categories['categoryName']."</span><br />\n";
			}
			$c++;	
	}
}

Open in new window

0
 
LVL 5

Expert Comment

by:allmer
ID: 24036521
Is there ever?
$clientCategories may not contain data in the format that you expect.

Could you replace the app. section of your code with the code below to find out about it?
echo"<pre>";
print_r($clientCategories);
print_r($categories);
echo"</pre>";
if (in_array($categories['categoryID'], $clientCategories)) {
    echo $c.'a<input name="category[$c]" value="$c" type="checkbox" checked="checked" /><span>'.$categories['categoryName']."</span><br />\n";
}
else {
    echo $c.'b<input name="category[$c]" value="$c" type="checkbox" /><span>'.$categories['categoryName']."</span><br />\n";
}
$c++;	

Open in new window

0
 
LVL 5

Expert Comment

by:allmer
ID: 24036617
Here is what I meant
function getAllCategoriesCheckedCheckbox($clientID)
{
    
	$data = mysql_query("SELECT * FROM Category")or die("<p class=\"red\">An Error occurred.</p><p>".mysql_error()."</p>"); 
	$data2 = mysql_query("SELECT Category.categoryID FROM ClientCategory, Category WHERE ClientCategory.clientID = $clientID AND ClientCategory.categoryID = Category.categoryID")or die("<p class=\"red\">An Error occurred.</p><p>".mysql_error()."</p>"); 
	
	$c = 1;
    
	//categories that should be checked array
    $clientCategories = mysql_fetch_array($data2);
echo"<pre>";
print_r($clientCategories);	
	//all categories array
	while($categories = mysql_fetch_array($data))
    {
print_r($categories);
echo"</pre>";
if (in_array($categories['categoryID'], $clientCategories)) {
    echo $c.'a<input name="category[$c]" value="$c" type="checkbox" checked="checked" /><span>'.$categories['categoryName']."</span><br />\n";
}
else {
    echo $c.'b<input name="category[$c]" value="$c" type="checkbox" /><span>'.$categories['categoryName']."</span><br />\n";
}
$c++;	
	}
}

Open in new window

0
 
LVL 5

Accepted Solution

by:
allmer earned 250 total points
ID: 24036951
Just came to my attention:
$clientCategories = mysql_fetch_array($data2);
it seems you are only retrieving the first row from the result set.
Try:
$clientCategories = array();
$i = 0;
while($tmp= mysql_fetch_array($data2)) {
    $clientCategories[$i++] = $tmp; // or $tmp[0];
}
instead of
$clientCategories = mysql_fetch_array($data2);
0
 
LVL 5

Expert Comment

by:allmer
ID: 24234771
I believe the question has been answered successfully
0
 
LVL 1

Author Closing Comment

by:somerider
ID: 31564697
Thanks for the help and sorry for the delayed response. you certainly helped but I ended up rewriting the whole section in a different way. Cheers
0

Featured Post

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Popularity Can Be Measured Sometimes we deal with questions of popularity, and we need a way to collect opinions from our clients.  This article shows a simple teaching example of how we might elect a favorite color by letting our clients vote for …
Introduction HTML checkboxes provide the perfect way for a web developer to receive client input when the client's options might be none, one or many.  But the PHP code for processing the checkboxes can be confusing at first.  What if a checkbox is…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

776 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question