PHP错误问题

时间:2010-04-08 14:18:05

标签: php mysql

我收到以下错误on line 8: Undefined index: privacy_policy $privacy_policy = mysqli_real_escape_string($mysqli, $_POST['privacy_policy']);我想知道如何解决此问题?

这是第8行。

$privacy_policy = mysqli_real_escape_string($mysqli, $_POST['privacy_policy']);

这是PHP。

if (isset($_POST['submitted'])) {

$mysqli = mysqli_connect("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT users.*
                             FROM users 
                             WHERE user_id=3");

$privacy_policy = mysqli_real_escape_string($mysqli, $_POST['privacy_policy']);

    if (mysqli_num_rows($dbc) == 0) {
            $mysqli = mysqli_connect("localhost", "root", "", "sitename");
            $dbc = mysqli_query($mysqli,"INSERT INTO users (user_id, privacy_policy) 
                                         VALUES ('$user_id', '$privacy_policy')");
    }


    if ($dbc == TRUE) {
            $dbc = mysqli_query($mysqli,"UPDATE users 
                                         SET privacy_policy = '$privacy_policy' 
                                         WHERE user_id = '$user_id'");

            echo '<p class="changes-saved">Your changes have been saved!</p>';

    }


    if (!$dbc) {
            print mysqli_error($mysqli);
            return;
    }

}

这是HTML。

<form method="post" action="index.php">
    <fieldset>
        <ul>
            <li><input type="checkbox" name="privacy_policy" id="privacy_policy" value="yes" <?php if (isset($_POST['privacy_policy'])) { echo 'checked="checked"'; } else if($privacy_policy == "yes") { echo 'checked="checked"'; } ?> /></li>

            <li><input type="submit" name="submit" value="Save Changes" class="save-button" />
                <input type="hidden" name="submitted" value="true" />
            <input type="submit" name="submit" value="Preview Changes" class="preview-changes-button" /></li>
            </ul>
    </fieldset>
</form>

2 个答案:

答案 0 :(得分:4)

如果警告说$_POST['privacy_policy']未定义,那么(几乎)无疑是真的。

您的隐私权政策值来自一个复选框,如果在您提交表单时取消选中该复选框,则$_POST数组中不会有任何条目。如果在您提交表单时进行了检查,那么$_POST['privacy_policy']中的值将为yes

在将$_POST['privacy_policy']中的值分配给某个内容之前,请检查它是否已设置为isset。这将阻止您的警告出现。

更新

我会处理一个未经检查的复选框,如下所示:

$privacy_policy = "no";
if(isset($_POST['privacy_policy']))
{
    $privacy_policy = mysqli_real_escape_string($mysqli, $_POST['privacy_policy']);
}

答案 1 :(得分:1)

如果未选中“privacy_policy”复选框,请添加具有默认值的隐藏字段。然后$ _POST变量将包含一个值。选中该复选框后,它将覆盖隐藏字段的值(只要它跟在隐藏字段后面)。

<form method="post" action="index.php">
<!-- add a default value for the privacy_policy -->
<input type="hidden" name="privacy_policy" value="no"/>
    <fieldset>
        <ul>
            <li><input type="checkbox" name="privacy_policy" id="privacy_policy" value="yes" <?php if($privacy_policy == "yes") { echo 'checked="checked"'; } ?> /></li>
            <li><input type="submit" name="submit" value="Save Changes" class="save-button" />
                <input type="hidden" name="submitted" value="true" />
            <input type="submit" name="submit" value="Preview Changes" class="preview-changes-button" /></li>
            </ul>
    </fieldset>
</form>

编辑: 正如Matt Ellen也正确指出的那样,您可以查看使用$_POST['privacy_policy']isset()设置array_key_exists()并在PHP中设置默认值。

$privacy_policy = array_key_exists('privacy_policy', $_POST) ? $_POST['privacy_policy'] : false;