Passendes Bild zu DB Eintrag zeigen?!
In meiner MySQL Tabelle stehen Felder für, Automarke, Automodell, Baujahr usw.
In einem image Ordner liegen die passenden Grafiken zu den einzelnen Bezeichnungen. Nun möchte ich gern das Image auf der Site zeigen wenn in der DB das entsprechende Feld ausgefüllt wurde. Zurzeit wird lediglich der Textinhalt des Feldes aus der DB ausgelesen.
Nun hatte ich folgendes versucht:
Leider klappt das aber nicht
Wie kann ich das passende Image zum Feldeintrag anzeigen lassen?
Natürlich stehen mehrere img src Tags untereinander. Es sollen aber immer nur die Images gezeigt werden, bei denen ein Eintrag in der DB steht!
In einem image Ordner liegen die passenden Grafiken zu den einzelnen Bezeichnungen. Nun möchte ich gern das Image auf der Site zeigen wenn in der DB das entsprechende Feld ausgefüllt wurde. Zurzeit wird lediglich der Textinhalt des Feldes aus der DB ausgelesen.
|
|
PHP-Quelltext |
1 |
echo '.$zeile['Mercedes'].'
|
Nun hatte ich folgendes versucht:
|
|
PHP-Quelltext |
1 |
echo <img src="imges/symbole/mercedes.png" />'.$zeile['Mercedes'].'
|
Leider klappt das aber nicht
Wie kann ich das passende Image zum Feldeintrag anzeigen lassen?
Natürlich stehen mehrere img src Tags untereinander. Es sollen aber immer nur die Images gezeigt werden, bei denen ein Eintrag in der DB steht!
Zitat
In meiner MySQL Tabelle stehen Felder für, Automarke, Automodell, Baujahr usw.
Vielleicht habe ich das ja falsch verstanden aber wenn das alles in einer Tabelle steht verstößt das gegen Grundsätze der Datenbankentwicklung. Du speicherst die Automarke(Hersteller) bei dem Auto ab, es wäre aber schöner und auch leichter Auto und Marke zu trennen, das heißt du hast die Autos in einer Tabelle und die Hersteller in einer Tabelle.
Nun kannst du dir aussuchen, entweder gibst du die Hersteller als ID beim Auto an (als FK) oder du bastelst eine Verbindungstabelle,wo jeder Auto_ID eine HERSTELLER_ID zugeordnet ist. das erspart dir bei Änderungen am Hersteller eine Menge Anpassungsaufwand, außerdem kannst du das Modell und den Hersteller immer wieder von dort Nutzen ohne jedesmal eien unnötige Zusatzinformation in deiner Auto-Tabelle zu speichern.
|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
TB_AUTO:
AUTO_ID int(7) auto_increment PK,
AUTO_NAME varchar(32) NOT NULL,
...
...
TB_HERSTELLER:
HERTSELLER_ID int(7,0) auto_increment PK,
HERSTELLER_NAME varchar(32) NOT NULL,
...
TB_MODELL:
MODELL_ID int(7,0) auto_increment PK,
MODELL_NAME varchar(32) NOT NULL,
...
...
TB_VERBINDUNG:
A_ID int(7,0) NOT NULL,
H_ID int(7,0) NOT NULL,
M_ID int(7,0) NOT NULL,
PRIMARY KEY(A_ID, H_ID, M_ID),
FOREIGN KEY(a_ID = TB_AUTO.AUTO_ID, M_ID = TB_MODELL.MODELL_ID, H_ID = TB_HERSTELLER.HERSTELLER_ID)
|
Entschuldigt wenn das ein bisschen ungenau ist, aber das war so das einzige was mir zu später stunde noch einfiel außerdem habe ich wenig mit MySQL am Hut ich bin eher Oracle PL/SQL'er.
Zu deinem Problem: Wie Josephine schon geschrieben hat, speichere die Bildlinks mit in der Datenbank oder du benennst die Bilder wie die Autos selber und fügst immer folgends ein:
|
|
PHP-Quelltext |
1 |
echo <img src="imges/symbole/"'.$zeile['autoname'].'".jpg" />'.$zeile['Mercedes'].'
|
Wobei die Methode von Josephine wahrscheinlich Fehler eher ausschließen würde.
Sollte etwas unklar sein kannst du dich gerne bei mir melden.
VG,
Moee
Mfg
Moee
Moee
Vielen Dank für eure Tipps.
Ich habe es nun erst mal so gelöst:
Das fuinktioniert auch wunderbar!
Das Problem an der Sache ist aber, das ich, wenn ich einen neuen DB Eintrag erstelle, auch jedes mal in die Zelle "Mercedes" das Wort Mercedes eintragen muss.
Ich hatte mir nun folgendes überlegt:
Ich erstelle eine neue Zeile mit: Spaltenname:Mercedes, Typ:int(1), Null:ja, Standart:0
Dann müsste ich beim erstellen einer neuen Zeile nur noch den Hacken bei "Mercedes" (wenn gewünscht) reinmachen und es würde in der PHP Datei mit ausgegeben.
Jetzt aber mein neues Problem; wie mach ich das?
Wie lese ich in PHP den Spaltennamen aus und gebe die entsprechende Information aus (also den Spaltennamen als Text) wenn bei "Null" der Hacken drin ist?
Versteht ihr was ich meine?
Ich habe es nun erst mal so gelöst:
|
|
PHP-Quelltext |
1 |
echo <img src="imges/symbole/"'.$zeile['Mercedes'].'".jpg" />'.$zeile['Mercedes'].'
|
Das fuinktioniert auch wunderbar!
Das Problem an der Sache ist aber, das ich, wenn ich einen neuen DB Eintrag erstelle, auch jedes mal in die Zelle "Mercedes" das Wort Mercedes eintragen muss.
Ich hatte mir nun folgendes überlegt:
Ich erstelle eine neue Zeile mit: Spaltenname:Mercedes, Typ:int(1), Null:ja, Standart:0
Dann müsste ich beim erstellen einer neuen Zeile nur noch den Hacken bei "Mercedes" (wenn gewünscht) reinmachen und es würde in der PHP Datei mit ausgegeben.
Jetzt aber mein neues Problem; wie mach ich das?
Wie lese ich in PHP den Spaltennamen aus und gebe die entsprechende Information aus (also den Spaltennamen als Text) wenn bei "Null" der Hacken drin ist?
Versteht ihr was ich meine?
ich würde sagen es ist ein falsches DB Design, wenn du spalten wie Mercedes, Audi, BWM usw hast. ich würde das eher so machen wie Moee also eine Tabelle mit Marken und Autos
so dass du dann sowas machen kannst
damit dann als ergebnis dann das erscheint
so dass du dann sowas machen kannst
|
|
PHP-Quelltext |
1 |
echo '<img src="imges/symbole/"'.$zeile['marke'].'".jpg" />'.$zeile['marke'];
|
damit dann als ergebnis dann das erscheint
|
|
HTML |
1 2 3 |
<img src="imges/symbole/vw.jpg" />vw <img src="imges/symbole/Mercedes.jpg" />Mercedes <img src="imges/symbole/audi.jpg" />Audi |
Mein kleines Projekt
-Cruel Online-
-Cruel Online-
Informiere dich mal im Allgemeinen zu den Themen Datenbankmodellierung und Normalformen, dann bist du eigentlich auf dem richtigen Wege eine fachlich und technisch Korrekte Datenbank zu erstellen.
Eine Datenbank versuch immer so viele Fälle wie möglich abzudecken ohne mit einer Erweiterung auskommen zu müssen.
Link:
http://reeg.junetz.de/DSP/node7.html
Es ist nicht nur eine Frage der Schönheit, sondern auch eine Frage der Performance und der Wartbarkeit.
Eine Korrekt erstellte Datenbank (Alle Normalformen bzw. min die ersten 3) lässt sich im nachhinein besser überarbeiten und erweitern.
Eine Datenbank versuch immer so viele Fälle wie möglich abzudecken ohne mit einer Erweiterung auskommen zu müssen.
Link:
http://reeg.junetz.de/DSP/node7.html
Es ist nicht nur eine Frage der Schönheit, sondern auch eine Frage der Performance und der Wartbarkeit.
Eine Korrekt erstellte Datenbank (Alle Normalformen bzw. min die ersten 3) lässt sich im nachhinein besser überarbeiten und erweitern.
Mfg
Moee
Moee
Also, zur Zeit lese ich die Daten aus der DB erfolgreich so aus:
Und so stehen die Daten in der DB:

