Подтвердить что ты не робот

Примечание: смещение Undefined: 0 в

Я получаю эту ошибку PHP, что это значит?

Notice: Undefined offset: 0 in 
C:\xampp\htdocs\mywebsite\reddit_vote_tut\src\votes.php on line 41

Из этого кода:

<?php 
include("config.php"); 

function getAllVotes($id) 
{ 
    $votes = array(); 
    $q = "SELECT * FROM entries WHERE id = $id"; 
    $r = mysql_query($q); 
    if(mysql_num_rows($r)==1)//id found in the table 
    { 
        $row = mysql_fetch_assoc($r); 
        $votes[0] = $row['votes_up']; 
        $votes[1] = $row['votes_down']; 
    } 
    return $votes; 
} 

function getEffectiveVotes($id) 
{ 
        $votes = getAllVotes($id); 
        $effectiveVote = $votes[0] - $votes[1];    //ERROR THROWN HERE
        return $effectiveVote; 
} 

$id = $_POST['id']; 
$action = $_POST['action']; 

//get the current votes 
$cur_votes = getAllVotes($id); 

//ok, now update the votes 

if($action=='vote_up') //voting up 
{ 

    $votes_up = $cur_votes[0]+1;     //AND ERROR THROWN HERE


    $q = "UPDATE threads SET votes_up = $votes_up WHERE id = $id"; 
} 
elseif($action=='vote_down')
{ 
    $votes_down = $cur_votes[1]+1; 
    $q = "UPDATE threads SET votes_down = $votes_down WHERE id = $id"; 
} 

$r = mysql_query($q); 
if($r)
{ 
    $effectiveVote = getEffectiveVotes($id); 
    echo $effectiveVote." votes"; 
} 
elseif(!$r) //voting failed 
{ 
    echo "Failed!"; 
} 
?>
4b9b3361

Ответ 1

Вы запрашиваете значение в ключе 0 $votes. Это массив, который не содержит этот ключ.

Массив $votes не установлен, поэтому, когда PHP пытается получить доступ к ключу 0 массива, он обнаруживает неопределенное смещение для [0] и [1] и выдает ошибку.

Если у вас есть массив:

$votes = array('1','2','3');

Теперь мы можем получить доступ к:

$votes[0];
$votes[1];
$votes[2];

Если мы попытаемся получить доступ:

$votes[3];

Мы получим ошибку "Примечание: неопределенное смещение: 3"

Ответ 2

Используйте print_r($votes); для проверки массива $votes, вы увидите, что ключ 0 там не существует. Он вернет NULL и выбросит эту ошибку.

Ответ 3

Этот ответ помог мне fooobar.com/questions/168656/... Причина отказа - индекс 0 не был установлен. Простой $array = $array + array(null) сделал трюк. Или вы должны проверить, установлен ли элемент массива на индекс 0 через isset($array[0]). Второй вариант - лучший подход для меня.

Ответ 4

getAllVotes() не возвращает массив с индексами 0 или 1. Убедитесь, что он возвращает нужные данные, вызвав var_dump() результат.

Ответ 5

во-первых, проверьте, что массив действительно существует, вы можете попробовать что-то вроде

if (isset($votes)) {
   // Do bad things to the votes array
}

Ответ 6

Как объяснено, это происходит потому, что в $cur_votes[0] нет данных и, следовательно, он выдает ошибку.

Чтобы убедиться, что ваш код работает нормально, перед выполнением "$votes_up = $cur_votes[0]+1;" $cur_votes[0] значение $cur_votes[0] чтобы увидеть, сохранено ли какое-либо значение или нет.

Конечно, там не хранится значение.

Ответ 7

function getEffectiveVotes($id) 

В соответствии с заголовком функции существует только одна переменная параметра ($id). Таким образом, в строке 27 массив votes[] равен undefined и выходит за рамки. Вам нужно добавить еще один значение параметра для заголовка функции, чтобы функция getEffectiveVotes() знала, что ожидает два параметра. Я ржавый, но что-то вроде этого будет работать.

function getEffectiveVotes($id, $votes)

Я не говорю, что так должно быть сделано, но вы можете изучить, как PHP передает свои массивы и решает, нужно ли явно указывать, чтобы передать его по ссылке

function getEffectiveVotes($id &$votes)    <---I forget, no time to look it up right now.

Наконец, вызовите функцию getEffectiveVotes() с обоими аргументами, где она должна быть вызвана.

Приветствия.

Ответ 8

Если вы оставите скобки, то PHP по умолчанию назначит ключи.

Попробуйте следующее:

$votes = $row['votes_up']; 
$votes = $row['votes_down']; 

Ответ 9

Как вы могли уже знать об ошибке. Это связано с попыткой доступа к пустому массиву или для доступа к значению пустого ключа массива. В моем проекте я имею дело с этой ошибкой с подсчетом массива и отображением результата.

Вы можете сделать это следующим образом:

if(count($votes) == '0'){

    echo 'Sorry, no votes are available at the moment.';
}
else{
    //do the stuff with votes
}

count($votes) подсчитывает массив $votes. Если он равен нулю (0), вы можете отобразить свое собственное сообщение или перенаправить на определенную страницу, иначе вы можете сделать что-то с помощью $votes. Таким образом вы можете удалить Notice: Undefined offset: 0 в уведомлении в PHP.

Ответ 10

Я также столкнулся с этим, и решение простое, не кодируйте позицию индекса массива в вашем коде.
Вместо $data[0]['somekey'] делайте foreach($data as $data_item) { echo $data_item['somekey']; } foreach($data as $data_item) { echo $data_item['somekey']; }
Если существует массив или более, вы можете выполнить желаемое действие внутри цикла, но если он не определен, это не приведет к ошибке. Вы также можете добавить другие проверки поверх этого. Вы также можете добавить переменную и увеличить ее в цикле for, чтобы ограничить цикл, если вам нужны только первые позиции или что-то еще.

Ответ 11

В моем случае это был простой тип

$_SESSION['role' == 'ge']

Мне не хватало правильной закрывающей скобки

$_SESSION['role'] == 'ge'

Ответ 12

Если вы используете dompdf/dompdf и произошла ошибка в vendor/dompdf/dompdf/src/Cellmap.php, то похоже, что мы используем неверный идентификатор фрейма в методе update_row_group. Начальное тестирование, кажется, подтверждает это. Хотя это может быть связано с тем, что это проблема строго постраничных таблиц, и не слишком много документов в моем тестовом стенде имеют постраничные таблицы.

Можете ли вы попробовать изменить строку 800 на:

$ r_rows = $this-> _ frames [$ g_key] ["lines"];
($ g_key вместо $ r_key)

https://github.com/dompdf/dompdf/issues/1295

Ответ 13

его просто предупреждение:

error_reporting(0);

показывает, когда мы не инициализируем массив и не присваиваем значение индексам.

somefunction{
$raja[0]="this";
$raja[1]="that";
}

вместо:

somefunction{
$raja=array(0=>'this',1='that');
//or
$raja=array("this","that");
}

это просто уведомление, не генерирует никакой выходной ошибки или любого неожиданного вывода.