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.

2voto

Espanta Points 224

Comme expliqué, cela se produit parce qu'il n'y a pas de données dans le fichier $cur_votes[0] ce qui provoque une erreur.

Pour vous assurer que votre code fonctionne correctement, avant d'exécuter "$votes_up = $cur_votes[0]+1;" faire écho à la $cur_votes[0] pour voir s'il y a une valeur stockée ou non.

Il est certain qu'il n'y a pas de valeur stockée.

2voto

Mihai Points 27

J'ai également rencontré ce problème et la solution est simple, ne pas coder en dur la position de l'index du tableau dans votre code.
Au lieu de $data[0]['somekey'] faire foreach($data as $data_item) { echo $data_item['somekey']; }
S'il y a un tableau ou plus, vous pouvez effectuer l'action désirée à l'intérieur de la boucle, mais s'il n'est pas défini, il n'y aura pas d'erreur. vous pouvez également ajouter d'autres vérifications en plus de cela. Vous pouvez également ajouter une variable et l'incrémenter dans une boucle for in pour limiter votre bouclage si vous ne voulez que les premières positions ou quelque chose comme ça.

1voto

Anthony Rutledge Points 280
function getEffectiveVotes($id) 

D'après l'en-tête de la fonction, il n'y a qu'une seule variable de paramètre ( $id ). Ainsi, à la ligne 27, le votes[] est indéfini et hors de portée. Vous devez ajouter une autre valeur de paramètre à l'en-tête de la fonction pour que la fonction getEffectiveVotes() sait qu'il doit s'attendre à deux paramètres. Je suis un peu rouillé, mais quelque chose comme ça pourrait fonctionner.

function getEffectiveVotes($id, $votes)

Je ne dis pas que c'est ainsi qu'il faut procéder, mais vous devriez peut-être chercher à savoir comment PHP passe ses tableaux et décider si vous devez explicitement indiquer de les passer par référence

function getEffectiveVotes($id &$votes)    <---I forget, no time to look it up right now.

Enfin, appelez la fonction getEffectiveVotes() avec les deux arguments là où il est censé être appelé.

Santé.

1voto

vijayrana Points 418

Comme vous le savez peut-être déjà, l'erreur est connue. Celle-ci est due à une tentative d'accès à un tableau vide ou à la valeur d'une clé vide d'un tableau. Dans mon projet, je traite cette erreur en comptant le tableau et en affichant le résultat.

Vous pouvez procéder de la manière suivante :

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

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

count($votes) compte les $votes de la gamme. S'il est égal à zéro (0) vous pouvez afficher votre message personnalisé ou rediriger vers une certaine page, ou encore faire des choses avec $votes . De cette manière, vous pouvez supprimer le Notice: Undefined offset: 0 dans l'avis en PHP.

0voto

David Points 329

Si vous omettez les parenthèses, PHP attribuera les touches par défaut.

Essayez ceci :

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

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