Ankündigung

Einklappen
Keine Ankündigung bisher.

Undefined index

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Undefined index

    Hallo liebe Gemeinde,

    ich bin gerade etwas verwirrt. Ich experimentiere gerade mit SQL rum und versuche gerade einen (Fußball)ergebnisgenerator auf prozentualer Ergebnisauswertung der Fussball Bundesliga.

    Dabei habe ich nun das Problem, das meine Schleife scheinbar nicht richtig auf die DB zugreift, oder es nicht in das Array übertragen wird.

    Das Script:
    PHP-Code:
    $zz 0;//Variable zum Array erzeugen.
    For ($j 0$j <= $SUM[1]; $j++){ //erste Schleife
         
    For ($k 0$k <= $SUM[2]; $k++){ //zweite Schleife
            
    FOR ($l 0$l <=2$l++){ //Ausführende Schleife
                
    $va = ["count","home","halfhome"]; //Variablen für die Db-Spalten
                
    $ab[$l] = "SELECT $va[$k] FROM results Where home = $j AND halfhome = $k"//Die Abfrage an den Server
                
    $ac[$l]  = $sqli->query($ab[$l]); //Ausführen der Abfrage
                
    $ad[$l] = mysqli_fetch_assoc($ac[$l]); //holen der Daten der Abfrage
                
    IF ($l == 0){ //IF-Bedinung erster durchlauf
                    
    $Z[$zz][]= $ad[0][$va[0]] / $SUM[0]; //Prozentualie Berechung
                
    }elseif ($l == 1){ //Bedinung zweiter durchlauf
                    
    $Z[$zz][]= $ad[1][$va[1]]; // Daten aus der Datenbank ins Array speichern
                
    }else{ //dritter Durchlauf
                    
    $Z[$zz][]= $ad[2][$va[2]];// Daten aus der Datenbank ins Array speichern
                    
    $zz++; //Counter um das nächste Array zu erzeugen.
                
    }

            }

        }
    }
    printf ($Z[0][0]); // Auswurf des Array
    printf ($Z[0][1]);// Auswurf des Array
    printf ($Z[0][2]);// Auswurf des Array
    $sqli->close(); 
    Ausgeworfen vom Browser wird:
    PHP-Code:
    NoticeUndefined indexhome in C:\xampp\htdocs\Liga\pc.php on line 28

    Notice
    Undefined indexhalfhome in C:\xampp\htdocs\Liga\pc.php on line 30

    Notice
    Undefined indexhome in C:\xampp\htdocs\Liga\pc.php on line 28

    Notice
    Undefined indexhalfhome in C:\xampp\htdocs\Liga\pc.php on line 30
    0.42857142857143 
    Zur Info:
    line 28 ist
    PHP-Code:
    $Z[$zz][]= $ad[1][$va[1]]; 
    line 30 ist
    PHP-Code:
    $Z[$zz][]= $ad[2][$va[2]]; 
    Die Zahl, die der Browser noch auswirft ist Z[0][0]. Das funktioniert also. Aber warum klappt das mit den anderen beiden Zugriffen nicht? Das steh ich vor nem ziemlichem Rätsel.

  • #2
    Was für ein grausames Script!!!

    Du selektierst in der Schleife count, home oder halfhome, greifst aber immer auf $ad[0]['count'], $ad[0]['home'] und $ad[0]['halfhome'] zu
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      Zitat von Klanuk Beitrag anzeigen

      $ab[$l] = "SELECT $va[$k] FROM results Where home = $j AND halfhome = $k"; //Die Abfrage an den Server

      printf ($Z[0][0]); // Auswurf des Array
      printf ($Z[0][1]);// Auswurf des Array
      printf ($Z[0][2]);// Auswurf des Array
      $sqli->close();[/PHP]
      Also bei mir meckert der immer wenn ich bei einem Statement das Array nicht auf diese Weise schreibe:
      PHP-Code:
      $ab[$l] = "SELECT ".$va[$k]." FROM results Where home = $j AND halfhome = $k"//Die Abfrage an den Server 
      Kein Schimmer ob das so muss.
      Auswurf des Arrays solltest du nach dem du dein Script angepasst hast ändern. Immoment trifft Auswurf wohl zu, aber klingt sonst merkwürdig
      Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

      Kommentar


      • #4
        Zitat von uha Beitrag anzeigen
        Was für ein grausames Script!!!

        Du selektierst in der Schleife count, home oder halfhome, greifst aber immer auf $ad[0]['count'], $ad[0]['home'] und $ad[0]['halfhome'] zu
        Ich möchte einmal drauf hinweisen, dass wir uns in einem Anfängerforum befinden, wo Anfänger, wie ich einer bin, Hilfe für ihre Scripte erfragen.

        Wenn du dazu einen sachdientlichen Hinweise erbringen kannst würde ich mich freuen. Solche Aussagen sind einfach sinnlos. Besonders da die Aussage nicht stimmt:
        Ich habe eine Schleife mit 3 durchläufen die jeweils einmal count, home und halfhome abruft. Dieses Vorgehen erspart einiges an Code. Das ist eine logische Überlegung und hat mit Grausamkeit nichts zu tun.

        Zitat von Moewe Beitrag anzeigen
        Also bei mir meckert der immer wenn ich bei einem Statement das Array nicht auf diese Weise schreibe:
        PHP-Code:
        $ab[$l] = "SELECT ".$va[$k]." FROM results Where home = $j AND halfhome = $k"//Die Abfrage an den Server 

        Kein Schimmer ob das so muss.
        Auswurf des Arrays solltest du nach dem du dein Script angepasst hast ändern. Immoment trifft Auswurf wohl zu, aber klingt sonst merkwürdig
        Danke für die Antwort.
        Das ist nicht das Problem. Das hier gepostete ist nur ein Teil des Scripts. Im oberen Teil des Scripts habe ich es bereits so gemacht und es funktioniert. Einen Teil des Problems habe ich nun auch entdeckt. Die Schleife greift nicht auf "home" und "halfhome" zu weil sie gar nicht angesprochen werden. Das verwendete Array ist falsch. $va[$l] ist das richtige. Ich habe beide jetzt getauscht und die Fehlermeldungen sind weg.

        PHP-Code:
        $ab[$l] = "SELECT ".$va[$l]." FROM results Where home = $j AND halfhome = $k"//Die Abfrage an den Server 
        Aber ich habe immer noch das Problem, dass mir
        PHP-Code:
        printf ($Z[0][1]);
        printf ($Z[0][2]); 
        immernoch nicht ausgegeben wird.

        Problem gelöst. Ich weiß nicht warum es erst nicht ging, aber nun wirft er mir die Zahlen aus Z[0][1] und Z[0][2] auch aus. Danke

        Kommentar


        • #5
          Zitat von Klanuk Beitrag anzeigen
          Ich möchte einmal drauf hinweisen, dass wir uns in einem Anfängerforum befinden, wo Anfänger, wie ich einer bin, Hilfe für ihre Scripte erfragen.

          Wenn du dazu einen sachdientlichen Hinweise erbringen kannst würde ich mich freuen. Solche Aussagen sind einfach sinnlos. Besonders da die Aussage nicht stimmt:
          Ich habe eine Schleife mit 3 durchläufen die jeweils einmal count, home und halfhome abruft. Dieses Vorgehen erspart einiges an Code. Das ist eine logische Überlegung und hat mit Grausamkeit nichts zu tun.
          Die "Grausamkeit" bei Seite gelassen, findet sich in uhas Antwort durchaus ein Hinweis. Nämlich das du bei jedem Durchlauf alle Indizes abfragst, wo (offensichtlich) nicht alle definiert sind. Falls du denkst das alle Indizes definiert sind, kannst du ja mal versuchen auszugeben auf welche Variable mit welchem Index zugegriffen werden soll.

          Ansonsten: Der Einwand war durchaus berechtigt. Das Script ist absolut unleserlich und eine Datenbankabfrage innerhalb einer dreifach(!) verschachtelten Schleife ist eine furchtbare Idee. Leider ist das Script aber so unleserlich, das man sich schwer tut zu verstehen was das am Ende überhaupt werden soll und so auch der Rahmen für brauchbare Tipps sehr begrenzt ist.

          Kommentar


          • #6
            Zitat von Tropi Beitrag anzeigen
            Die "Grausamkeit" bei Seite gelassen, findet sich in uhas Antwort durchaus ein Hinweis. Nämlich das du bei jedem Durchlauf alle Indizes abfragst, wo (offensichtlich) nicht alle definiert sind. Falls du denkst das alle Indizes definiert sind, kannst du ja mal versuchen auszugeben auf welche Variable mit welchem Index zugegriffen werden soll.
            Den Fehler habe ich dann auch gefunden. Dadurch das ich die falsche Variable verwendet habe, wurde nicht wie von mir beabsichtig auf die verschiedenen Daten des Arrays zugegriffen. Dadurch kam es zu diesen Fehler.

            Zitat von Tropi Beitrag anzeigen
            Ansonsten: Der Einwand war durchaus berechtigt. Das Script ist absolut unleserlich und eine Datenbankabfrage innerhalb einer dreifach(!) verschachtelten Schleife ist eine furchtbare Idee. Leider ist das Script aber so unleserlich, das man sich schwer tut zu verstehen was das am Ende überhaupt werden soll und so auch der Rahmen für brauchbare Tipps sehr begrenzt ist.
            Warum ist das eine furchtbare Idee?
            Ich versuche mein Script mal etwas platischer zu erklären.

            Ich versuche alle Varianten von Spalte Home zu durchlaufen. Das passiert in der ersten Schleife:
            PHP-Code:
            For ($j 0$j <= $SUM[1]; $j++) 
            Die läuft quasi die home spalte: 0,1,2,3 durch

            Die zweite Schleife durchläuft alle Varianten von halfhome während home steht.
            PHP-Code:
            For ($k 0$k <= $SUM[2]; $k++) 
            Und die dritte Schleife füllt dann das Array. Die Schleife ist ja gerade dafür gewählt, um auf die verschiedenen Datenbanksätze zuzugreifen. Wie sollte man es sonst lösen? Die Datenbankabfragen davorsetzen in einer eigenen Schleife?

            Und was macht das Script eigentlich so unleserlich?

            Kommentar


            • #7
              Zitat von Klanuk Beitrag anzeigen
              [...]

              Und was macht das Script eigentlich so unleserlich?
              Du solltest versuchen alles in einem Stil zu halten.

              PHP-Code:
              for($a 0$a 10$a++)
              {
                  for(
              $b 0$b 10$b++)
                  {
                      for(
              $c 10$c 0c--)
                      {
                          
              // Some Code;

                          
              if($d $x)
                          {
                              
              // Some Other Code;
                          
              }
                          else
                          {
                              
              // Some Other Code;
                          
              }
                      }
                  }

              Du schreibst wild groß und klein und nicht wirklich übersichtlich. Versuch deinen Code so wie oben zu gestallten und man wird ihn gleich viel besser lesen können.
              - Laravel

              Kommentar


              • #8
                Ich finde es auch schwierig, nachzuvollziehen, was Du da eigentlich machst. Datenbankabfragen in Schleifen sind absolute Performance-Killer.

                Versuche mal alle in Frage kommenden Daten vor der Schleife mit einer Abfrage abzurufen. Die speicherst Du dann in einem Array und fragst dann das ab. Mein Bauchgefühl sagt mir, dass man das Ganze weitaus gefälliger strukturieren / abarbeiten kann.
                [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

                Kommentar


                • #9
                  Das finde ich jetzt ein wenig schwierig. Vielleicht denk ich auch zu kompliziert.

                  Ich habe jetzt meine Tabelle Results wo die Ergebnisse mit ihren Häufigkeiten hinterlegt sind. Diese Häufigkeit wollte ich in Relation zur Gesamthäufigkeit setzen und den "Prozentwert" den Ergebnissen in einem Array dem Ergebnis wieder zuweisen. Das hat den Zweck, die Prozente mit einer Zufallszahl zu vergleichen und die dazu gehörigen Ergebnisse auszuwerfen.
                  So weit die Theorie.

                  Mein Problem ist dabei, dass die Tabelle von einem anderen Script mit Daten gefüttert wird, was dazu führen kann, dass sich die Spaltenanzahl der Tabelle ändert. Deshalb hatte ich die Schleife gebaut. Weil erst dadurch wusste ich/das Script ja wieviele Arrays ich überhaupt brauche.
                  Dadurch gestaltet sich das mit der großen Abfrage vor der Schleife schwierig. Natürlich könnte ich die Array auf dem jetzigen Stand der Tabelle vorher in einem großen Abrufen machen, aber dann muss ich das Script bei jedem ändern der Datenbanktabelle wieder anpassen. Das wollte ich ja verhindern und ich denke das ist auch nicht der Sinn eines Scripts.

                  Welche Möglichkeiten bleiben mir?
                  Wenn ich die Prozentwerte in die Tabelle mit eintragen lasse muss ich vorher ja den selben Aufwand an Datenbankaufrufe machen. Es sei dann die Datenbanktabelle würde die Prozentwerte automatisch aktuell halten, gibt es eine solche Option?

                  Kommentar


                  • #10
                    Was für ein grausames Script!!!
                    Das habe ich als ich den Code-Block gelesen habe auch gedacht also daher ...!

                    Ich möchte einmal drauf hinweisen, dass wir uns in einem Anfängerforum befinden, wo Anfänger, wie ich einer bin, Hilfe für ihre Scripte erfragen.
                    Er hat dich darauf "hingewiesen" das dein Script rein vom Look&Feel grausam für Ihn ist! Und ja, es ist ein Anfängerforum ABER Coding Style (http://www.php-fig.org/) hat nichts mit den Programmierkentnissen sondern mit personlichem Anspruch / wieviel man in das Thema an Zeit investiert zutun! Desweiteren hat er dir ja in der Zeile darunter noch spezifisch auf dein Problem bezogen weitergeholfen!

                    Dieses Vorgehen erspart einiges an Code. Das ist eine logische Überlegung und hat mit Grausamkeit nichts zu tun.
                    Das sagst du ohne in Betracht zu ziehen, das du einen Denkfehler machst bzw. über einen Umweg denkst - erst später auf erneute Nachfrage erklärst du "halbwegs" dein Vorhaben!

                    Das ist nicht das Problem. Das hier gepostete ist nur ein Teil des Scripts.
                    Wie ich diese Aussage immer hasse - da wären wir wieder bei der von dir selbst getätigten Aussage: "Ich möchte einmal drauf hinweisen, dass wir uns in einem Anfängerforum befinden, wo Anfänger, wie ich einer bin, ..." - gerade weil das so ist wäre eine gewisse Vollständigkeit um das Problem / den Kontext eher erschließen zu können wünschenswert!

                    Mein Problem ist dabei, dass die Tabelle von einem anderen Script mit Daten gefüttert wird, was dazu führen kann, dass sich die Spaltenanzahl der Tabelle ändert. Deshalb hatte ich die Schleife gebaut. Weil erst dadurch wusste ich/das Script ja wieviele Arrays ich überhaupt brauche.
                    Ich wage zu behaupten das das auf schlechtes Datenbankdesign schließen lässt wenn es notwendig ist die Tabellenstruktur zu verändern um die Datenbank mit Daten zu "füttern".
                    Gruß,
                    SebTM

                    Kommentar


                    • #11
                      Zitat von SebTM Beitrag anzeigen
                      Er hat dich darauf "hingewiesen" das dein Script rein vom Look&Feel grausam für Ihn ist! Und ja, es ist ein Anfängerforum ABER Coding Style (http://www.php-fig.org/) hat nichts mit den Programmierkentnissen sondern mit personlichem Anspruch / wieviel man in das Thema an Zeit investiert zutun! Desweiteren hat er dir ja in der Zeile darunter noch spezifisch auf dein Problem bezogen weitergeholfen!
                      Für mich sieht das Style weder grausam noch unübersichtlich aus. Ich habe mir den extra so eingerückt. Ich habe dafür auch ne Menge Zeit investiert. Ich finde es schwieriger den Inhalt zu erfassen, wenn er so auseinander gezogen ist. Und wenn es dafür ganze Seiten gibt, die einem einen Stil vorgeben, kann ich das vorher nicht wissen. Und darum gehts mir auch. Er sagt nicht was er will.

                      Das sagst du ohne in Betracht zu ziehen, das du einen Denkfehler machst bzw. über einen Umweg denkst - erst später auf erneute Nachfrage erklärst du "halbwegs" dein Vorhaben!
                      Das sage ich, weil ich gelernt habe, ein Code sollte möglichst kurz sein. Ich habe den Code mit den Abfragen vorher ausgeschrieben und ihn hnterher eingekürzt und die Schleife genutzt. Wenn das ein Performance-Killer ist wie hier gesagt, war es trotzdem eine logische Überlegung, wenn auch nicht die richtige Lösung.

                      Wie ich diese Aussage immer hasse - da wären wir wieder bei der von dir selbst getätigten Aussage: "Ich möchte einmal drauf hinweisen, dass wir uns in einem Anfängerforum befinden, wo Anfänger, wie ich einer bin, ..." - gerade weil das so ist wäre eine gewisse Vollständigkeit um das Problem / den Kontext eher erschließen zu können wünschenswert!
                      Du reagierst ohne auf den Inhalt einzugehen. Ich habe nicht das komplette Script gepostet, weil ich eine Frage zu einen spezifischen Problem hatte was ich konkret für diesen Teil des Scripts hatte und deshalb poste ich auch nur das. Ich sage ja auch nur, dass es der Ansatz von Moewe nicht ist und sage warum ich es ausschließen kann. Finde darauf ja auch meinen Fehler. Den Kontext erkläre ich erst hinterher, da man mir erklärt, die Schleife wäre ein Performence-Killer und ich dafür nach einer Lösung suche.

                      [/QUOTE]
                      Ich wage zu behaupten das das auf schlechtes Datenbankdesign schließen lässt wenn es notwendig ist die Tabellenstruktur zu verändern um die Datenbank mit Daten zu "füttern".[/QUOTE]

                      Es wird in dem Moment notwendig, wenn es zu einem Ergebnis kommt, was es vorher nich nicht gab. Dann wird es in die Tabelle in eine neue Zeile eingetragen. Die einzige Alternative die ich dort sehe, ist alle Möglichkeiten mit den jetzt bekannten Maximalwerten in der Tabelle vorzugeben. Das wären dann etwa 2000 Spalten, die ich dann auch jedes Mal im Script aufrufen müsste. Ich hielt das für den größeren Performence-Killer als wenn ich nur 400-500 Zeilen per Schleife abrufe, oder irre ich mich da?

                      Kommentar


                      • #12
                        Also, du wirst die Query ziemlich sicher zumindest so dynamisch generieren können, dass du die Schleifen nicht benötigst. (Ohne dass ich jetzt sagen kann, ob das wirklich Sinn ergibt.)

                        Von der Idee her irgendwie so:

                        PHP-Code:
                        // Darf nicht leer sein
                        $fields = array('home''halfhome');

                        $fieldsString '`' implode('`, `'$fields) . '`';

                        $whereParts = array();

                        $i 1;
                        foreach (
                        $fields as $field) {
                            
                        $whereParts[] = sprintf('(`%s` = BETWEEN 0 AND %s)'$field$SUM[$i]);
                            
                        $i++;
                        }

                        $query "SELECT `count` / $SUM[0] AS `percentage_or_whatever`,
                                         
                        $selectFieldsString
                                  FROM   `results`
                                  WHERE  " 
                        implode("\nAND "$whereParts) . "
                                  GROUP BY " 
                        $fieldsString;

                        var_dump($query); 
                        Was es mit dem count genau auf sich hat, habe ich nicht verstanden. Deshalb habe ich es mal „falsch“ andeutungsweise mit hinzugefügt.

                        Kommentar


                        • #13
                          Ernstmal danke mermshaus. Ich versuche mal deinen Code zu verstehen und dann in meinen Code einzuarbeiten. Mal schauen ob das klappt.

                          Ich möchte dir aber versuchen einmal zu klären wofür count steht und was ich damit erreichen möchte und wie die Tabellenstruktur aussieht und wie sie sich verändert.

                          Bild 1: So sieht die Tabelle im Moment aus. Die ersten 4 Spalten stellen ein Ergebnis dar: 0:0(0:0). Die Zahlen in der Klammer sind der Halbzeitstand. Das count steht für die Anzahl wie oft das Ergebnis vorkam.

                          Dieses Tabelle wird durch ein Eingabescript gefüttert. Wenn ich in dieses Eingabescript jetzt ein 1:0(0:0) eingebe verändert sich die Tabelle wie in Bild 2.

                          Sollte ich in das Eingabe Formular dann 2:0 (1:0) und dann ein 3:2(1:2) ein sieht die Tabelle aus wie in Bild 3.

                          Über den count möchte ich die Ergebnisse zuweisen. Ich stell mir das folgendermaßen vor. Vom Bild 3 ausgehend. Will ich eine Zufallszahl von 1-10 ausgeben. Bei 1-3 soll 0:0(0:0) ausgegeben werden, bei 4-8 1:0 (0:0), Bei 9 2:0(1:0) und bei 10 3:2(1:2).

                          Ist das verständlich?
                          Angehängte Dateien

                          Kommentar


                          • #14
                            Zitat von Klanuk Beitrag anzeigen
                            Über den count möchte ich die Ergebnisse zuweisen. Ich stell mir das folgendermaßen vor. Vom Bild 3 ausgehend. Will ich eine Zufallszahl von 1-10 ausgeben. Bei 1-3 soll 0:0(0:0) ausgegeben werden, bei 4-8 1:0 (0:0), Bei 9 2:0(1:0) und bei 10 3:2(1:2).

                            Ist das verständlich?
                            für mich zumindest nicht. könntest du vielleicht sagen, warum bei der zahl 10 nun ausgerechnet 3:2(1:2) und nicht eine der anderen zeilen ausgegeben werden sollte? ich erkenne bei deinem beispiel keine regel nach der man das ableiten könnte.
                            liebe Grüße
                            Fräulein Dingsda

                            Kommentar


                            • #15
                              Ich denke die Wahrscheinlichkeit der Ergebnisse hängt mit dem count zusammen, aber warum das Sinn macht versteh ich auch nicht.
                              Weiß auch gar nicht was die Tabelle eigentlich darstellen soll.

                              Eine umfassendere Beschreibung des Anwendungsszenarios wäre gut um das Vorgehen bewerten zu können. "Ich speicher da Werte rein und lass mir dann per Zufall eine Wertekombination ausgeben" ist ja nicht wirklich etwas womit man was anfangen kann.
                              [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                              [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                              Kommentar

                              Lädt...
                              X