Ankündigung

Einklappen
Keine Ankündigung bisher.

Var. nicht definiert - Warum?

Einklappen

Neue Werbung 2019

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

  • Var. nicht definiert - Warum?

    Moin,

    ich habe gerade das Problem, dass ich nicht verstehe, weshalb die user Var. nicht definiert sein soll.

    Hier meine Fehlermeldung:

    Undefined index: user in on line 38

    Undefined index: user in on line 45
    Hier mein Code:

    PHP-Code:
    $include = include 'D:\xampp\htdocs\spiel\endscreen.php';





    // Connection herstellen
    $conn = new mysqli("localhost""root""""numberguess");

    // Verbindung überprüfen
    if (new mysqli == true)
    {
      echo 
    "Verbindung aufgebaut";
    }
    else
      echo 
    "Verbindung fehlgeschlagen";

    $conn->set_charset("utf8");




    // Überprüft ob der Include ankommt
    if ($include == TRUE)
    {
      echo 
    "<br />";
      echo 
    "Include Succesfully!";
    }
    else {
      echo 
    "Include Failed!";
    }




    $user $_POST['user'];

    if (
    get_magic_quotes_gpc())
    {
      
    $user $_POST['user'];
    }
    else
    $user addslashes($_POST['user']);


      
    //Selektiert die Einträge der DB
      
    $result mysqli_query($conn"SELECT User, savedTries, timestamp FROM `stats` WHERE `user` LIKE '$_POST['user']'"); 

  • #2
    Dein Formular, welches dieses Script wohl aufruft, hat kein Feld mit dem Namen user.

    Dein SQL dürfte auch fehlschlagen. Strings verknüpft man (sauber) mit einem Punkt (.). Also

    PHP-Code:
    echo "Select User FROM stats WHERE user LIKE '" $_POST['user'] . "'"); 
    Ausserdem solltest du Dich über SQL-Injections informieren.

    Kommentar


    • #3
      get_magic_quotes_gpc? addslashes? Wie alt ist der Code, 20 Jahre? Und dann noch eine Sicherheitslücke bei der SQL-Abfrage (Stichwort SQL-Injections).

      Die Fehlermeldung bedeutet übrigens, dass du auf den Index "user" zugreifst, der aber nicht existiert. Aber das steht doch eh wortwörtlich so drin.

      Kommentar


      • #4
        SQL ist nicht Fehlgeschlagen, aber ich habe, deine Variante bekommen, aber dazu hätte ich die Frage, wieso verknüpft man Strings so mut einander?

        hellbringer : Ich habe vor relativ langer Zeit irgendwo gelesen, dass das es irgendwie ein Schutz vom Einloggen ist. Aber mit dem Thema habe ich mich noch nicht so richtig befasst.
        Ich weiß auch das der Server nicht auf den Index 'user' zugreifen kann.
        Genau das ist das Problem, weil ich nicht finde den Fehler nicht warum er das nicht findet.

        Als Info: oben habe ich eine Datei Included, wo die $_POST['user'] Var. incl. einem Formular exestiert, diese Datei läuft auch Fehlerfrei.

        Kommentar


        • #5
          Zitat von DevFlash Beitrag anzeigen
          Ich habe vor relativ langer Zeit irgendwo gelesen, dass das es irgendwie ein Schutz vom Einloggen ist. Aber mit dem Thema habe ich mich noch nicht so richtig befasst.
          Also kurz gesagt, du hast keine Ahnung was du tust. Das ist eine ganz schlechte Ausgangsbasis um eine sichere Software zu schreiben.

          Davon abgesehen steht alles nötige im PHP-Handbuch. Da muss man nicht Falschinformationen irgendwo anders lesen.

          Zitat von DevFlash Beitrag anzeigen
          Ich weiß auch das der Server nicht auf den Index 'user' zugreifen kann.
          Genau das ist das Problem, weil ich nicht finde den Fehler nicht warum er das nicht findet.
          Weil es nicht da ist. Man kann nur auf Dinge zugreifen, die existieren. Irgendwoher muss es ja kommen. Hast du dir schon mal den HTTP-Request angeschaut? Steht dort der POST-Wert drin?

          Zitat von DevFlash Beitrag anzeigen
          Als Info: oben habe ich eine Datei Included, wo die $_POST['user'] Var. incl. einem Formular exestiert, diese Datei läuft auch Fehlerfrei.
          Ob $_POST['user'] existiert hängt nicht von irgendwelchen Dateien ab, sondern davon, was im HTTP-Request drin steht.

          Kommentar


          • #6
            Ok. Danke für die Infos... Das heißt ich muss mich noch ein bisschen mehr mit den Allgemeinen Basics auseinander setzen.

            Dennoch habe ich in der anderen Datei ein HTTP - Request:

            PHP-Code:
                  if(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS']!='off' or $_SERVER['SERVER_PORT']==443)
                     
            $url 'https://' $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
                  else
                     
            $url 'http://' $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; 

            Kommentar


            • #7
              Das ist kein HTTP-Request, sondern einfach nur eine URL als String. Der HTTP-Request kommt vom Browser und nicht von PHP. PHP sendet den HTTP-Response.

              Kommentar


              • #8
                Du hast da viele Fehler drin, die du nicht siehst, weil du dir die Fehler nicht anzeigen lässt.

                Folgender Code, der nur zum Testen gedacht ist, sollte dir alle eventuell vorhanden Fehler anzeigen.
                PHP-Code:
                <?php
                // Alle Fehler berücksichtigen
                error_reporting(-1);

                // Fehler auch ausgeben
                ini_set('display_errors'1);

                // immer utf-8 ausgeben, ist Standard
                header("Content-Type: text/html; charset=utf-8");


                include 
                __DIR__ 'spiel/endscreen.php';


                // DB-Verbindung herstellen
                $conn = new mysqli("localhost""root""""numberguess");

                // sollte nur bei der Entwicklungsumgebung so aussehen, ansonsten andere Fehlerbehandlung verwenden
                if ($mysqli->connect_errno) {
                    echo 
                "Fehler bei der Verbindung zur DB: (" $mysqli->connect_errno ") " $mysqli->connect_error;
                }

                $conn->set_charset("utf8");


                if ( isset(
                $_POST['user']) ){
                    
                $user mysqli_real_escape_string($conn$_POST['user'] )
                }else{
                    
                // Nur für diesen Testfall
                    
                echo 'S_POST['user'] ist nicht vorhanden, Folgende Daten werden übertragen:';
                    echo 
                '<pre>';
                    
                print_r($_REQUEST);
                    echo 
                '</pre>';
                }


                //Selektiert die Einträge der DB
                $result mysqli_query($conn"SELECT User, savedTries, timestamp FROM `stats` WHERE `user` = '$user'");

                if ( !
                $result ) {
                    
                printf("Fehler in SQL-Abfrage: %s\n"mysqli_error($link));
                }


                ?>
                Die Funktionen die hier jetzt fehlen brauchst du nicht und die, welche dir unbekannt sind liest du bitte erst mal im Handbuch nach.

                Kommentar


                • #9
                  Da waren auch ein paar Fehler mit Klammern und Semikolon, die ich behoben habe dennoch ist jetzt ein nächster Fehler aufgetreten.

                  Parse error: syntax error, unexpected 'user' (T_STRING), expecting ',' or ';' in D:\xampp\htdocs\spiel\stats.php on line 34
                  CODE:

                  PHP-Code:
                  // Alle Fehler berücksichtigen
                  error_reporting(-1);

                  // Fehler auch ausgeben
                  ini_set('display_errors'1);

                  // immer utf-8 ausgeben, ist Standard
                  header("Content-Type: text/html; charset=utf-8");


                  include 
                  __DIR__ 'spiel/endscreen.php';


                  // DB-Verbindung herstellen
                  $conn = new mysqli("localhost""root""""numberguess");

                  // sollte nur bei der Entwicklungsumgebung so aussehen, ansonsten andere Fehlerbehandlung verwenden
                  if ($mysqli->connect_errno) {
                      echo 
                  "Fehler bei der Verbindung zur DB: (" $mysqli->connect_errno ") " $mysqli->connect_error;
                  }

                  $conn->set_charset("utf8");


                  if (isset(
                  $_POST['user']))
                  {
                      
                  $user mysqli_real_escape_string($conn$_POST['user']);
                  }
                  else
                  {
                      
                  // Nur für diesen Testfall
                      
                  echo '$_POST['user'] ist nicht vorhanden, Folgende Daten werden übertragen:';
                      echo 
                  '<pre>';
                      
                  print_r($_REQUEST);
                      echo 
                  '</pre>';
                  }


                  //Selektiert die Einträge der DB
                  $result mysqli_query($conn"SELECT User, savedTries, timestamp FROM `stats` WHERE `user` = '$user'");

                  if ( !
                  $result ) {
                      
                  printf("Fehler in SQL-Abfrage: %s\n"mysqli_error($link));

                  Und meinen anderen Code habe ich unten erstmal auskommentiert.

                  Kommentar


                  • #10
                    Ich denke den habe ich eingebaut da ich den Code ja nicht getestet habe.

                    Ist hier aber nur das Anführungszeichen beim echo denke ich.(Zeilennummer ist nicht korrekt mit meiner)
                    Daher musst du das wohl so schreiben
                    PHP-Code:
                     echo '$_POST[\'user\'] ist nicht vorhanden, Folgende Daten werden übertragen:'
                    Oder andere Anführungsstriche verwenden.
                    Ich hoffe doch du weisst wie der Fehler entsteht.

                    Kommentar


                    • #11
                      Ok. An sich das Problem mit den oben genannten Fehlercode ist behoben, aber jetzt kommt der richtige Fehlercode. :

                      Code:
                      Warning: include(D:\xampp\htdocs\spielspiel/endscreen.php): failed to open stream: No such file or directory in D:\xampp\htdocs\spiel\stats.php on line 17
                      
                      Warning: include(): Failed opening 'D:\xampp\htdocs\spielspiel/endscreen.php' for inclusion (include_path='D:\xampp\php\PEAR') in D:\xampp\htdocs\spiel\stats.php on line 17
                      
                      Notice: Undefined variable: mysqli in D:\xampp\htdocs\spiel\stats.php on line 24
                      
                      Notice: Trying to get property of non-object in D:\xampp\htdocs\spiel\stats.php on line 24
                      $_POST['user'] ist nicht vorhanden, Folgende Daten werden übertragen:
                       Array (     [save] => Zu meinen Statistiken )  
                      Notice: Undefined variable: user in D:\xampp\htdocs\spiel\stats.php on line 46
                      Code:

                      PHP-Code:
                      // Alle Fehler berücksichtigen
                      error_reporting(-1);

                      // Fehler auch ausgeben
                      ini_set('display_errors'1);

                      // immer utf-8 ausgeben, ist Standard
                      header("Content-Type: text/html; charset=utf-8");


                      include 
                      __DIR__ 'spiel/endscreen.php';


                      // DB-Verbindung herstellen
                      $conn = new mysqli("localhost""root""""numberguess");

                      // sollte nur bei der Entwicklungsumgebung so aussehen, ansonsten andere Fehlerbehandlung verwenden
                      if ($mysqli->connect_errno) {
                          echo 
                      "Fehler bei der Verbindung zur DB: (" $mysqli->connect_errno ") " $mysqli->connect_error;
                      }

                      $conn->set_charset("utf8");


                      if (isset(
                      $_POST['user']))
                      {
                          
                      $user mysqli_real_escape_string($conn$_POST['user']);
                      }
                      else
                      {
                          
                      // Nur für diesen Testfall
                          
                      echo '$_POST[\'user\'] ist nicht vorhanden, Folgende Daten werden übertragen:';
                          echo 
                      '<pre>';
                          
                      print_r($_REQUEST);
                          echo 
                      '</pre>';
                      }


                      //Selektiert die Einträge der DB
                      $result mysqli_query($conn"SELECT User, savedTries, timestamp FROM `stats` WHERE `user` = '$user'");

                      if ( !
                      $result ) {
                          
                      printf("Fehler in SQL-Abfrage: %s\n"mysqli_error($link));
                      }



                      /*
                      $user = $_POST['user'];

                      if (get_magic_quotes_gpc())
                      {
                        $user = $_POST['user'];
                      }
                      else
                      $user = addslashes($_POST['user']);


                        //Selektiert die Einträge der DB
                        $result = mysqli_query($conn, "SELECT user, savedTries, timeStamp FROM `stats` WHERE `user` LIKE '" . $_POST['user'] . "'");
                      */


                      while ($row mysqli_fetch_array($result))
                      {
                          echo  
                      $row[0].  "<br />";
                          echo  
                      $row[1]. "<br />";
                          echo  
                      $row[2]. "<br />";

                      Ich bin auch auf die endscreen.php Seite gegangen um das komplette Array auf der stats.php Seite zu bekommen(wozu dieser Code ist).

                      Außerdem verstehe ich den include() Fehler irgendwie nicht, weil ich niergendswo was mit /spielspiel/ gemacht habe...



                      Kommentar


                      • #12
                        Liest du eigentlich auch die Fehlermeldungen? Mir kommt so vor du postest einfach nur Fehlermeldungen ins Forum und hoffst darauf, dass sie jemand für dich repariert. Das ist aber eigentlich eine eigene Aufgabe.

                        Kommentar


                        • #13
                          Na logisch lese ich dir Fehlermeldungen, sonst würde ich ja nicht nachfragen ...

                          Kommentar


                          • #14
                            Und da fällt dir nich auf, dass bei "D:\xampp\htdocs\spielspiel/endscreen.php" ein "spiel" zu viel drin ist?

                            Kommentar


                            • #15
                              Zitat von DevFlash Beitrag anzeigen
                              Außerdem verstehe ich den include() Fehler irgendwie nicht, weil ich niergendswo was mit /spielspiel/ gemacht habe...


                              Kommentar

                              Lädt...
                              X