Trying to get property of non-object

OP #3617815
Lesenswert?

Hallo zusammen
Ich habe das Problem, dass wenn ich eine php-Website ausführen will. 
folgende Fehlermeldung kommt:
1
Notice: Trying to get property of non-object in /var/www/... on line 154

Hier ist der Code:
1
$data = mssql_fetch_object($temp);
2
if($data->change_priority == "1")    <--- Zeile 154
3
{
4
    ....
5
}

Wo liegt das Problem?
Danke für die Hilfe

MfG
#3617828
Lesenswert?

P_ Richner schrieb:
> Wo liegt das Problem?

Des Rätsels Lösung hast du doch eh schon selbst sogar zwei Mal gepostet: 
"Trying to get property of non-object".

In Zeile 154 greifst du auf die Property des $data-Objekts zu ("Trying 
to get property..."). Zumindest versuchst du das, denn laut der 
Fehlermeldung ist $data kein Objekt(... of non-object). Also wirf mal 
den Debugger an und schau, was das sonst ist.
#3617831
Lesenswert?

P_ Richner schrieb:
> Wo liegt das Problem?

Dokumentation nicht gelesen:
http://www.php.net/manual/en/function.mssql-fetch-object.php

Vor allem:
1
Returns an object with properties that correspond to the fetched row, or FALSE if there are no more rows.

"FALSE" ist kein Objekt, und hat keine Eigenschaft "change_priority".

Also:
$data = mssql_fetch_object($temp);
if (!$data) { die("Something went wrong"); }
if($data->change_priority == "1")


oder mit mssql_num_rows($query) vorher prüfen, wieviele Zeilen gefunden 
wurden, oder, oder...
OP #3617843
Lesenswert?

Εrnst B✶ schrieb:
> $data = mssql_fetch_object($temp);
> if (!$data) { die("Something went wrong"; }
> if($data->change_priority == "1")

Habe es so ausprobiert und ich erhalte die Fehlermeldung "Something went 
wrong". D.h., dass ich keine Daten erhalte. Aber wie kann ich das 
ändern?
Habe es auch mit mssql_fetch_row() und mssql_fetch_array() probiert, 
geht trotzdem nicht.
#3617868
Lesenswert?

P_ Richner schrieb:
> Habe es so ausprobiert und ich erhalte die Fehlermeldung "Something went
> wrong". D.h., dass ich keine Daten erhalte. Aber wie kann ich das
> ändern?

1. Datenbanktabelle anlegen
2. Datenbanktabelle mit Daten befüllen
3. Datenbankverbindung herstellen 
http://www.php.net/manual/en/function.mssql-query.php
4. Daten abfragen 
http://www.php.net/manual/en/function.mssql-fetch-object.php
5. Nach dem Erfolgserlebnis erst einmal die DOKU lesen, dort steht das 
mit einfachsten Beispielen beschrieben.

P.S.: schau dir einmal deinen Eingangspost an. Wie glaubst du soll dir 
jemand mit diesem Miniausschnitt gezielt weiterhelfen?
OP #3617879
Lesenswert?

Die Datenbank ist schon vorhanden. Die Website wurde vor vier Jahren 
programmiert und damals funktionierte alles. Jetzt muss ich sie auf den 
neusten Stand bringen...
1
function(...)
2
{
3
  sql_open();
4
  $temp = mssql_query("SELECT * FROM [USER] WHERE [User] = '".ldap_name($_SERVER['AUTHENTICATE_SAMACCOUNTNAME'])."'");
5
  
6
  $data = mssql_fetch_object($temp);
7

8

9
  if (!$data)  
10
    die("Keine Daten erhalten"); 
11

12
  if($data->change_priority == "1")  <-- Fehlermeldung: Notice: Trying to get property of non-object in /var/www/xxx.php on line 162
13
  {
14

15
  }
16
}

Hoffe dies hilft weiter.
#3617893
Lesenswert?

Also: Statt die("Keine Daten erhalten") einfach ein die("Useraccount 
existiert nicht") einsetzen, und schon passt alles wieder.

Du versuchst einen Datensatz aus der USER-Tabelle zu lesen, der nicht 
existiert. Wie darauf richtig zu reagieren ist, musst du selber wissen.
#3617925
Lesenswert?

Dann geht's los mit schrittweisem Debugging:

1. Welche Query ("SELECT * FROM [USER] WHERE [User] = 
'".ldap_name($_SERVER['AUTHENTICATE_SAMACCOUNTNAME'])."'") wird 
überhaupt erzeugt? Lass dir das ausgeben. Kann das stimmen?

2. Schaut das gut aus, dann führe das direkt in der Datenbank aus. 
Kommen dort Ergebnisse heraus?

3. Wenn ja, dann schau was in deinem $temp (übrigens nicht gerade eine 
gute Variablenbezeichnung) drinsteht. Doku lesen: "Returns a MS SQL 
result resource on success, TRUE if no rows were returned, or FALSE on 
error."
Wenn TRUE oder FALSE, dann hast du hier ein Problem, ansonsten weiter 
mit dem nächsten Schritt:

4. Den Schritt hast du ja schon gemacht, also eigentlich von hinten 
begonnen. Überprüfe $data. Hier steht ja anscheinend FALSE drinnen. 
Trotzdem noch einmal explizit ausgeben lassen und überprüfen was 
wirklich drinsteht.
OP #3617928
Lesenswert?

Hier noch eine Funktion, mit der es geht:
1
function (...)
2
{
3
  sql_open();
4
  $temp = mssql_query("SELECT * FROM [USER] WHERE [User] = '".ldap_name($_SERVER['AUTHENTICATE_SAMACCOUNTNAME'])."'");
5
  $data = mssql_fetch_object($temp);
6
  if($data->change_user == "1")
7
  {
8
     ...
9
  }
10
  sql_close();
11
}

Ich sehe nicht, wo der Unterschied ist.
#3617962
Lesenswert?

P_ Richner schrieb:
> Es ist ja codemässig genau dasselbe, nur mit anderen Ausführungen in der
> if()-Abfrage.

Es geht nicht nur darum, was in der Funktion steht, sondern auch 
wann und wo sie ausgeführt wird.

Wenn der Programmierer der funktionierenden Funktion durch Checks 
vorher, durch Programmlogik, Zugriffsbeschränkungen, .htaccess, whatever 
sichergestellt hat, dass seine Funktion nur für gültige, eingeloggte, 
Benutzer ausgeführt wird, und du das für die neue Funktion nicht tust, 
dann geht die alte weiterhin, und deine neue halt nicht, oder nur 
manchmal, oder vielleicht zufälligerweise sogar immer.

=> Du musst verstehen was du tust.
Nicht per Copy&Paste irgendwas zusammenstöpseln, und dann hoffen dass 
ein Webforum das irgendwie in eine lauffähige Form zusammenwürfeln kann.


Sorry wenn das böse klingt, aber so ist es einfach. Wir können hier, 
ohne alles aussenrum zu kennen, nur an Symptomen herumdoktorn, aber das 
eigentliche Problem nicht sehen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren