PHP hata sorun

2 Cevap php

Ben şu hatayı alıyorum on line 8: Undefined index: privacy_policy ki $privacy_policy = mysqli_real_escape_string($mysqli, $_POST['privacy_policy']); Ben bu sorunu nasıl çözebilirsiniz merak edilir?

İşte çizgi 8'dir.

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

İşte 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;
    }

}

İşte 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 Cevap

Uyarı $_POST['privacy_policy'] tanımlanmamış olduğunu söylüyor ise o (neredeyse) şüphesiz doğrudur.

Gizlilik politikası değer bir onay kutusu geliyor ve formu gönderdiğinizde onay kutusu işaretli ise, o $_POST dizide bunun için herhangi bir giriş olacaktır. Eğer $_POST['privacy_policy'] olacak içinde değeri daha sonra formu göndermek zaman işaretli ise yes.

Eğer bir şey için $_POST['privacy_policy'] değerini atayın önce, isset ile ayarlanmış olduğunu kontrol edin. Bu görünmesini de uyarı durur.

update

Ben böyle bir denetlenmeyen onay kutusu ile anlaşma olacaktır:

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

"Privacy_policy" onay kutusu seçili değilse, varsayılan değeri ile gizli bir alan ekleyin. Sonra $ _POST değişkeni bir değer içerir. Onay kutusu seçildiğinde, bu (sürece gizli alanını aşağıdaki gibi) gizli alanın değerini geçersiz kılar.

<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>

EDIT: As Matt Ellen also correctly points out, you can check to see that $_POST['privacy_policy'] is set using isset() or array_key_exists() and set a default in the PHP as well.

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