Opmerking: Ongedefinieerde offset: 0 in

Ik krijg deze PHP-fout, wat betekent dit?

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

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

Antwoord 1, autoriteit 100%

U vraagt om de waarde op sleutel 0van $votes. Het is een array die die sleutel niet bevat.

De array $votesis niet ingesteld, dus wanneer PHP probeert toegang te krijgen tot de sleutel 0van de array, ontmoet deze een ongedefinieerde offset voor [0] en [ 1] en gooit de fout.

Als u een array hebt:

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

We kunnen nu toegang krijgen:

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

Als we proberen en toegang hebben:

$votes[3];

We krijgen de foutmelding “opmerking: undefined offset: 3”


Antwoord 2, Autoriteit 12%

Controleer eerst of de array eigenlijk bestaat, je zou zoiets kunnen proberen

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

Antwoord 3, Autoriteit 10%

Dit antwoord hielp me https://stackoverflow.com/a/18880670/1821607
De reden van Crush – Index 0 is niet ingesteld. Eenvoudig $array = $array + array(null)deed de truc. Of u moet controleren of het array-element op index 0 is ingesteld via isset($array[0]). De tweede variant is de beste aanpak voor mij.


Antwoord 4, Autoriteit 8%

Gebruik print_r($votes);Om de array te inspecteren $votes, ziet u die sleutel 0daar niet bestaan. Het zal null retourneren en die fout gooien.


Antwoord 5, Autoriteit 5%

getAllVotes()retourneert geen array met de indexen 0of 1. Zorg ervoor dat het de gewenste gegevens retourneert door var_dump()op het resultaat te bellen.


Antwoord 6, Autoriteit 2%

Ik ben dit ook tegengekomen en de oplossing is eenvoudig, codeer de array-indexpositie niet hard in uw code.
In plaats van
$data[0]['somekey']doe
foreach($data as $data_item)
{
echo $data_item['somekey'];
}

Als er een array of meer is, kunt u de gewenste actie binnen de lus uitvoeren, maar als deze niet is gedefinieerd, wordt er geen fout gegenereerd. je kunt er ook nog andere controles aan toevoegen.
Je kunt ook een variabele toevoegen en deze verhogen in een for in-lus om je looping te beperken als je alleen de eerste posities wilt of zoiets.


Antwoord 7, autoriteit 2%

Zoals uitgelegd gebeurt het omdat er geen gegevens in de $cur_votes[0]staan en daarom wordt er een fout gegenereerd.

Om ervoor te zorgen dat uw code goed werkt, herhaalt u voordat u "$votes_up = $cur_votes[0]+1;"de waarde $cur_votes[0]om te zien of er is een waarde opgeslagen of niet.

Er is zeker geen waarde opgeslagen.


Antwoord 8

function getEffectiveVotes($id) 

Volgens de functiekop is er maar één parametervariabele ($id).
Dus op regel 27 is de array votes[]ongedefinieerd en buiten bereik. Je moet nog een toevoegen
parameterwaarde toe aan de functiekop, zodat de functie getEffectiveVotes()weet dat er twee parameters worden verwacht. Ik ben roestig, maar zoiets als dit zou werken.

function getEffectiveVotes($id, $votes)

Ik zeg niet dat dit is hoe het moet, maar je zou kunnen onderzoeken hoe PHP
geeft zijn arrays door en beslis of je expliciet moet aangeven om het door te geven als referentie

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

Ten slotte, oproepfunctie getEffectiveVotes()Met beide argumenten waar het is verondersteld te worden genoemd.

Cheers.


Antwoord 9

Zoals je misschien al over de fout hebt geweten. Dit komt door het proberen toegang te krijgen tot de lege array of toegang te krijgen tot de waarde van de lege sleutel van array. In mijn project heb ik met deze fout te maken met het tellen van de array en het weergeven van het resultaat.

U kunt het zo doen:

if(count($votes) == '0'){
    echo 'Sorry, no votes are available at the moment.';
}
else{
    //do the stuff with votes
}

count($votes)TELT DE $votesARRAY. Als het gelijk is aan nul (0), kunt u uw aangepaste bericht weergeven of omleiden naar bepaalde pagina die u kunt doen, met $votes. Op deze manier kunt u de Notice: Undefined offset: 0in kennisgeving in PHP.


Antwoord 10

Probeer de gegevens met opdracht: php artisan db:seed.


Antwoord 11

Als u de haakjes weggaat, wijst PHP de toetsen standaard toe.

Probeer dit:

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

Antwoord 12

In mijn geval was het een eenvoudig type

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

Ik heb de juiste sluitingsbeugel gemist

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

Antwoord 13

Als u dompdf/dompdf gebruikt en er treedt een fout op in vendor/dompdf/dompdf/src/Cellmap.php, dan
Het lijkt erop dat we de verkeerde frame-ID gebruiken in de update_row_group-methode. De eerste tests lijken dit te bevestigen. Maar dat kan zijn omdat dit strikt een kwestie van paginatabel is en niet al te veel van de documenten in mijn testbed paginatabellen hebben.

Kun je proberen regel 800 te veranderen in:

$r_rows = $this->_frames[$g_key][“rows”];
($g_key in plaats van $r_key)

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


Antwoord 14

Gebruik in plaats daarvan mysql-rij

mysql_fetch_row($r)

Overweeg ondertussen om mysqli of PDO te gebruiken

?>


Antwoord 15

het is slechts een waarschuwing:

error_reporting(0);

het laat zien wanneer we de array niet initialiseren en direct waarde toewijzen aan indexen.

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

in plaats daarvan:

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

het is gewoon een melding, genereer geen uitvoerfout of onverwachte uitvoer.

Other episodes