Примечание: смещение 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!";
}
?>
Ответы
Ответ 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");
}
это просто уведомление, не генерирует никакой выходной ошибки или любого неожиданного вывода.