Я получаю эту ошибку 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!"; } ?>
в<?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!"; } ?>
Вы запрашиваете значение в ключе 0
из $votes
. Это массив, который не содержит этого ключа.
Массив $votes
не задан, поэтому, когда PHP пытается получить доступ к ключу 0
массива, он встречает неопределенное смещение для [0] и [1] и выдает ошибку.
Если у вас есть массив:
$new_array = array('1','2','3');
Теперь мы можем получить доступ:
$new_array[0]; $new_array[1]; $new_array[2];
Если мы попытаемся получить доступ:
$new_array[3];
Мы получим сообщение об ошибке «Примечание: Неопределенное смещение: 3»
Использовать print_r($votes);
для проверки массива $votes
вы увидите, что ключ 0
там не существует. Он вернет NULL и выбросит эту ошибку.
getAllVotes()
не возвращает массив с индексами 0
или 1
. Убедитесь, что он возвращает var_dump()
данные, вызывая var_dump()
в результате.
во-первых, убедитесь, что массив существует, вы можете попробовать что-то вроде
if (isset($$votes)) { // Do bad things to the votes array }
Как объясняется, это происходит из-за отсутствия данных в $ cur_votes [0], и, следовательно, это порождает ошибку. Чтобы убедиться, что ваш код работает нормально, перед выполнением «$ vote_up = $ cur_votes [0] +1;» echo значение $ cur_votes [0], чтобы увидеть, есть ли какое-либо значение, сохраненное или нет. Разумеется, ценность не сохраняется.
function getEffectiveVotes($id)
Согласно заголовку функции существует только одна переменная параметра ( $id
). Таким образом, в строке 27 массив votes[]
не определен и выходит за рамки. Вам нужно добавить другое значение параметра в заголовок функции, чтобы функция getEffectiveVotes()
знала, что ожидает два параметра. Я ржавый, но что-то вроде этого будет работать.
function getEffectiveVotes($id, $votes)
Я не говорю, что так должно быть сделано, но вам может понадобиться исследование того, как PHP передает свои массивы и решает, нужно ли явно указывать, чтобы передать его по ссылке
function getEffectiveVotes($id &$votes) <---I forget, no time to look it up right now.
Наконец, вызовите функцию getEffectiveVotes()
с обоими аргументами, где она должна быть вызвана.
Приветствия.
Этот ответ помог мне https://stackoverflow.com/a/18880670/1821607 Причина отказа – индекс 0 не был установлен. Простой $array = $array + array(null)
сделал трюк. Или вы должны проверить, установлен ли элемент массива в индексе 0 через isset($array[0])
. Второй вариант – лучший подход для меня.
Если вы оставите скобки, то PHP по умолчанию назначит ключи.
Попробуй это:
$votes = $row['votes_up']; $votes = $row['votes_down'];
это просто предупреждение:
error_reporting(0);
он показывает, когда мы не инициализируем массив и не присваиваем значение индексам.
somefunction{ $raja[0]="this"; $raja[1]="that"; }
вместо этого:
somefunction{ $raja=array(0=>'this',1='that'); //or $raja=array("this","that"); }
это просто уведомление, не генерирует никакой выходной ошибки или какого-либо неожиданного вывода.
Как вы могли уже знать об ошибке. Это связано с попыткой доступа к пустому массиву или для доступа к значению пустого ключа массива. В моем проекте я имею дело с этой ошибкой с подсчетом массива и отображением результата.
Вы можете сделать это следующим образом:
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.