Catchable fatal error: <--PHP-Problem
florifrosch
- php
2 Vinzenz Mai0 dedlfix
Ich steh vor dem folgenden Problem:
Catchable fatal error: Object of class stdClass could not be converted to string in /var/www/servergame0.01prealpha/game/forschung.list.php on line 36
Es gibt 2 Tabellen, die abgefragt werden:
::tech_users::
id // ID des users
techlevel // Gesamttechnologiestufe des users
ram // Einzelne Technologiestufen...
hdd
::tech_data:
id // ID der Technologie
tech_g_name // Technologie-Gruppe-Name
techlevel // Techlevel der Technologie
tech_id_name // Name der Technologie
Die einzelnen Technologiestufen werden aus tech_users gelesen und anschließend werden alle datensätze aus tech_users gelesen, wo der techlevel dem techlevel des users entspricht.Danach soll unterschieden werden, ob die Technologie schon erforscht ist.Jetzt weiß ich nicht was ich schreiben soll,
<?php
// AUSSCHNITT
// Was soll ich hier nach $forschung schreiben???
echo "<br>tech-name-techlevel:<br> $forschung->'$tech_name'<br>";
if($forschung->'$tech_name' = $techlevel){
echo "Tech wurde schon erforscht<br><br>";
}else{
echo "<br>Technologie erforschbar!<br>";
}
?>
<?php
//forschungszentrum
session_start();
//hier können technologien erforscht werden
// game/forschung.list.php
if(!session_is_registered('user') || $_SESSION['user'] = "") {
header("location:../index.php");
die;
}
include("../connect.inc.php");
?>
<link rel="stylesheet" type="text/css" href="../style.css">
<body>
<p><h2>Forschungzentrum</h2></p>
<font size="-2">erforschen sie neue technologien</font><br>
<?php
$id = $_SESSION['id'];
$forschungsquery = @mysql_query("SELECT * FROM tech_users WHERE id = '$id'");
$forschung = @mysql_fetch_object($forschungsquery);
$techlevel = $forschung->techlevel;
$dataquery = @mysql_query("SELECT * FROM tech_data WHERE techlevel = '$techlevel'");
while($tech = @mysql_fetch_object($dataquery)){
$tech_name = $tech->tech_g_name;
echo "Gruppen-Name: !!!!!! $tech_name<br>";
echo "Tech-name: $tech->tech_id_name<br><br>";
// Was soll ich hier nach $forschung schreiben???
echo "<br>tech-name-techlevel:<br> $forschung->'$tech_name'<br>";
if($forschung->'$tech_name' = $techlevel){
echo "Tech wurde schon erforscht<br><br>";
}else{
echo "<br>Technologie erforschbar!<br>";
}
//while schleife ende
}
?>
<br><font size="-1">under construction</font>
</body>
Danke, wenn ihr mir helfen könntet
florifrosch
Hallo
Die einzelnen Technologiestufen werden aus tech_users gelesen und anschließend werden alle datensätze aus tech_users gelesen, wo der techlevel dem techlevel des users entspricht.
es hat zwar nichts direkt mit Deinem Problem zu tun:
das hört sich danach an, als möchtest Du einen INNER JOIN verwenden.
Danach soll unterschieden werden, ob die Technologie schon erforscht ist.Jetzt weiß ich nicht was ich schreiben soll,
[code lang=php]
// Was soll ich hier nach $forschung schreiben???
echo "<br>tech-name-techlevel:<br> $forschung->'$tech_name'<br>";
sieht danach aus, als sollte Technologie ein assoziatives Array von assoziativen Arrays sein.
<font size="-2">erforschen sie neue technologien</font><br>
also bitte, das <font>-Element ist eigentlich schon im letzten Jahrtausend gestorben, lass es bitte friedlich in seinem Grab ruhen. Verwende CSS.
$forschungsquery = @mysql_query("SELECT * FROM tech_users WHERE id = '$id'");
SELECT * ist böse, insbesondere, wenn Du nur die Spalte "techlevel" haben willst und den Rest wegwirfst. Du bestellst doch im Restaurant auch nicht alles, was die Speisekarte hergibt, wenn Du nur ein bestimmtes Gericht essen willst.
Dass etwas schief gehen könnte, kommt Dir übrigens nicht in den Sinn, daher fehlt jegliche Fehlerbehandlung.
$forschung = @mysql_fetch_object($forschungsquery);
$techlevel = $forschung->techlevel;$dataquery = @mysql_query("SELECT * FROM tech_data WHERE techlevel = '$techlevel'");
Wieder SELECT * ...
while($tech = @mysql_fetch_object($dataquery)){
.. wieder keine Fehlerbehandlung :-(
Wahrscheinlich solltest Du Deine Objekte geschickter aufbauen, damit Du problemlos auf Deine Objekte, ihre Eigenschaften und Methoden zugreifen kannst - und nicht Fehler produzierst.
Freundliche Grüße
Vinzenz
echo $begrüßung;
$forschung = @mysql_fetch_object($forschungsquery);
// Was soll ich hier nach $forschung schreiben???
echo "<br>tech-name-techlevel:<br> $forschung->'$tech_name'<br>";
Wenn du mit den Grundlagen der Objekt-Notation nicht zurecht kommst, dann lies nochmal das Kapitel zur OOP, oder verwende keine OOP. Es gibt schließlich auch noch mysql_fetch_assoc(). Für beide Funktionen stehen Anwendungsbeispiele im Handbuch. Da ist auch die richtige Notation zu sehen
$techlevel = $forschung->techlevel;
Hier gehts doch (wenngleich der Umkopiervorgang ohne erkennbaren Sinn ist).
if($forschung->'$tech_name' = $techlevel){
Eine Zuweisung statt eines Vergleichs zu notieren ist auch ein gern gemachter Fehler (abgesehen vom fehlenden Grundlagenwissen der Objekt-Notation).
echo "$verabschiedung $name";