2013-10-09 2 views
0

Я пытаюсь создать форум с нуля, и я немного запутался. В следующем коде я пытаюсь поставить условие, что, если пользователь не вошел в систему, он не может добавить категорию. Тем не менее, код работает отлично, если пользователь зарегистрирован, но я получаю «неопределенный индекс: userid, если он не является. Я попытался добавить if(isset($_SESSION['userid'])), но это просто скроет уведомление« вы должны быть подписаны ». ?получил запутанное уведомление о индексе с индексом

<?php 

include("_/inc/dbcon.php"); 
    $link = mysql_connect($host, $login, $pw); 
    mysql_select_db($database); 
    if($link){ 
    } 
include("_/inc/session_handler.php"); 
$create_cat =""; 
if($_SESSION['userid'] == false /*| $_SESSION['rank'] !='Emperor' || $_SESSION['rank'] !='Destroyer' || $_SESSION['rank']!= 'Tekken Lord')*/) 
{ 
    //the user is not an admin 
    echo 'Sorry, you do not have sufficient rights to access this page.'; 
} 
else 
{ 
    //the user has admin rights 
    if($_SERVER['REQUEST_METHOD'] != 'POST') 
    { echo "YOU HAVE THE RIGHTS!"; 
     //the form hasn't been posted yet, display it 

     $create_cat .= '<form method="post" action=""> 
      <input type="text" name="cat_name" placeholder="Category Name"/><br /> 
      <input type="text" name="cat_description" placeholder="Category Description" /><br /> 
      <input type="submit" value="Add category" /> 
     </form>'; 
    } 
    else 
    { 
     //the form has been posted, so save it 
     $sql = "INSERT INTO sp_categories(cat_name, cat_description) 
      VALUES('" . mysql_real_escape_string($_POST['cat_name']) . "', 
       '" . mysql_real_escape_string($_POST['cat_description']) . "')"; 
     $result = mysql_query($sql); 
     if(!$result) 
     { 
      //something went wrong, display the error 
      echo 'Error' . mysql_error(); 
     } 
     else 
     { 
      $create_cat .= 'New category succesfully added.'; 
     } 
    } 
} 

?> 
+0

НИКОГДА не используйте функции mysql_. Они устарели по какой-то причине. используйте [mysqli] (http://php.net/manual/en/book.mysqli.php) или [PDO] (http://php.net/manual/en/book.pdo.php). – euantorano

+0

Возможный дубликат [PHP: «Примечание: неопределенная переменная» и «Примечание: Неопределенный индекс»] (http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index) – halfer

+0

Посмотрите на боковую панель 'Related' здесь' ------> '. Множество повторяющихся вопросов ':)'. Пожалуйста, всегда делайте поиск, прежде чем спрашивать - это тоже сэкономит вам время! – halfer

ответ

0

ошибке не определен индекса выдается, когда вы пытаетесь вызвать индекс массива, если он не определен.
Например:

// Define an array with a few keys and values... 
$data = array(
    'vehicle' => "car", 
    'color' => "red", 
); 
echo $data['size']; // This line will issue an undefined index error... 

... потому что индекс размер не существующий ключ.

Всегда проверять наличие ключа в массиве, прежде чем пытаться назвать это:

if (isset($_SESSION['userid']) && $_SESSION['userid'] === false) 

PS: Я заметил, что вы используете mysql_* функции, которые являются устаревшими. Вместо этого попробуйте использовать PDO.

+0

это было о нем. просто я должен был сказать! ISSET. Большое спасибо :) –

0

Если вы действительно уверены, что ваш код работает (даже если это плохой пример), используйте error_reporting(E_ERROR); удалить уведомления.

Или, возможно, вы использовали isset() в неправильном месте.

0

Вы получаете неопределенную ошибку индекса, когда вы смотрите в массив для ключа, которого не существует. Попробуйте u петь array_key_exists: http://php.net/manual/en/function.array-key-exists.php

if (!array_key_exists('userid', $_SESSION)) {} 

Надеется, что это помогает

Смежные вопросы