web-dev-qa-db-fra.com

Remarque: Offset non défini: in

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

Vous demandez la valeur à la clé 0 de $votes. C'est un tableau qui ne contient pas cette clé.

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

Si vous avez un tableau:

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

Nous pouvons maintenant accéder à:

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

Si nous essayons d'accéder à:

$votes[3];

Nous obtiendrons l'erreur "Avis: décalage non défini: 3"

68
YonoRan

Utilisez print_r($votes); pour inspecter le tableau $votes, vous verrez que la clé 0 n’y existe pas. Il retournera NULL et lancera cette erreur.

7
Giulio Prisco

Cette réponse m'a aidé https://stackoverflow.com/a/18880670/1821607 La raison de l'écrasement - index 0 n'a pas été définie. $array = $array + array(null) simple a fait le tour. Ou vous devriez vérifier si l'élément de tableau sur l'index 0 est défini via isset($array[0]). La deuxième variante est la meilleure approche pour moi.

6
Dmitrii Malyshev

getAllVotes() ne renvoie pas un tableau avec les index 0 ou 1. Assurez-vous de renvoyer les données souhaitées en appelant var_dump() sur le résultat.

3
Tim Cooper

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
}
2
Agg-rey Muhebwa

Comme cela a été expliqué, cela se produit car il n’ya pas de données dans $ cur_votes [0] et qu’il génère donc une erreur. Pour vous assurer que votre code fonctionne correctement, avant d'effectuer "$ votes_up = $ cur_votes [0] +1;" echo la valeur $ cur_votes [0] pour voir si une valeur est stockée ou non. Certes, il n'y a pas de valeur stockée. 

1
Espanta
function getEffectiveVotes($id) 

Selon l'en-tête de la fonction, il n'y a qu'une seule variable de paramètre ($id) . Ainsi, à la ligne 27, le tableau votes[] est indéfini et sort du cadre. Vous devez ajouter une autre valeur de paramètre À l'en-tête de la fonction afin que la fonction getEffectiveVotes() sache qu'elle attend deux paramètres. Je suis rouillé, mais quelque chose comme ça marcherait.

function getEffectiveVotes($id, $votes)

Je ne dis pas que c'est comme cela que cela devrait être fait, mais vous voudrez peut-être rechercher comment PHP Passe ses tableaux et décide si vous avez besoin d'indiquer explicitement de le transmettre 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, où qu’elle soit censée être appelée.

À votre santé.

1
Anthony Rutledge

Comme vous avez peut-être déjà su sur l'erreur. Cela est dû à la tentative d'accéder au tableau vide ou à la valeur de la clé vide du tableau. Dans mon projet, je traite de cette erreur en comptant le tableau et en affichant le résultat.

Vous pouvez le faire comme ça:

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

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

count($votes) compte le tableau $votes. S'il est égal à zéro (0), vous pouvez afficher votre message personnalisé ou rediriger vers une certaine page, sinon vous pouvez effectuer des opérations avec $votes. De cette façon, vous pouvez supprimer le Notice: Undefined offset: 0 dans l'avis en PHP.

0
vijayrana

J'ai rencontré ceci aussi et la solution est simple, ne pas coder en dur la position d'index de tableau dans votre code. 
Au lieu de $data[0]['somekey'] do foreach($data as $data_item) { echo $data_item['somekey']; } 
S'il y a un tableau ou plus, vous pouvez effectuer l'action souhaitée dans la boucle, mais s'il n'est pas défini, cela n'entraînera pas d'erreur. vous pouvez également ajouter d'autres contrôles en plus de cela. Vous pouvez également ajouter une variable et l’incrémenter dans une boucle for in afin de limiter votre boucle si vous souhaitez uniquement les premières positions.

0
Mihai

Si vous utilisez dompdf/dompdf et si une erreur se produit dans le fichier fournisseur/dompdf/dompdf/src/Cellmap.php, alors. Les tests initiaux semblent le confirmer. Bien que ce soit peut-être parce qu’il s’agit strictement d’un problème de table paginée et que peu de documents de mon banc d’essai ont des tables paginées.

Pouvez-vous essayer de changer la ligne 800 en:

$ r_rows = $ this -> _ frames [$ g_key] ["rows"];
($ g_key au lieu de $ r_key)

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

0
Madhavi Khatal

Dans mon cas c'était un type simple

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

Il me manquait le crochet de fermeture correct

$_SESSION['role'] == 'ge'
0
Hammad Khan

Si vous omettez les crochets, alors PHP attribuera les clés par défaut.

Essaye ça:

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