82 votes

Avis : Offset non défini : 0 dans

Je reçois cette erreur PHP, qu'est-ce que cela signifie ?

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

A partir de ce code :

<?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!"; 
} 
?>

21 votes

Votre code est dangereux ! il peut être utilisé pour des injections sql !

0 votes

@Bernd Ott Comment faire pour régler ce problème ?

2 votes

Utiliser une couche de base de données qui autorise les paramètres de requête et/ou utiliser mysql_real_escape_string voir php.net/manual/de/function.mysql-real-escape-string.php il y a aussi de beaux échantillons.

96voto

YonoRan Points 1670

Vous demandez la valeur de la clé 0 de $votes . Il s'agit d'un tableau qui ne contient pas cette clé.

Le tableau $votes n'est pas définie, donc lorsque PHP essaie d'accéder à la clé 0 du tableau, il rencontre un décalage non défini pour [0] et [1] et lève l'erreur.

Si vous avez un tableau :

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

Nous pouvons maintenant y accéder :

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

Si nous essayons et accédons :

$votes[3];

Nous obtiendrons l'erreur "Notice : Undefined offset : 3"

15voto

Agg-rey Muhebwa Points 48

Tout d'abord, vérifiez que le tableau existe réellement, vous pouvez essayer quelque chose comme

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

9voto

Dmitri Malyshev Points 65

Cette réponse m'a aidé https://stackoverflow.com/a/18880670/1821607 La raison de l'écrasement - l'index 0 n'a pas été défini. Simple $array = $array + array(null) a fait l'affaire. Vous pouvez également vérifier si l'élément du tableau à l'index 0 est défini via isset($array[0]) . La deuxième variante est pour moi la meilleure approche.

8voto

Giulio Prisco Points 688

Utilisation print_r($votes); pour inspecter le tableau $votes , vous verrez que la touche 0 n'existe pas. Il renverra NULL et lancera cette erreur.

5voto

Tim Cooper Points 55292

getAllVotes() ne renvoie pas un tableau avec les index 0 o 1 . Assurez-vous qu'il renvoie les données que vous souhaitez en appelant var_dump() sur le résultat.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X