2010-04-08 80 views
1

我得到以下錯誤on line 8: Undefined index: privacy_policy這是$privacy_policy = mysqli_real_escape_string($mysqli, $_POST['privacy_policy']);我想知道如何解決這個問題?PHP錯誤問題

這裏是線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> 
+0

除非你有一個非常奇怪的PHP安裝,8號線不應該是隱私政策。我爲什麼這麼說?因爲需要在文件中有一個'<?'或'<?php',這可能在它自己的行上。 – Powerlord 2010-04-08 14:24:32

+0

你能指出第8行嗎?我沒有看到你提供的代碼中的任何地方引用了「real_name」。 – thetaiko 2010-04-08 14:24:41

回答

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']); 
} 
+0

但是如果我想在提交表單時取消選中複選框會怎麼樣? – TaG 2010-04-08 14:38:32

+0

我已經更新了我的答案,希望對此有所幫助。 – 2010-04-08 14:42:50

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> 

編輯: 馬特艾倫還正確地指出,你可以檢查,看看$_POST['privacy_policy']使用isset()array_key_exists()設置,並設置在PHP默認爲好。

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

這真的沒有用?當我取消選中複選框時,它會保留複選框。 – TaG 2010-04-08 14:39:38

+0

對不起,我沒有真正看過它而複製了你的HTML。再試一次。 – thetaiko 2010-04-08 14:47:44