Ich erhalte diesen PHP-Fehler. Was bedeutet das?
Notice: Undefined offset: 0 in
C:\xampp\htdocs\mywebsite\reddit_vote_tut\src\votes.php on line 41
Aus 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!";
}
?>
Antworten:
Sie fragen nach dem Wert bei Schlüssel
0
von$votes
. Es ist ein Array, das diesen Schlüssel nicht enthält.Das Array
$votes
ist nicht festgelegt. Wenn PHP versucht, auf den Schlüssel0
des Arrays zuzugreifen , stößt es auf einen undefinierten Offset für [0] und [1] und löst den Fehler aus.Wenn Sie ein Array haben:
$votes = array('1','2','3');
Wir können jetzt zugreifen auf:
$votes[0]; $votes[1]; $votes[2];
Wenn wir versuchen, darauf zuzugreifen:
$votes[3];
Wir erhalten den Fehler "Hinweis: Undefinierter Offset: 3"
quelle
$new_array[3]
, dass der undefinierte Offset0
anstelle von ist3
?Überprüfen Sie zunächst, ob das Array tatsächlich vorhanden ist. Versuchen Sie es mit etwas wie
if (isset($votes)) { // Do bad things to the votes array }
quelle
Diese Antwort hat mir geholfen, https://stackoverflow.com/a/18880670/1821607 Der Grund für Crush - Index 0 wurde nicht festgelegt. Einfach
$array = $array + array(null)
hat es geschafft. Oder Sie sollten überprüfen, ob das Array-Element auf Index 0 über gesetzt istisset($array[0])
. Die zweite Variante ist für mich der beste Ansatz.quelle
Verwenden Sie
print_r($votes);
diese Option, um das Array zu überprüfen$votes
. Sie werden feststellen, dass der Schlüssel0
dort nicht vorhanden ist. Es wird NULL zurückgeben und diesen Fehler auslösen.quelle
getAllVotes()
gibt kein Array mit den Indizes0
oder zurück1
. Stellen Sie sicher, dass die gewünschten Daten zurückgegeben werden, indem Sievar_dump()
das Ergebnis aufrufen .quelle
Ich bin auch darauf gestoßen, und die Lösung ist einfach. Codieren Sie die Array-Indexposition in Ihrem Code nicht fest.
Anstatt zu
$data[0]['somekey']
tunforeach($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 diese jedoch nicht definiert ist, wird kein Fehler angezeigt. Darüber hinaus können Sie weitere Prüfungen hinzufügen. Sie können auch eine Variable hinzufügen und in einer for-in-Schleife erhöhen, um die Schleife zu begrenzen, wenn Sie nur die ersten Positionen oder etwas anderes möchten.
quelle
Wie bereits erläutert, geschieht dies, weil keine Daten im enthalten sind
$cur_votes[0]
und daher ein Fehler ausgegeben wird.Um sicherzustellen, dass Ihr Code einwandfrei funktioniert, bevor Sie das
"$votes_up = $cur_votes[0]+1;"
Echo ausführen$cur_votes[0]
Wert, ob ein Wert gespeichert ist oder nicht.Sicherlich ist kein Wert gespeichert.
quelle
function getEffectiveVotes($id)
Entsprechend dem Funktionsheader gibt es nur eine Parametervariable (
$id
). Somit ist in Zeile 27 dasvotes[]
Array undefiniert und außerhalb des Gültigkeitsbereichs. Sie müssen dem Funktionsheader einen weiteren Parameterwert hinzufügen, damit die FunktiongetEffectiveVotes()
zwei Parameter erwartet. Ich bin rostig, aber so etwas würde funktionieren.function getEffectiveVotes($id, $votes)
Ich sage nicht, dass dies so gemacht werden sollte, aber Sie möchten vielleicht untersuchen, wie PHP seine Arrays übergibt, und entscheiden, ob Sie explizit angeben müssen, um es als Referenz zu übergeben
function getEffectiveVotes($id &$votes) <---I forget, no time to look it up right now.
Zuletzt rufen Sie die Funktion
getEffectiveVotes()
mit beiden Argumenten auf, wo immer sie aufgerufen werden soll.Prost.
quelle
Wie Sie vielleicht schon über den Fehler gewusst haben. Dies ist darauf zurückzuführen, dass versucht wird, auf das leere Array oder auf den Wert des leeren Schlüssels des Arrays zuzugreifen. In meinem Projekt beschäftige ich mich mit diesem Fehler, indem ich das Array zähle und das Ergebnis anzeige.
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 ist(0)
, können Sie Ihre benutzerdefinierte Nachricht anzeigen oder auf eine bestimmte Seite umleiten, auf der Sie andere Aufgaben ausführen können$votes
. Auf diese Weise können Sie denNotice: Undefined offset: 0
Hinweis in PHP entfernen .quelle
Wenn Sie die Klammern weglassen, weist PHP die Schlüssel standardmäßig zu.
Versuche dies:
$votes = $row['votes_up']; $votes = $row['votes_down'];
quelle
In meinem Fall war es ein einfacher Typ
$_SESSION['role' == 'ge']
Mir fehlte die richtige Verschlussklammer
$_SESSION['role'] == 'ge'
quelle
Wenn Sie dompdf / dompdf verwenden und ein Fehler in der Datei vendor / dompdf / dompdf / src / Cellmap.php auftritt, verwenden wir anscheinend die falsche Frame-ID in der Methode update_row_group. Erste Tests scheinen dies zu bestätigen. Dies kann jedoch daran liegen, dass es sich ausschließlich um ein Problem mit ausgelagerten Tischen handelt und nicht zu viele Dokumente in meinem Prüfstand ausgelagerte Tische haben.
Können Sie versuchen, Zeile 800 in zu ändern:
$ r_rows = $ this -> _ frame [$ g_key] ["Zeilen"];
($ g_key statt $ r_key)
https://github.com/dompdf/dompdf/issues/1295
quelle
Verwenden Sie stattdessen die MySQL-Zeile
mysql_fetch_row ($ r)
In der Zwischenzeit sollten Sie mysqli oder PDO verwenden
?>
quelle
Es ist nur eine Warnung:
error_reporting(0);
Es wird angezeigt, wenn wir das Array nicht initialisieren und den Indizes keinen direkten Wert zuweisen.
somefunction{ $raja[0]="this"; $raja[1]="that"; }
stattdessen :
somefunction{ $raja=array(0=>'this',1='that'); //or $raja=array("this","that"); }
Es ist nur eine Benachrichtigung, keine Ausgabefehler oder unerwartete Ausgabe zu generieren.
quelle