Solved

PHP list checkboxes - some checked some unchecked

Posted on 2009-03-30
10
848 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
 
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
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

These days socially coordinated efforts have turned into a critical requirement for enterprises.
Password hashing is better than message digests or encryption, and you should be using it instead of message digests or encryption.  Find out why and how in this article, which supplements the original article on PHP Client Registration, Login, Logo…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
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 …

758 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

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now