注意:未定义的偏移量:0英寸

lou*_*e18 58 html php

我收到这个PHP错误,这是什么意思?

Notice: Undefined offset: 0 in 
C:\xampp\htdocs\mywebsite\reddit_vote_tut\src\votes.php on line 41
Run Code Online (Sandbox Code Playgroud)

从这段代码:

<?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!"; 
} 
?>
Run Code Online (Sandbox Code Playgroud)

Yon*_*Ran 81

你问在关键的价值0$votes.它是一个不包含该键的数组.

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

如果你有一个数组:

$votes = array('1','2','3');
Run Code Online (Sandbox Code Playgroud)

我们现在可以访问:

$votes[0];
$votes[1];
$votes[2];
Run Code Online (Sandbox Code Playgroud)

如果我们尝试访问:

$votes[3];
Run Code Online (Sandbox Code Playgroud)

我们将收到错误"通知:未定义的偏移量:3"

  • 不,我使用它作为导致代码中出现问题的一个例子,我只是试图重新创建问题作为向您解释的方法.你的问题是数组值:$ votes尚未定义.所以你得到一个错误(注意)你必须确保正确填充数组,因为它似乎不是. (4认同)
  • 如果你看看你的函数"getAllVotes",你会注意到只有在查询找到结果时它才会填充数组,如果它没有找到结果,它将不会填充数组($ votes),所以我是假设您获得此结果是因为您的查询未返回任何结果. (2认同)

小智 11

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

if (isset($votes)) {
   // Do bad things to the votes array
}
Run Code Online (Sandbox Code Playgroud)


Dmi*_*hev 9

这个答案帮助了我/sf/answers/1321646931/ 粉碎的原因 - 索引0没有设置.简单的$array = $array + array(null)做法.或者你应该检查是否通过设置索引0上的数组元素isset($array[0]).第二种变体对我来说是最好的方法.


Giu*_*sco 7

使用print_r($votes);检查数组$votes,你会看到,关键0不存在那里.它将返回NULL并抛出该错误.


Tim*_*per 5

getAllVotes()不返回带有索引01. 通过调用var_dump()结果确保它返回您想要的数据。