Ich möchte aber, das man beim Eintragen in die DB nur noch einen Hacken im entsprechendem Feld macht, damit das gleiche Ergebnis wie mit der oberen Methode erziehlt wird. Man also nicht jedes mal "Mercedes", "Audi" usw. eintippen muss wenn man einen neuen Eintrag in die DB macht.
So wie auf diesem Bild habe ich mir das vorgestellt:

Wenn der Hacken an ist, wird das Bild und der Text auf der Site angezeigt. Wenn der Hacken nicht gesetzt ist, wird nichts angezeigt!
Das heißt, der Spaltenname ist gleichzeitig auch der Image Name und der "Text" der auf der Site angegeben wird.
|
|
PHP-Quelltext |
1 2 3 4 |
echo'
<img src="images/car/'.$zeile['Mercedes'].'.png" /></td><td>'.$zeile['Mercedes'].'
<img src="images/car/'.$zeile['Audi'].'.png" /></td><td>'.$zeile['Audi'].'
';
|
Und so stehen die Daten in der DB:

Ich möchte aber, das man beim Eintragen in die DB nur noch einen Hacken im entsprechendem Feld macht, damit das gleiche Ergebnis wie mit der oberen Methode erziehlt wird. Man also nicht jedes mal "Mercedes", "Audi" usw. eintippen muss wenn man einen neuen Eintrag in die DB macht.
So wie auf diesem Bild habe ich mir das vorgestellt:

