hey guys.

okay, I know how to count form values.

something like;

<?php echo count($_POST; ?> where the field would be something like field

however, I am cracking my head to get a solution to count, but only where the field has a value.

Please, someone, help me with this ;-)

I tried !isset($_POST) but it does not work :-(

8 Years
Discussion Span
Last Post by diafol

Whadda you mean Willis? You wanna know which keys are set?


I have got several text boxes in a form. when I post these textboxes, I simply just want to count / have the total of how many textboxes contains data OR how many was elft empty. thats it...

<input type="checkbox" name="monkey[]" id="clegg" />
<input type="checkbox" name="monkey[]" id="brown" />
<input type="checkbox" name="monkey[]" id="cameron" />

these create a form field array

Get the count via:

Votes + Comments
LOL - excellent topical naming :)

No, it is textfields, not checkboxes. Checkboxes acts totally different than to other fields. Managing and extracting data from checkboxes is easy.

However, I got a solution.

Basically, all I wanted is to have a total in regards to how many textboxes contains data, after form submittal. But it is far more complex than I thought. Exactly 15 hours and 48 minutes of constant working, I got it working. I have search the entire net, and no where I could find a proper solution. My only solution was to physically puzzle it out. Change lines of code, move lines, and try every possible count.

Somewhere on a post I ready something about someone who asked about a SQL statement containing "IN (xxx,xxx)" but noboy could give more clarity on that. I also realised that if I want to achieve something that I have never done before (yes I did many checkboxes but as said, thats something totally different) - then I will need to try something that I have never tried before.

All I can say is that it was kinda torture and hard work, but, the end result was worth it. And I am sharing, for if someone would be in the same situation.

Here it is:

foreach ($_POST as $key => $value)
if ($value != '')
	$finale = count(array_keys($_POST, ""));
$finalevalue = (count($_POST)-$finale)-2;

I used minus two, because I am not posting the textboxes only, but two other values too.
You can, however, use a loop and post the data as $_POST[$i] instead. I did that during testing but my form required more complex detail.

So basically, to get the total textboxes containing values, I take the total values posted, and minus it with the empty values.

Then - the reason why I needed this, is because it am building a filter application for some site. So I'll post my SQL statement here too, but not going to elaborate too much, because its not relevant.

foreach ($_POST as $key => $value)
if ($value != '')
	$finale = count(array_keys($_POST, ""));
$finalevalue = (count($_POST)-$finale)-2;
if (!isset($_POST['f1'])) { $f1 = ''; } else if ($_POST['f1'] != 'All') { $f1 = "'".$_POST['f1']."',"; } else $f1 = '';
if (!isset($_POST['f2'])) { $f2 = ''; } else if ($_POST['f2'] != 'All') { $f2 = "'".$_POST['f2']."',"; } else $f2 = '';

("SELECT * FROM item RIGHT JOIN itemfield ON (item.adID = itemfield.adID) WHERE Status = 'Active' AND item.catID = %s AND FieldValue IN (".$f1."".$f2.") GROUP BY item.adID HAVING COUNT(FieldValue)=".$finalevalue." ORDER BY item.itemID DESC", GetSQLValueString($colname_listads, "int"));

f1/f2 is form values, used with a loop. So in truth its something like input name = "f<?php echo $i; ?>"
Then, I join my item with my itemfields, cause the itemfield column containst the itemID too.

Then this part : FieldValue IN (".$f1."".$f2.")

Why this? This is weird, but apparently you cannot do this : WHERE FieldValue = 'valueone' AND FieldValue = 'valuetwo' AND FieldValue = 'valuethree'. I dont know why, but instead one must use the "IN" method. Its jsut strange, because when I work with times or dates or prices, I can do something like "WHERE Price <= 100 AND Price >= 1000" - well something like that. And it works, but I guess it is because I used a join fucntion and/or group by, thats why it did not work.

Nevertheless, it feels like as if it took me a million years and loads of energy to crack.

Hope I could've helped someone at least.


forgot to mention; I used GROUP BY to eliminate duplicate entries as a result from the JOIN statement.


I know the thread is solved - sorry missed the 'textbox' bit.

I didn't really follow what you're trying to do, but you can use a similar concept to the checkbox solution:

<input type="text" name="monkey['clegg']" id="clegg" value="" />
<input type="text" name="monkey['brown']" id="brown" value="" />
<input type="text" name="monkey['cameron']" id="cameron" value="" />

Check the $_POST array for specific data. If what you want, add the key as the fieldname (or whatever you're trying to do) and the value to the SQL.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.