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

  • Jogurt
    hat ein Thema erstellt [Erledigt] Notice: Trying to get property of non-object.

    [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

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

    Einen Kommentar schreiben:


  • mermshaus
    antwortet
    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.

    Einen Kommentar schreiben:


  • rkr
    antwortet
    Ich glaube Mermshaus meinte jetzt nur diese interessante Stringkonstuktion

    Einen Kommentar schreiben:


  • ChristianK
    antwortet
    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.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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?

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • uha
    antwortet
    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.

    Einen Kommentar schreiben:


  • Jogurt
    antwortet
    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

    Einen Kommentar schreiben:


  • uha
    antwortet
    Da fehlen eindeutig Blanks
    PHP-Code:
    $query $db->query('SELECT ' $var ' FROM player WHERE id= ' $id); 

    Einen Kommentar schreiben:


  • Jogurt
    antwortet
    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

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    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.

    Einen Kommentar schreiben:


  • rkr
    antwortet
    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

    Einen Kommentar schreiben:


  • uha
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X