wake-up-neo.net

Hinweis: Undefined offset: in

Ich erhalte diese PHP Fehler, was bedeutet es?

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

Von diesem 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

Sie sind für den Wert an dem Schlüssel 0 von $votes zu fragen. Es ist ein Array, das nicht den Schlüssel enthält.

Das Array $votes nicht gesetzt ist, so dass, wenn PHP den Schlüssel 0 des Arrays zuzugreifen versucht, es trifft einen Versatz für undefinierte [0] und [1] und wirft den Fehler.

Wenn Sie einen Array:

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

Wir können jetzt zugreifen:

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

Wenn wir versuchen, und Zugang:

$votes[3];

Wir werden den Fehler „Hinweis: Nicht definiert Offset: 3“ erhalten

68
YonoRan

Verwenden Sie print_r($votes);, um das Array $votes zu überprüfen. Dort wird der Schlüssel 0 nicht angezeigt. Es wird NULL zurückgeben und diesen Fehler auslösen.

7
Giulio Prisco

Diese Antwort hat mir geholfen https://stackoverflow.com/a/18880670/1821607 Der Grund für den Crush - Index 0 wurde nicht festgelegt. Einfach $array = $array + array(null) hat den Trick gemacht. Oder Sie sollten prüfen, ob das Array-Element auf Index 0 über isset($array[0]) gesetzt ist. Die zweite Variante ist der beste Ansatz für mich.

6

getAllVotes() kein Array Rückkehr mit den Indizes 0 oder 1. Stellen Sie sicher, dass es Rücksendung der Daten, die Sie durch den Aufruf wollen var_dump() auf das Ergebnis aus.

3
Tim Cooper

Überprüfen Sie zunächst, ob das Array tatsächlich vorhanden ist. Sie können beispielsweise Folgendes versuchen 

if (isset($$votes)) {
    // Do bad things to the votes array
}
2
Agg-rey Muhebwa

Wie bereits erwähnt, geschieht dies, weil die $ cur_votes [0] keine Daten enthalten und daher ein Fehler ausgegeben wird. Um sicherzustellen, dass Ihr Code einwandfrei funktioniert, bevor Sie "$ votes_up = $ cur_votes [0] +1;" echo den $ cur_votes [0] -Wert, um zu sehen, ob ein Wert gespeichert ist oder nicht. Sicherlich ist kein Wert gespeichert. 

1
Espanta
function getEffectiveVotes($id) 

Gemäß dem Funktionsheader gibt es nur eine Parametervariable ($id) . In Zeile 27 ist das votes[]-Array undefiniert und außerhalb des Gültigkeitsbereichs. Sie müssen dem Funktionsheader einen weiteren Parameterwert hinzufügen, damit die Funktion getEffectiveVotes() zwei Parameter erwarten kann. Ich bin rostig, aber so etwas würde funktionieren.

function getEffectiveVotes($id, $votes)

Ich sage nicht, dass dies so ist, wie es gemacht werden sollte, aber Sie möchten vielleicht nachforschen, wie PHP Seine Arrays übergibt, und entscheiden, ob Sie explizit angeben müssen, ob Sie es als Referenz übergeben möchten

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

Rufen Sie schließlich die Funktion getEffectiveVotes() mit beiden Argumenten auf, wo immer sie aufgerufen werden soll.

Prost.

1

Da hast du vielleicht schon den Fehler gewusst. Dies liegt daran, dass versucht wurde, auf das leere Array zuzugreifen oder auf den Wert des leeren Schlüssels des Arrays zuzugreifen. In meinem Projekt beschäftige ich mich mit diesem Fehler mit dem Zählen des Arrays und dem Anzeigen des Ergebnisses.

Sie können es so machen:

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

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

count($votes) zählt das $votes-Array. Wenn es gleich Null (0) ist, können Sie Ihre benutzerdefinierte Nachricht anzeigen oder auf eine bestimmte Seite umleiten, ansonsten können Sie mit $votes etwas erledigen. Auf diese Weise können Sie den Notice: Undefined offset: 0 in der Benachrichtigung in PHP entfernen.

0
vijayrana

Ich bin auch auf dieses gestoßen, und die Lösung ist einfach, die Indexposition des Arrays in Ihrem Code nicht hartcodieren. 
Anstelle von $data[0]['somekey'] do foreach($data as $data_item) { echo $data_item['somekey']; } 
Wenn es ein Array oder mehr gibt, können Sie die gewünschte Aktion innerhalb der Schleife ausführen. Wenn es jedoch nicht definiert ist, wird kein Fehler angezeigt. Sie können auch noch andere Checks hinzufügen. Sie können auch eine Variable hinzufügen und in einer for-Schleife erhöhen, um die Schleife zu begrenzen, wenn Sie nur die ersten Positionen oder etwas möchten.

0
Mihai

Wenn Sie dompdf/dompdf verwenden und in vendor/dompdf/dompdf/src/Cellmap.php ein Fehler auftritt, dann Es scheint, als würden wir in der update_row_group-Methode die falsche Frame-ID verwenden. Erste Tests scheinen das zu bestätigen. Dies kann jedoch darauf zurückzuführen sein, dass dies strikt eine seitenweise Ausgabe ist und nicht zu viele Dokumente in meinem Testbett seitenweise Tabellen enthalten.

Können Sie versuchen, Zeile 800 zu ändern:

$ r_rows = $ this -> _ frames [$ g_key] ["Zeilen"];
($ g_key anstelle von $ r_key)

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

0
Madhavi Khatal

In meinem Fall war es ein einfacher Typ

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

Mir fehlte die richtige Schließhalterung

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

Wenn Sie die Klammern weglassen, werden die Schlüssel standardmäßig von PHP zugewiesen.

Versuche dies:

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