注意: 未定义偏移量: 0 in

我得到这个 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!";
}
?>
421661 次浏览

getAllVotes()没有返回索引为 01的数组。通过对结果调用 var_dump(),确保它正在返回所需的数据。

您要求的值位于 $votes的键 0处。它是一个不包含该键的数组。

没有设置数组 $votes,因此当 PHP 试图访问数组的键 0时,它会遇到[0]和[1]的未定义偏移量,并抛出错误。

如果你有一个数组:

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

我们现在可以进入:

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

如果我们尝试访问:

$votes[3];

我们将得到错误“注意: 未定义偏移量: 3”

使用 print_r($votes);检查数组 $votes,您将看到键 0不存在。它将返回 NULL 并抛出该错误。

正如解释的那样,这是因为在 $cur_votes[0]中没有数据,因此它抛出一个错误。

为了确保代码工作正常,在执行 "$votes_up = $cur_votes[0]+1;"之前回显 $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(),不管它应该在哪里被调用。

干杯。

首先,检查数组是否存在,您可以尝试

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

这只是一个警告:

error_reporting(0);

它显示当我们不初始化数组和直接赋值给索引。

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

取而代之的是:

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

它只是通知,不会产生任何输出错误或任何意外的输出。

如果省略括号,PHP 将默认分配键。

试试这个:

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

这个答案帮助我找到了 https://stackoverflow.com/a/18880670/1821607 挤压的原因ーー没有设置索引0。简单的 $array = $array + array(null)就行了。或者您应该检查索引0上的数组元素是否通过 isset($array[0])设置。第二种变体对我来说是最好的方法。

你可能已经知道这个错误了。这是由于尝试访问空数组或尝试访问数组的空键的值。在我的项目中,我正在处理这个错误,计算数组和显示结果。

你可以这样做:

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


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

count($votes)计数 $votes数组。如果它等于零 (0),您可以显示您的自定义消息或重定向到某个页面,否则您可以做与 $votes的东西。通过这种方式,您可以在 PHP 中删除通知中的 Notice: Undefined offset: 0

我也遇到了这个问题,解决方案很简单,不要硬编码的数组索引位置在您的代码。
而不是 $data[0]['somekey'] Foreach ($data as $data _ item) { Echo $data _ item [‘ somkey’] ; } < br > 如果有一个或多个数组,您可以在循环中执行所需的操作,但是如果它未定义,则不会产生错误。您还可以在此基础上添加其他检查。 您还可以添加一个变量,并在 for 循环中增量它,以限制您的循环,如果您只想要第一个位置或其他。

对我来说,这是一个简单的类型

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

我错过了正确的结束括号

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

如果您正在使用 dompdf/dompdf,并且在供应商/dompdf/dompdf/src/Cellmap.php 中出现错误,则 看起来我们在 update _ row _ group 方法中使用了错误的帧 ID。初步测试似乎证实了这一点。尽管这可能是因为这是一个严格的分页表问题,并且在我的测试平台中没有太多的文档具有分页表。

你能试着把第800行改成:

$r _ rows = $this-> _ frame [ $g _ key ][“ rows”] ;
($g _ key 而不是 $r _ key)

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

使用 mysql row 代替

Mysql _ get _ row ($r)

同时考虑使用 mysqli 或 PDO

?>

尝试使用命令 php artisan db:seed播种数据。