Thread Verfasser: Catzenjaeger
Thread ID: 988
Thread Info
Es gibt 10 Beiträge zu diesem Thema, und es wurde 4765 Mal angesehen.  Ausserdem wurden Dateien angehängt.
 Thema drucken
Anfängerfrage: was genau ist Undefined offset und wie behebe ich so etwas?
Catzenjaeger
wie der Titel schon sagt suche ich eine verständliche Erklärung was genau hier los ist. soweit ich gegoogelt habe, werden andere Werte als erwartet geliefert ...

ich tue mich aber schwer damit die passende Stelle zu finden und überhaupt erst mal die Stelle zu finden. Ich schaue immer im Quelltext der Datei nach

Zitat: z.B hier die Fehlermeldung in Version 9
admin/admin_figurelib_manufacturers.php
/test/infusions/figurelib/admin.php?aid=xxxxxxxxxx&section=figurelib_manufacturers&action=edit&man_id=114
Undefined offset: 1
Line: 109


ich rufe hier die Datei /test/infusions/figurelib/admin.php?..... auf und schau in deren Quelltext nach Zeile 109

da steht dann:

Code 

106 <li>
107 <a class='pointer' href='/test/infusions/figurelib/admin.php?aid=xxxxxxxxxxx66aef&amp;action=edit&amp;man_id=114&amp;section=figurelib_settings'>
 FigureLib Settings </a>
108 </li>
109 </ul>
110 <div



also ne Liste .. ich stehe komplett aufm Schlauch was ich genau machen müsste . Laut Google irgendwas mit isset abfangen aber wo?
 
Wemi
Hast du dich nicht verzählt?

Die Zeilen Angabe bezieht sich auf den Quelltext deiner Datei, nicht auf den Seitenquelltext im Browser.
"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Catzenjaeger
ah danke für den Hinweis .. ich dachte im Quelltext des Browsers weil er es ja übersetzt und darstellt ... also wenn es die Manufaftuer Datei sit dann wäre das hier:

Code 

   if ($figureMan_edit) {
      $result = dbquery("SELECT * FROM ".DB_FIGURE_MANUFACTURERS." ".(multilang_table("FI") ? "WHERE figure_manufacturer_language='".LANGUAGE."' AND" : "WHERE")." figure_manufacturer_id='".intval($_GET['man_id'])."'");
      if (dbrows($result)) {
         $data = dbarray($result);
         $man_hidden = array($data['figure_manufacturer_id']);
         $man_sorting = explode(" ", $data['figure_manufacturer_sorting']);
         if ($man_sorting[0] == "figure_id") {
            $data['man_sort_by'] = "1";
         } elseif ($man_sorting[0] == "figure_title") {
            $data['man_sort_by'] = "2";
         } else {
            $data['man_sort_by'] = "3";
         }
         $data['man_sort_order'] = $man_sorting[1];
      } else {
         redirect(FUSION_SELF.$aidlink);
      }
   }



Zeile 109 wäre das hier: $data['man_sort_order'] = $man_sorting[1];
 
Wemi
$man_sorting[1] ist dann leer.

Heisst in der Tabelle figure_manufacturer_sorting ist dann ein Eintrag, bzw. bei dem explode kommt nur ein Ergebnis bei raus.

Also

Code 

if(isset($man_sorting[1])){
$data['man_sort_order'] = $man_sorting[1];
}


"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Catzenjaeger
Zitat: Wemi schrieb:......Heisst in der Tabelle figure_manufacturer_sorting ist dann ein Eintrag, bzw. bei dem explode kommt nur ein Ergebnis bei raus.......


danke für die Antwort ... das könnte sein weil in der Tabelle gibt es zwar die spalte sorting aber da steht nichts drin.

Was müsste ich den nun genua machen? die Tabelle mit einen Wert füllen zB ASC ?

also in meinen Kategorie Tabelle steht bei sotring : figure_id ASC
Die manufactuer und brand sind ja praktisch identische Tabellen mit den gleichen Spalten und Bezeichnungen

achso vergessen hier der ganze Part mit besagter zeile 109

Code 

   if ($figureMan_edit) {
      $result = dbquery("SELECT * FROM ".DB_FIGURE_MANUFACTURERS." ".(multilang_table("FI") ? "WHERE figure_manufacturer_language='".LANGUAGE."' AND" : "WHERE")." figure_manufacturer_id='".intval($_GET['man_id'])."'");
      if (dbrows($result)) {
         $data = dbarray($result);
         $man_hidden = array($data['figure_manufacturer_id']);
         $man_sorting = explode(" ", $data['figure_manufacturer_sorting']);
         if ($man_sorting[0] == "figure_id") {
            $data['man_sort_by'] = "1";
         } elseif ($man_sorting[0] == "figure_title") {
            $data['man_sort_by'] = "2";
         } else {
            $data['man_sort_by'] = "3";
         }
         $data['man_sort_order'] = $man_sorting[1];
      } else {
         redirect(FUSION_SELF.$aidlink);
      }
   }


Bearbeitet von Catzenjaeger am 23.06.2016 um 10:47
 
Wemi
Entweder einen default Wert eintragen, oder mit isset prüfen, ob da was drin steht.
"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Catzenjaeger
was ist den besser? Vom rein logischen würde ich jetzt als Anfänger sagen isset abfangen weil wenn man vergisst den wert sorting bei Neu-anlegen eines Manufactuerees anzugeben wäre die spalte ja wieder leer und der Fehler würde wieder kommen.

Bei meinen Kategorien wird schon bei installation figure ACS automatisch eingetragen. Dort tritt der Fehler nicht auf

Die Frage die auch aufkommt was mache ich wenn ich mittels issed prüfe und es kommt nichts zurück ... bei issed wird wohl abfefragt ob true oder false ... bei true ... gehe ich davon aus soll das script weiter laufen ... und was bei false ..???? stoppen soll es ja nicht .. oder müsste dann dafür ein (in diesen Fall sorting) ein wert gesetzt werden?

schweres Thema Smile
 
Wemi
Besser wäre, wie in den anderen Tabellen auch, da einen default Wert zu hinterlegen. Dann gehst du dem völlig aus dem Weg.
"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Catzenjaeger
ja das wäre ja schnell umsetzbar ... die Frage die mir aber stelle ist, ... was ist wenn man einen neuen Manufakturer anlegt und das Feld sorting nicht wählt?

ich frage mich so wieso warum es überhaupt dieses sorting gibt. Weil das ist ja nicht übergreifend für alle Manufakturer sondern pro Manufakturer. Heißt, es könnte dann auch diverse werte in der DB geben.


so sieht das ganze momentan aus: siehe Bild

Also auf deutsch/anfängerisch gefragt -- was macht dieses sorting überhaupt genau Smile
Catzenjaeger hat folgende Datei angehängt:
Du hast nicht die Berechtigung die Anhäge dieses Themas zu sehen.
 
Wemi
Wenn man dann beim Feld sorting nichts auswählt, dann trägt MySQL die default Werte ein. Dafür sind diese ja gedacht. Und der Vorteil liegt dann auf der Hand, man hat dadurch, dass es keine NULL Werte in den Feldern gibt eben auch keine Fehlermeldungen.

Dein sorting soll bei einer Suche oder auch bei der Hauptseite entweder aufsteigend oder absteigend sortieren. Dabei kannst du noch auswählen, welche Tabelle er entsprechend sortieren soll (zur Zeit nach der figure_id).
"Es geht hier um die Frage, ob die Menschheit ohne Religion besser dastünde. Und ich sagte: ja" Ben Moore
 
Springe ins Forum: