Lacternobite
Hallo, ich habe vor eine Immobilien-Liste, geordnet nach meisten Besuchern, zu erstellen.
Damit ich nicht in jeder Datei die verfügbaren Immos angeben muss, hab ich mir eine objekt.inc.php gemacht:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
$query="SELECT objekt FROM i_auctions WHERE closed = 0 ORDER by itemcounter DESC";
$result=mysql_query($query);
$row=mysql_fetch_array($result, MYSQL_ASSOC);
if ( $row['objekt'] == 0 ){
$objekt0 = "Einfamilienhaus";
}elseif ( $row['objekt'] == 1 ){
$objekt1 = "Zweifamilienhaus";
}elseif ( $row['objekt'] == 2 ){
$objekt2 = "Reihenhaus";
...
...
...
}elseif ( $row['objekt'] == 32 ){
$objekt32 = "Baugrundstück unerschlossen";
}else
$objekt33 = "Landwirtschaftliche Fläche";
|
|
In der verarbeitenden Datei sieht das so aus:
| code: |
1:
2:
3:
|
print $object
|
|
(oder print $objekt

?
Die Abfrage erfolgt, sagen wir objekt=1 ist das meistbesuchte Objekt = Zweifamilienhaus.
Alle anderen Abfragen sind ab sofort irrelevant, da $objekt ja bereits mit Zweifamilienhaus belegt ist.
Das heisst, alle Objekte sind Zweifamilienhäuser.
Wer kann mir sagen, was ich falsch mache ?
Danke !
Hunter
@ Lacternobite
Ohne jetzt auf PHP speziell einzugehen machst du:
| code: |
1:
2:
3:
4:
5:
6:
7:
|
if ( $row['objekt'] == 0 ){
$objekt0 = "Einfamilienhaus";
}elseif ( $row['objekt'] == 1 ){
$objekt1 = "Zweifamilienhaus";
...
|
|
Du schmeisst also jede zutreffende Bedinung in eine einzelne Variable objekt0...x, willst aber am Ende nur objekt ausgeben. Du solltest also jede zutreffende Bedinung einfach nur in objekt (ohne Zahl) schmeissen. Dann sollte auch print $objekt klappen.
Lacternobite
Vorher hatte ich es so:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
$query = mysql_query ("SELECT objekt FROM i_auctions WHERE closed = 0 ORDER by itemcounter DESC");
$objekt = mysql_result ($query);
if ( $objekt == 0 ){
$objekt = "Einfamilienhaus";
}elseif ( $objekt == 1 ){
$objekt = "Zweifamilienhaus";
}elseif ( $objekt == 2 ){
$objekt = "Reihenhaus";
}elseif ( $objekt == 3 ){
$objekt = "Doppelhaus";
|
|
Da habe ich jede bedingung nur in $objekt "geschmissen", aber ohne Erfolg. Irgendwie logisch, denn:
Angenommen, das meistbesuchte Objekt = 0 = Einfamilienhaus.
Das zweitmeiste Objekt = 1 =Zweifamilienhaus ? Nein, denn $objekt wurde schon per 0=Einfamilienhaus definiert.
Das heisst, alle Objekte werden als Einfamilienhaus angezeigt...
Hunter
@ Lacternobite
:-)
Du hast mich falsch verstanden.... ich meinte es so:
| Zitat: |
if ( $row['objekt'] == 0 ){
$objekt = "Einfamilienhaus";
}elseif ( $row['objekt'] == 1 ){
$objekt = "Zweifamilienhaus";
}elseif ( $row['objekt'] == 2 ){
$objekt = "Reihenhaus";
|
Da er sich ja die Zahl aus $row['objekt'] holt und dann den String in $objekt (was ja was anderes ist, da nicht $row zugeordnet) schreibt.
Lacternobite
Also so:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
$query="SELECT objekt FROM i_auctions WHERE closed = 0 ORDER by itemcounter DESC";
$result=mysql_query($query);
$row=mysql_fetch_array($result, MYSQL_ASSOC);
if ( $row['objekt'] == 0 ){
$objekt = "Einfamilienhaus";
}elseif ( $row['objekt'] == 1 ){
$objekt = "Zweifamilienhaus";
}elseif ( $row['objekt'] == 2 ){
$objekt = "Reihenhaus";
|
|
ergibt als objekt immer Bürohaus....
Hunter
@ Lacternobite
Ich kenne jetzt weder deine Datenbank, noch weiss ich, ob deine Abfrage richtig ist.
Setz doch einfach mal nach $row=mysql_fetch_array($result, MYSQL_ASSOC); ein:
| code: |
1:
|
$row['objekt'] = 2; |
|
und schau ob immer Reihenhaus rauskommt. Wenn ja, passt die If-Abfrage.
Dann musst du dir Sorgen um deine Datenbankgeschichte machen.
Lacternobite
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
$query="SELECT objekt FROM i_auctions WHERE closed = 0 ORDER by itemcounter DESC";
$result=mysql_query($query);
$row=mysql_fetch_array($result, MYSQL_ASSOC);
$row['objekt']=2;
|
|
So ?
Ausgabe ist immer Wohnanlage (19)....
Hunter
@ Lacternobite
Dann probier mal folgendes:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
|
$query="SELECT objekt FROM i_auctions WHERE closed = 0 ORDER by itemcounter DESC";
$result=mysql_query($query);
$row=mysql_fetch_array($result, MYSQL_ASSOC);
print $row['objekt'];
$row['objekt']=2;
print $row['objekt'];
if ( $row['objekt'] == 0 ){
... die ganze If-Geschichte...
print $row['objekt'];
print $objekt;
|
|
Die erste Ausgabe sollte die Zahl aus der Datenbank sein, welche in row['objekt'] steht. (Warum eigentlich row auf englisch und objekt auf deutsch?)
Die dritte Ausgabe sollte immernoch 2 ergeben (sonst hast du da schon irgendwo einen Fehler in der If-Geschichte und die vierte Ausgabe sollte dann das Wort ergeben, welches durch die If-Abfragen gesetzt wird.
Vielleicht hast du einfach nur irgendwo objekt & object vertauscht?
Lacternobite
Ausgaben:
1522 oder 15 22 ? oder 15 2 2 ?
Reihenhaus
Reihenhaus
(Reihenhaus = 2)
das heisst, die ausgaben sind identisch mit 2 = Reihenhaus.
Nur das Problem ist ja, das offensichtlich die erste Abfrage nach dem meistbesuchten Artikel stimmt, aber alle anderen (2.-meiste, drittmeiste usw.) ebenfalls das Objekt aus der ersten wahren Abfrage erhalten....
Das heisst, meistbesuchter Artikel = Reihenhaus.
zweitmeister: Reihenhaus
drittmeister: Reihenhaus
usw...
edit:
Hab das ganze auf
| code: |
1:
2:
3:
4:
5:
6:
7:
|
DB-Abfrage
print $row['objekt'];
if-Abfrage
|
|
reduziert, und erhalte aus
| code: |
1:
|
print $row['objekt']; |
|
eine 15..
die 15 bedeutet Bürohaus, und alle Objekte heissen jetzt Bürohaus....
Hunter
@ Lacternobite
Reduzier mal auf:
| code: |
1:
2:
|
DB-Abfrage
print $row['objekt']; |
|
Also gleich nach der Abfrage die Ausgabe machen.
Wenn da nicht das rauskommt, was rauskommen soll, dann ist deine Abfrage falsch.
Hast du eigentlich mal $row['object'] versucht?
(Also beides auf Englisch...)
Oder anders gefragt, weisst du eigentlich, wie deine Datenbank aufgebaut ist?
Lacternobite
Ausgabe ist ebenfalls 15, das heisst das meistbesuchte Objekt ist ein Bürohaus.
Das entsprechende Feld in der Tabelle i_auctions lautet objekt. Von daher würd ich mit object ne Fehlermeldung bekommen....
Hunter
@ Lacternobite
Gut, dann versteh ich das Problem gerade nicht.
Wenn eine 15 in der Datenbank steht, dann ists doch gut, wenn der Name Bürohaus rauskommt, oder hab ich das jetzt falsch aufgefasst?
Oder klappt deine If-Abfrage nun nicht?
Wenn nicht, dann poste mal deine gesamte.
Lacternobite
Die 15 ist offensichtlich korrekt.
Das Problem ist, dass ich die Objekt-Typen der meistbesuchten Auktionen (8 Stück) aus der Datenbank ausgelesen werden sollen.
Nun ist offenbar das meistbesuchte Objekt ein Bürohaus.
Alle anderen Objekte werden jetzt ebenfalls Bürohaus genannt, obwohl es vielleicht Einfamilienhäuser etc sind.
Das heisst, das Script ordnet den meistbesuchten Auktionen 2-8 ebenfalls den Titel der ersten zu.
Beispiel:
A= Büro
B= Einfam.-haus
C= Zweifam.haus
etc
Das Script macht jetzt folgendes:
A= Büro
B= Büro ( statt EFH)
C= Büro (statt 2FH)
und so weiter...
Hunter
@ Lacternobite
| code: |
1:
2:
3:
|
$query="SELECT objekt FROM i_auctions WHERE closed = 0 ORDER by itemcounter DESC";
$result=mysql_query($query);
$row=mysql_fetch_array($result, MYSQL_ASSOC); |
|
Hmm, also bis jetzt hast du bloss einmaliges Auslesen gepostet. Irgendwo müsste ja nun noch auftauchen, dass objekt nicht nur einmal, sondern mehrmals nacheinander ausgelesen wird.
Lacternobite
und wie kann ich das realisieren ?
Hunter
@ Lacternobite
Kann ich dir nicht sagen, dazu müsste ich mich wieder mit PHP und MySQL beschäftigen, bin aber gerad an anderen Sachen.
Aber du kannst ja mal beginnen, dir z.B. die folgende Anleitung durchzulesen:
http://www.phpcenter.de/de-html-manual/
Lacternobite
@Hunter: Vielen Dank 0)
------------------------------------------------
die Auslesung ist zwar einmalig, aber ausgelesen werden alle Objekte nach Besuchern, absteigend.
Doch wie mache ich das, dass als nächstes das Objekt der zweit-meistbesuchten Auktion ausgegeben wird ?
Weiss noch jemand Rat ?
Hugoo00
Probier mal eine Schleife zu setzten neben $row .... und in dem query hasute neben WHERE Abfrage noch nen LIMIT (siehe code)
dannimmste die Zahlen weg bei $objekt und links neben dem = machste nen punkt bei allen (siehe code)
Hier das Beispiel: (Hab es nicht getestet) HINWEIS: nicht { } bei der while schleife vergessen
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
|
$query="SELECT objekt FROM i_auctions WHERE closed = 0 ORDER by itemcounter DESC LIMIT 8";
$result=mysql_query($query);
while($row=mysql_fetch_array($result, MYSQL_ASSOC)) {
if ( $row['objekt'] == 0 ){
$objekt .= "Einfamilienhaus";
}elseif ( $row['objekt'] == 1 ){
$objekt .= "Zweifamilienhaus";
}elseif ( $row['objekt'] == 2 ){
$objekt .= "Reihenhaus";
...
...
...
}elseif ( $row['objekt'] == 32 ){
$objekt .= "Baugrundstück unerschlossen";
}else
$objekt .= "Landwirtschaftliche Fläche";
}
|
|