Wie bekomme ich CSS Atribute in PHP echo Ausgaben?

...komplette Frage anzeigen

5 Antworten

Deine derzeitige Lösung ist ziemlich unflexibel und fördert Redundanzen in der Datenbank. Speicher nur die konkreten Werte, die du für das Bild benötigst und bau dir den Rest mit PHP zusammen.

Das heißt, in deiner Datenbank hast du eine Tabelle Bilder. Diese hat eine Spalte Pfad (oder URL), eine Spalte für den Alternative Text eine ID (zum einfachen Finden des Eintrags) sowie eine Spalte für die CSS-Klasse, die ihr zugeordnet werden soll. Deinen Inline-Style solltest du mit in den angegebenen CSS-Klassenselektor packen. Wenn das ungünstig ist, dann lege noch eine 2. Spalte für eine weitere CSS-Klasse an oder lasse dir eine andere Möglichkeit an Datenbankdesign einfallen, welches dir erlaubt, dem Bild mehrere Klassen zuzuordnen. Die Spalten für die CSS-Klassen sollten via Fremdschlüssel auf eine externe Tabelle CSS-Klasse verweisen, welche alle notwendigen Klassen listet. Sollten Bildpfade oder alternative Tags ebenso jeweils mehr als dreimal vorkommen, würde sich für diese ebenso ein Fremdschlüssel und eine eigene Tabelle eignen.

Wenn deine Datenbank ordentlich designt ist, kannst du dich der Backend-Entwicklung widmen. Hole dir den gewünschten Eintrag und bau dir das Markup zusammen:

<?php print "<img alt=\"$alternativeText\" class=\"$cssClass\" src=\"$imagePath\" />" ?>;

Ohne den Code zu kennen, meine Frage: Warum speicherst nicht die CSS Klassennamen in der Datenbank als neues Feld in der gleichen Zeile wie  das Bild?  Alternativ kannst Du den Link auf das Bild speichern oder eine eindeutige Id auf das Bild.

7thRaven 22.09.2017, 19:33

Dann müsste ich doch aber 3x das gleiche Bild abspeichern. Ich möchte ein Bild in verschiedenen Klassen (= Größe) anwenden. Hatte gehoffte dass ich einfach html/css in den php code verpacken kann, aber ging nicht:

z.B.

echo "img class="bild1" src="$bild" style="float:right"      border="0" alt="bild">
0
LeBonyt 22.09.2017, 19:42
@7thRaven

Hatte gehofft dass ich einfach html/css in den php code verpacken kann, aber ging nicht:

Natürlich geht das:

echo '<a href="www.gf.de" >Link</a>';

Oder wo ist das Problem?

0
7thRaven 22.09.2017, 19:51
@7thRaven

Da soll kein Link stehen, sondern eins von mehreren Bildern aus der DB angezeigt werden :/ 

Auf einer anderen Seite sollen alle Bilder aus der DB angezeigt werden.

0
regex9 22.09.2017, 20:51
@7thRaven

Das da oben ist ein Beispiel. Wo liegt das Problem, so etwas für einen img-Tag umzubauen?

1
7thRaven 22.09.2017, 21:05
@regex9

Das Problem ist, dass ich das eben mit img nicht hinbekomme. Ich kann ja nicht für jedes einzelne Bild ein echo machen, zumal in der DB Einträge dazu kommen bzw gelöscht werden können. Ich bin halt auch noch recht neu in der Materie.

Mein neuer fehlgeschlagener Versuch:

          echo '<img class="bild2">' . $bild . '<style="float:right" border="0" alt="bild">';
0
regex9 22.09.2017, 21:21
@7thRaven

Mhm, einmal ganz ehrlich: Hast du dir bei diesem Versuch auch einmal überlegt, was du da überhaupt tust? Im Endresultat baust du dir 2 Tags zusammen, beide invalid.

Diesem Tag

<img class="bild2">

fehlen notwendige Attribute (src, alt), außerdem ist er nicht geschlossen.

Der zweite Tag:

<style="float:right" border="0" alt="bild">

besteht nur aus falscher Syntax und ist ebenso nicht geschlossen.

So müsste es aber aussehen:

echo '<img class="bild2" src="'.$bild.'" style="float:right" border="0" alt="bild" />';

Du baust dir doch lediglich Textbausteine zusammen. Zwei weitere Beispiele:

echo "Hallo "."Welt"; // Hallo Welt

$name = "Hans"; echo "Hallo ".$name; // Hallo Hans

Bevor du nun weiter mit PHP oder Datenbanken machst, lerne erst HTML und übe so lange, bis du es kannst / wirklich verstanden hast. 

1
7thRaven 22.09.2017, 21:37
@regex9

Ja, ist mir nun auch schon aufgefallen, dass ich den tag zu gemacht hab... Ich probiere hier gerade alle möglichen Tutorials aus um html und php zu verknüpfen. Deine Version hatte ich auch schon. Aber ich hab jetzt den Fehler (glaub ich?) in der DB. Da hab ich das Bild auch nur als html text drin <img....>

Also baue ich die ganze Zeit <img <img> > -.- 

Hab bisher aber keine andere Variante gefunden, wie man Bilder in die DB bekommt. Direkt hochladen gab bei mir nur Hyroglyphentext statt nem Bild.

0
7thRaven 22.09.2017, 21:53
@7thRaven

ok... ich hab's jetzt. War die Datenbank. Hab jetzt nur den Bildpfad in der DB und den Code von oben in der html Datei.

0
regex9 23.09.2017, 03:05
@7thRaven

Vermeide es wie gesagt, Markup in der Datenbank zu speichern, sofern es sich nicht bspw. um statische Artikeltexte handelt, die in einem Rutsch nur eingesetzt werden.

Bilder kann man durchaus in der Datenbank speichern. Dafür wird dann das BLOB-Format genutzt, welches das Bild in einem speziellen Format serialisiert. Das Auslesen wird hier gezeigt: https://stackoverflow.com/questions/7793009/how-to-retrieve-images-from-mysql-database-and-display-in-an-html-tag/7793098#7793098

Ein oftmals gewählter Weg ist aber der, den du nun gewählt hast. Die Bilddateien liegen im Dateisystem und in der Datenbank sind nur die Bildpfade hinterlegt.

0

Leg in der Tabelle ein Extra Feld an, wo Du den Klassen-Namen hinterlegst. Also:

ID / BILD / KLASSE
1 | foto.jpg | thumbnail
2 | panorama.png | panorama
...

Verstehe jetzt nicht so ganz, was Du vorhast oder wo das Problem ist? Den Rest machst mit HTML / CSS / PHP ...

7thRaven 22.09.2017, 19:27

Aber die Bilder werden mehrmals benutzt mit unterschiedlichen Klassen (darüber wird die Bildgröße geregelt).

0
PeterP58 22.09.2017, 20:14
@7thRaven

Dann lege halt mehrere Felder für die Bilder an:

ID / BILD / KL_PANORAMA / KL_THUMBNAIL / KL_FULLSIZE
1 | foto.jpg | 1 (=ja) | 0 (=nein) | 1 (=ja)

Und Bildgrößen würde ich nicht über CSS regeln, sondern über einen Image-Resize-PHP

1

Sorry, das kam in der Fragestellung nicht mit:

das hab ich aktuell in der DB für das Bild

<img class="bild1" src="bild.jpg" style="float:right"   border="0" alt="bild">

Code fehlt leider

Was möchtest Du wissen?