Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Notice: Trying to get property of non-object

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Notice: Trying to get property of non-object

    Hallo zusammen,

    hoffe ich schreibe hier auch im richtigen Forum...
    und zwar hab ich ein kleines problem bei einer mehr oder weniger simplen SELECT abfrage über eine funktion.

    PHP-Code:
    function output_user($var)
    {
         global 
    $id;
        
    $query mysql_query('SELECT '.$var.' FROM player WHERE id=' .$id'');
        
    $row mysql_fetch_object($query);
        return 
    $row->$var;    

    $id wird oberhalb der funktion als " 1 " definiert.

    $id=1;

    Ich versuche mit dieser funktion, aus der Tabelle "player" das feld "name" mit der zugehörigen id = 1 auszulesen. die werte in der tabelle habe ich über phpmyadmin angelegt und wie folgt definiert.

    id,INTEGER,AUTO INCREMENT ON, MAXSIZE 9
    name,VARCHAR,MAXSIZE 20

    diese Felder sind also nicht leer und sollte im besten falle Daten zurückgeben.
    in diesem fall sollte "admin" ausgegeben werden. Allerdings bekomme ich immer diese SQL Fehlermeldung.

    Code:
    Benutzer:
    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\futopia\index.php on line 17
    
    Notice: Trying to get property of non-object in C:\xampp\htdocs\futopia\index.php on line 18
    die Funktion wird mit dieser Zeile aufgerufen:

    Code:
    <div id="username">Benutzer:<?php echo output_user('name'); ?></div>
    Die Datenbank verbindung funktioniert, dafür hab ich diesen teil verwendet:

    PHP-Code:
    $id=1;
    $link mysql_connect('localhost''fuadm''xxx');
            
    mysql_select_db('futopia');
    if (!
    $link) {
        die(
    'Verbindung schlug fehl: ' mysql_error());
    }
    echo 
    'Verbindung hergestellt';
    mysql_close($link); 
    da ich noch nicht allzuviel gecoded habe wollte ich euch fragen ob ihr auf anhieb einen fehler entdecken könnt, oder mir tipps geben wie das besser zu realisieren ist

    zum testen greift der user "fuadm" mit vollen berechtigungen auf die Datanbank zu... liegt hier vielleicht schon das problem ?

    Vielen Dank & Viele Grüße
    Jogurt


  • #2
    Globals sind bäh, macht man nicht!!!

    Du benutzt die veraltete MySQL-Extension, baue um auf die MySQLi-Extension

    Baue ein mysqli_error nach dem mysqli_query ein und überprüfe, ob es überhaupt einen Treffer in der DB gibt
    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
      Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
      Choosing an API
      Warum man mysql* generell nicht (mehr) nutzen sollte.
      Wie man von mysql* auf PDO umsteigt
      Wissenswertes zum Thema SQL-Injection
      Standards - Best Practices - AwesomePHP - Guideline für WebApps

      Kommentar


      • #4
        PHP-Code:
        'SELECT '.$var.' FROM player WHERE id=' .$id''
        mysql_fetch_object(): supplied argument is not a valid MySQL result resource in
        Befrage die Datenbank nach dem Fehler... lass dir das SQL Statement mal auf dem Bildschirm ausgeben und probier es direkt auf der Datenbank, z.B. mit phpMyAdmin.
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Hallo und Vielen Dank schonmal

          ich habe den rat von rkr beherzigt und hab mir mal PDO angeschaut, meine funktion sieht bisher so aus:

          PHP-Code:
          <?php

          function output_user($var)
          {
           
          $id=1;
           include 
          'dbconnect.php';
           
          $query $db->query('SELECT name FROM player WHERE id=1');
           
          $fetch $query->fetch();
           echo 
          $fetch['name'];
           
          }

          ?>
          funktioniert soweit auch einwandfrei, wenn ich diese funktion jetzt aufrufe über die selbige zeile wie vorhin
          Code:
          <div id="username">Benutzer:<?php echo output_user('name'); ?></div>
          bekomm ich die korrekte Ausgabe " Benutzer: admin "

          allerdings schaffe ich es nicht in das Select Statement die Variablen einzubinden. Die Zeile

          PHP-Code:
           $query $db->query('SELECT' .$var'FROM player WHERE id= '.$id.''); 
          gibt wieder eine Fehlermeldung aus, ohne Variable ist die ausgabe korrekt, daher nehme ich an ich habe einfach die Falsche syntax ? Bitte nochmals um hilfe

          Benutzer:
          Fatal error: Call to a member function fetch() on a non-object in C:\xampp\htdocs\futopia\index.php on line 8

          Kommentar


          • #6
            Da fehlen eindeutig Blanks
            PHP-Code:
            $query $db->query('SELECT ' $var ' FROM player WHERE id= ' $id); 
            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


            • #7
              oh man .. VIELEN VIELEN DANK !

              also die syntax... hätte nach $id das statement direkt beenden sollen, auf blanks werd ich in zukunft verstärkt achten

              Kommentar


              • #8
                Der entscheidende Fehler liegt hier:
                Code:
                'SELECT' .$var. 'FROM
                Gehen wir won aus, dass in $var das Wort 'spalte' steht. Dann wird daraus:
                Code:
                'SELECTspalteFROM
                Die anderen Blanks habe ich nur der Lesbarkeit wegen dazugetan.
                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


                • #9
                  Zitat von uha Beitrag anzeigen
                  Der entscheidende Fehler liegt hier:
                  Code:
                  'SELECT' .$var. 'FROM
                  Gehen wir won aus, dass in $var das Wort 'spalte' steht. Dann wird daraus:
                  Code:
                  'SELECTspalteFROM
                  Die anderen Blanks habe ich nur der Lesbarkeit wegen dazugetan.

                  Daher nutze ich auch immer
                  "
                  Code:
                  $sql = "select * from Nord where pol"
                  oder

                  PHP-Code:
                  $sql '  "select * from ' $var_Nord ' where ' $pol .'  "  ' 
                  bitte die leerzeichen nur als verdeutlichung betrachten

                  Da bekommt imme rein sauberes select und kann die fehlerquote direkt eingrenzen

                  Kommentar


                  • #10
                    @MrJung: Ich glaube, den Post solltest du noch mal überdenken. Das ergibt so nicht wirklich viel Sinn.

                    Kommentar


                    • #11
                      Zitat von mermshaus Beitrag anzeigen
                      @MrJung: Ich glaube, den Post solltest du noch mal überdenken. Das ergibt so nicht wirklich viel Sinn.
                      Na nun bin ich gespannt?
                      Wieso macht das kein Sinn?

                      Kommentar


                      • #12
                        Select * ist böse und kann zu unerwartetem Verhalten führen. Besser ist es, alle notwendigen Spalten konkret anzugeben (und nicht notwendige wegzulassen). Minimiert die benötigten Ressourcen und schafft die Sicherheit, dass stets alle notwendigen Spalten mit den korrekten Daten gefüllt sind.
                        GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                        Kommentar


                        • #13
                          Ich glaube Mermshaus meinte jetzt nur diese interessante Stringkonstuktion
                          Standards - Best Practices - AwesomePHP - Guideline für WebApps

                          Kommentar


                          • #14
                            Genau.

                            PHP-Code:
                            $sql '  "select * from ' $var_Nord ' where ' $pol .'  "  ' 
                            Beziehungsweise ist der Beitrag halt… Ach, was soll ich sagen.

                            Da bekommt imme rein sauberes select und kann die fehlerquote direkt eingrenzen
                            Dazu heißt es ja oft „man versteht doch, was gemeint ist“ (tut man hier übrigens nicht wirklich), aber…

                            Den inhaltlichen Mehrwert erkenne ich bei dem Beitrag auch nicht und auch mindestens über den Sinn von WHERE pol kann man sicher diskutieren.

                            Kommentar


                            • #15
                              MrJung hat sich bereits verabschiedet, nachdem er vorher noch mal über das geringe Niveau des Boards geheult hat.
                              --

                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                              --

                              Kommentar

                              Lädt...
                              X