tags:

views:

63

answers:

4

I'm trying to check if the checkbox has been checked and display the check mark for the user to see when they check there account settings. I want to know how can I fix this problem using PHP so that the check mark is displayed every time the user views their account settings?

Here is the HTML.

<input type="checkbox" name="privacy_policy" id="privacy_policy" value="yes" />
A: 

Do you mean which attribute do you set so that the checkbox is checked?

<input type="checkbox" name="privacy_policy" id="privacy_policy" value="yes" checked="checked" />

EDIT: What I would do, is bind some code to the checkbox's click event (using a library like jQuery), like the following:

$(document).ready(function() {
    $("#privacy_policy").click(function() {

        // block the checkbox
        $(this).attr("disabled", "disabled");
        var checked = 0;
        if($(this).is(":checked")) {
            checked = 1;
        }

        // send the checked state to PHP script
        // if the update has been successful, the script echos a '1'
        $.post('account.php', { checked: checked, function(resp) {

            // update has been successful
            if(resp == 1) {

                // unblock the checkbox, the current 
                // checked state reflects the stored value
                $(this).removeAttr("disabled");
            } else {
                alert("settings could not be updated");
            }
        });

    });
});

That will handle the real-time manipulating of that particular option's setting every time the checkbox is clicked. (I think that's what you meant, anyway). You just need to act on the $_POST['checked'] variable internally.

To set up the initial state of the checkbox based on a stored value (the first time the page loads), just use short tags, e.g.:

<?php
$isChecked = $_SESSION['someSetting']; // 1 or 0, for example
?>
<input type="checkbox" name="privacy_policy" id="privacy_policy" value="yes" <?php if($isChecked) echo 'checked="checked"'; ?>/>
karim79
I want to display the check mark only when the user checks and then display it all the time until the user unchecks it.
BeepU
Did you want it to always appear when the user is on your site, i.e. a check-mark for a particular preference? In that case, you need a way to have it saved for a particular user's preference.
Anthony Forloney
A: 

I'm not entirely sure what your question is. If you know in PHP whether the checkbox should be checked, you can do something like

echo '<input type="checkbox" name="privacy_policy" id="privacy_policy" value="yes"';
if ($somevar) echo ' checked="checked" ';
echo ' />';

This will make the checkbox default to being checked if $somevar is true.

David
A: 
<?php
    $checked = $someBoolean ? ' checked="checked"' : '';
?>
<input type="checkbox" name="privacy_policy" id="privacy_policy" value="yes"<?php echo $checked; ?> />

Where $someBoolean holds a boolean (true/false) value whether it was checked before or not (value retrieved from a database for instance).

If true it will result in:

<input type="checkbox" name="privacy_policy" id="privacy_policy" value="yes" checked="checked" />

else:

<input type="checkbox" name="privacy_policy" id="privacy_policy" value="yes" />
fireeyedboy
A: 

I assume you have the user's settings stored in a database of some description. Assuming this is MYSQL do the following:

$query = "
    SELECT privacy_policy FROM user_settings WHERE user_id = $user_id
    ";
$result = mysql_query($query);
$user_settings = mysql_fetch_assoc($result);

This assumes that the information is stored a column called "privacy_policy" in a table called user_settings and that you already know the $user_id. The privacy policy setting is now held in $user_settings['privacy_policy']. I'm also assuming that it is a boolean where true means you want it checked and false means you don't want it checked.

You might also instead be getting the setting from a user input, such as after just changing the variable. In this case, just find the variable in your $_POST or $_GET e.g. $_POST['privacy_policy'] and continue with that variable instead.

So now do the following:

if($user_settings['privacy_policy']) $checked = "checked='checked'"; else $checked = ''; echo "';

If $user_sesstings['privacy_policy'] is true, $checked will be set and echoed along with the rest of the checkbox. Otherwise, the checkbox will be echoed without the attribute and so will be unchecked.

Rupert