Wenn der Hacken an ist, wird das Bild und der Text auf der Site angezeigt. Wenn der Hacken nicht gesetzt ist, wird nichts angezeigt!
Das heißt, der Spaltenname ist gleichzeitig auch der Image Name und der "Text" der auf der Site angegeben wird.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Mediatec« (4. November 2011, 16:30)
Okay sauberer wäre es,wenn du eine Tabelle hast wo der Angehakte Wert eingeträgen wir von mir aus TB_Auto_ZU_HERSTELLER, dann hast du eine Tabelle mit allen Herstellern TB_HERSTELLER, in der TB_HERSTELLER speichert du alle Hersteller (Mercedes, Audi) und in das Held für den Hersteller in TB_HERSTELLER_ZU_AUTO trägst du je nachdem was ausgewählt wurde die ID des Herstellers ein.
Sollte eine Benutzer mehr als ein Wert angehakt haben, dann speicherst du in TB_AUTO_ZU_HERSTELLER mehrere Werte für den Benutzer, d.h. du hast in TB_AUTO_ZU_HERSTELLER immer einen Wert zum Benutzer(oder an wem du das fest machst) und immer einen Wert für den Hersteller, für den nächsten Haken auch wieder das gleiche.
So wie du das machen willst... kann man es machen, ist aber nicht sehr ratsam, da es total unperformant ist. SQL-Datenbank sind auf Fremdschlüssel-Beziehungen ausgelegt und verwalten demnach intern Tabellen die über einen Fremdschlüssel miteinander verbunden sind, oftmals geht das Abfragen der Daten über ein Fremdschlüssel-Konstrukt schneller als wenn sich das ganze in einer Tabelle befindet.
EDIT:
So in der Art mein ich das:
Habs getestet, funktioniert alles.
Sollte eine Benutzer mehr als ein Wert angehakt haben, dann speicherst du in TB_AUTO_ZU_HERSTELLER mehrere Werte für den Benutzer, d.h. du hast in TB_AUTO_ZU_HERSTELLER immer einen Wert zum Benutzer(oder an wem du das fest machst) und immer einen Wert für den Hersteller, für den nächsten Haken auch wieder das gleiche.
So wie du das machen willst... kann man es machen, ist aber nicht sehr ratsam, da es total unperformant ist. SQL-Datenbank sind auf Fremdschlüssel-Beziehungen ausgelegt und verwalten demnach intern Tabellen die über einen Fremdschlüssel miteinander verbunden sind, oftmals geht das Abfragen der Daten über ein Fremdschlüssel-Konstrukt schneller als wenn sich das ganze in einer Tabelle befindet.
EDIT:
So in der Art mein ich das:
Spoiler
![]()
MySQL-Abfrage(n)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 CREATE TABLE TB_HERSTELLER ( HID int(7) NOT NULL auto_increment, H_Bezeichnung varchar(32) NOT NULL, PRIMARY KEY(HID) ); CREATE TABLE TB_AUTO_ZU_HERSTELLER ( BENUTZER_ID int(7) NOT NULL, HERSTELLER_ID int(7) NOT NULL, PRIMARY KEY(BENUTZER_ID, HERSTELLER_ID), FOREIGN KEY(HERSTELLER_ID) REFERENCES TB_HERSTELLER(HID) ); INSERT INTO TB_HERSTELLER(H_Bezeichnung) VALUES ('Audi'); INSERT INTO TB_HERSTELLER(H_Bezeichnung) VALUES ('Mercedes'); INSERT INTO TB_HERSTELLER(H_Bezeichnung) VALUES ('BMW'); INSERT INTO TB_AUTO_ZU_HERSTELLER(BENUTZER_ID, HERSTELLER_ID) VALUES (11, 3); INSERT INTO TB_AUTO_ZU_HERSTELLER(BENUTZER_ID, HERSTELLER_ID) VALUES (11, 2); INSERT INTO TB_AUTO_ZU_HERSTELLER(BENUTZER_ID, HERSTELLER_ID) VALUES (11, 1); SELECT a.BENUTZER_ID, b.H_Bezeichnung FROM TB_AUTO_ZU_HERSTELLER a, TB_HERSTELLER b WHERE a.HERSTELLER_ID = b.HID
Habs getestet, funktioniert alles.
Mfg
Moee
Moee
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Moee« (4. November 2011, 21:35)
du brauchst auto von hersteller nicht zu trennen, da ein Auto nur von einem hersteller gemacht wird
es ist also eine 1:n beziehung
es ist also eine 1:n beziehung
Mein kleines Projekt
-Cruel Online-
-Cruel Online-
Das ist mir alles noch zu hoch. So weit bin ich in der Datenbankprogrammierung noch nicht.
Das Auto von Hersteller getrennt werden sollte leuchtet mir ein. Doch zuerst will ich erstmal nur klickbare Felder in der Datenbank haben und diese per PHP auslesen. Wenn also Feld "Null" ist, zeige nichts an und wenn Feld "not Null" ist, dann zeige es an. so wie ich oben beschrieben habe.
Das Auto von Hersteller getrennt werden sollte leuchtet mir ein. Doch zuerst will ich erstmal nur klickbare Felder in der Datenbank haben und diese per PHP auslesen. Wenn also Feld "Null" ist, zeige nichts an und wenn Feld "not Null" ist, dann zeige es an. so wie ich oben beschrieben habe.
Leeres Feld prüfen
Also, wenn ich das soweit richtig verstanden habe, willst du im Grund erstmal nur prüfen ob ein Feld leer ist oder nicht?
Dann mach doch folgendes:
if(!empty($zeile['WERT']))
echo "<BILD EINBINDEN>";
Wichtig dbaei ist das ! vor empty, das bedeutet folgendes:
Wenn(nicht leer($zeile['WERT']))
echo "<img ....>";
Oder hab ich das jetzt missverstanden?
Dann mach doch folgendes:
if(!empty($zeile['WERT']))
echo "<BILD EINBINDEN>";
Wichtig dbaei ist das ! vor empty, das bedeutet folgendes:
Wenn(nicht leer($zeile['WERT']))
echo "<img ....>";
Oder hab ich das jetzt missverstanden?
Ähnliche Themen
-
PHP »-
Steh mal wieder auf dem Schlauch
(28. April 2011, 17:58)
-
PHP »-
Dateityp auslesen und bild dafür anzeigen
(16. November 2004, 13:07)
-
Grafiken »-
Suche Stahlhelm
(21. Februar 2004, 09:40)
-
PHP »-
Siegfrieds PHP Kurs
(8. Dezember 2002, 17:40)
-
PHP »-
xml und php?
(29. Januar 2003, 15:43)


