PHP Bild-URL in Datenbank speichern und auslesen

Seiyaru2208

Captain
Registriert
Apr. 2008
Beiträge
3.111
Hallo Jungs ich habe folgendes Problem..... Ich will meine Webseite dynamischer gestallten damit auch jemand anders mal etwas ändern kann daher habe ich mir ein Backend gebaut. Jetzt habe ich aber ein Großes Problem, zu jeden Eintrag (hier Services) soll auch ein Bild dargestellt werden. Da ich ja kein HTML mehr nutze muss ich die Bildausgabe ja auch dynamisch "regeln" und das ist mein Großes Problem.....

Als erstes habe ich gegoogelt und versucht die Bildatei in die Datenbank zu laden was auch funktioniert hat allerdings wird mir beim Auslesen immer wieder eine Fehlermeldung ausgegeben.
Zudem soll das auch nicht das schlauste sein Bilder in eine Datenbank zu speichern.

Jetzt bin ich auf die Idee gekommen einfach nur die URL in die Datenbank einzutragen jedoch habe ich keine Ahnung wie ich das realisieren kann......

Derzeit löse ich es so....


PHP:
 <?php
    //Wenn ID in Datenbank vorhanden dann wird der Dienstelsitungsname und Inhalt ausgegebn.
    if ($_GET['id']) {
    
    $sql = "SELECT * FROM dienstleistungen WHERE id=".intval($_GET['id']);
    $res = mysql_query($sql);
    $row_services = mysql_fetch_assoc($res);

     

    //If-Schleife für Bilder wenn eine bestimmte ID aufgerufen wird wird das hinterlegte Bild und der Inhalt bereitgestellt    bereitgestellt
    if ($_GET['id'] == "1") {
        $sql = "SELECT * FROM diencontent WHERE id=".intval($_GET['id']);
        $res = mysql_query($sql);
        $row_content = mysql_fetch_assoc($res);   
     ?>   
           
        <div class="services-headliner">
            <h1><?php echo $row_content['html']; ?></h1>
        </div>   
           
        <div class="services-image"><img src="images/services/arztbesuch.jpg" alt="Arztbesuch"></div>
        <!--Textblock I-->
        <div class="services-content1">
            <p><?php echo $row_content['html1']; ?></p>
        </div>
        <!--Textblock II-->
        <div class="services-content2">
            <p><?php echo $row_content['html2']; ?></p>
        </div>
        
        <!--Listenblock I.-->
         <div class="services-content-list1">
            <p><?php echo $row_content['list1']; ?></p>
        </div>
        <div class="services-content-list2">
            <p><?php echo $row_content['list2']; ?></p>
        </div>
        
         <div class="services-content-list3">
            <p><?php echo $row_content['list3']; ?></p>
        </div>
         
          <div class="services-content-list4">
            <p><?php echo $row_content['list4']; ?></p>
        </div>
          
        <!--Textblock III.-->
        <div class="services-content3">
            <p><?php echo $row_content['html3']; ?></p>
        </div>
        
        <!--Textblock IV.-->
        <div class="services-content4">
            <p><?php echo $row_content['html4']; ?></p>
        </div>
        
         <!--Listenblock II.-->
         <div class="services-content-list5">
            <p><?php echo $row_content['list5']; ?></p>
        </div>
        <div class="services-content-list6">
            <p><?php echo $row_content['list6']; ?></p>
        </div>
        
         <div class="services-content-list7">
            <p><?php echo $row_content['list7']; ?></p>
        </div>
         
          <div class="services-content-list8">
            <p><?php echo $row_content['list8']; ?></p>
        </div>
    
    
     <?php   

    } else {
    if ($_GET['id'] == "2") {
        $sql = "SELECT * FROM diencontent WHERE id=".intval($_GET['id']);
        $res = mysql_query($sql);
        $row_content = mysql_fetch_assoc($res);   
   
        und so weiter .........
         ?>

Das Script geht noch etwas weiter aber der Inhalt ist der selbe nur eben mit anderen ID`s..... Da ich ja Einträge hinzufügen und löschen will ist meine IF-Schleife etwas sinnlos... daher wäre es super wenn ihr mir etwas helfen könntet wie ich das lösen kann.....

Ich bin noch relativ neu in PHP deshalb seit gnädig zu mir =)
 
Ist jetzt ungetestet ... Mach aus
Code:
<div class="services-image"><img src="images/services/arztbesuch.jpg" alt="Arztbesuch"></div>

einfach

Code:
<div class="services-image"><?php echo "<img src='".$row_content['bild1']."' alt='".$row_content['bildBeschreibung1']."'></div> ?>
</div>

Davon ausgehend das dein Bild unter bild1 und eine Beschreibung unter bildBeschreibung1 gespeichert ist.

Insgesamt ist dein Code aber ein ganz schöner Wust, mir is von dem bissle Code jetzt auch nicht klar wie das den Pflegeaufwand verringern soll, wenn du für jede ID einen riesen Code-Block schreiben musst
 
Seiyaru2208 schrieb:
Da ich ja kein HTML mehr nutze muss ich die Bildausgabe ja auch dynamisch "regeln" und das ist mein Großes Problem.....
Warum? Ist es denn dynamisch?
Ansonsten: Template-Engine nachgucken.

Als erstes habe ich gegoogelt und versucht die Bildatei in die Datenbank zu laden was auch funktioniert hat
Total bescheuert. Man KANN Bilder als BLOB speichern, ja... aber man SOLLTE nicht.

Jetzt bin ich auf die Idee gekommen einfach nur die URL in die Datenbank einzutragen jedoch habe ich keine Ahnung wie ich das realisieren kann......
Im einfachsten Falle: Feld namens "URL" anlegen und da die URL rein speichern?
Für Profis: Datenbankgestütztes Dateisystem anlegen.

Fang am Besten noch einmal neu an.
1.) Weg mit mysql_query, mysql_fetch_assoc,.... Diese Notation ist veraltet und wird bald gestrichen. Warum? Nicht nur ist sie unverhältnismäßig langsam, sie ist auch verdammt verwundbar gegen SQL Injection Angriffe. Verwende statt dessen direkt PDOs.
2.) Trenne Logik, Inhalt und Darstellung.
3.) Lies in großen quelloffenen CMS und Frameworks, wie es da gemacht wird. Die machen das sicher nicht aus Spaß so...
 
Daaron schrieb:
3.) Lies in großen quelloffenen CMS und Frameworks, wie es da gemacht wird. Die machen das sicher nicht aus Spaß so...

Das dürfte als Anfänger (was er zu sein scheint) ziemlich schwierig sein, ich glaube nicht, dass er einen Debugger benutzt um sich das strukturiert anschauen zu können...
 
Irgendwo gibts immer ne Datenbank-Klasse. Irgendwo gibts immer Widgets, Content-Elemente,...
 
@Daaron ich wollte es mir eigentlich verkneifen zu reagieren da ich auf konstruktive Kritik sehr gerne eingehe aber dein "Geschwafel"ist einfach fehl am Platz, das mal vorweg......

Total bescheuert. Man KANN Bilder als BLOB speichern, ja... aber man SOLLTE nicht.

Wie ich in meinen Post erklärt habe hat das Einlesen bei mir funktioniert jedoch das Auslesen hat bei mir Fehler hervorgebracht, ich kann leider nicht nachvollziehen wo du gelesen hast das dies nicht Gänge........ Und es ist schön das du ein Meister im Erkennen von offensichtlichen Tatsachen bist ,denn ich habe ganz deutlich gesagt das es nicht das schlauste ist dies zutun.... Da es laut meiner Recherche zur massiven Performance-Problemen führen kann......

Fang am Besten noch einmal neu an.
1.) Weg mit mysql_query, mysql_fetch_assoc,.... Diese Notation ist veraltet und wird bald gestrichen. Warum? Nicht nur ist sie unverhältnismäßig langsam, sie ist auch verdammt verwundbar gegen SQL Injection Angriffe. Verwende statt dessen direkt PDOs.
2.) Trenne Logik, Inhalt und Darstellung.

Wie ich im ersten Post geschrieben habe, bin ich ein Anfänger und kein Profi daher ziehe ich Bücher sowie andere Medien zu Rate um mir zu helfen und in jeden Buch welches ich gelesen habe wird dieser Weg beschrieben....

Ob er nun veraltet ist oder nicht kann ich ich beurteilen...... Du könntest ja mal spaßeshalber mir einen anderen Weg zeigen oder mir einen Tipp geben wo ich mir dies anlesen kann....

3.) Lies in großen quelloffenen CMS und Frameworks, wie es da gemacht wird. Die machen das sicher nicht aus Spaß so...

Und wieder sei gesagt das ich ein Anfänger bin und ich habe um Hilfe gesucht und nicht behauptet das mein Weg den ich hier beschritten habe der absolut Wahre und beste ist. Sollte ich dich in meinen Anfangspost irgendwie beleidigt haben dann tut es mir leid denn andernfalls kann ich mir den Post der lauter inhaltsleeren Kommentaren nichts zum eigentlich Problem aussagt nicht erklären.

Ich erwarte nicht das mir jemand den Code schreibt sondern nur konstruktive und Sachbezogene Kritik und wie schon erwähnt keine Floskeln und Sachfremde Kommentare. Ich kann in einer Fussballrunde auch sagen :"der Ball ist Rund und ein Spiel dauert 90 Minuten!", jedoch wird das keinen ein kleines Stück weiter bringen.

In diesem Sinne trotzdem danke für ein Post. ;)
 
Seiyaru2208 schrieb:
Wie ich in meinen Post erklärt habe hat das Einlesen bei mir funktioniert jedoch das Auslesen hat bei mir Fehler hervorgebracht
...tja, und tatsächlich kann ich erraten, WIESO es nicht geht.
Damit du Bilder (BLOBs) aus der Datenbank ausgeben musst, musst du auch den korrekten Header mit übertragen, ansonsten kommt nur Datensalat an. Genau diese Header-Spielerei ist aber purer Terror, zusätzlich zu den schlichtweg logistischen Fehlplanungen, wenn man BLOBs in die DB wirft, "weil man es kann".

Wie ich im ersten Post geschrieben habe, bin ich ein Anfänger und kein Profi daher ziehe ich Bücher sowie andere Medien zu Rate um mir zu helfen und in jeden Buch welches ich gelesen habe wird dieser Weg beschrieben....
Und? Ist das ein Grund, direkt das Falsche zu lernen? Die mysql_... - Syntax ist veraltet, wird in einer der nächsten PHP-Versionen gestrichen, bietet große Fallstricke für schwere Sicherheitslücken,... Wenn man statt dessen direkt mit PDOs arbeitet lernt man viele tolle Sachen GENAU RICHTIG:
- PDOs laufen, wenn man sauber arbeitet, unabhängig vom gewählten RDBMS
- PDOs sind, bei korrekter Verwendung (siehe Prepared Statements), immun gegen SQL Injection
- PDOs bieten eine hübshce Wiederverwertbarkeit durch Abstraktion. 1x ne gute Datenbank-Klasse schreiben, in 1000 Projekten verwenden. Abstraktion rockt.

Du könntest ja mal spaßeshalber mir einen anderen Weg zeigen
Was verstehst du an dem Satz: "Verwende statt dessen direkt PDOs." nicht? Du weißt nicht was ein PDO ist? Nun, wenig überraschend, woher auch. Aber LERNEN kannst du es, denn du hast Suchmaschinen zur Verfügung, die dir direkt als erstes die offizielle PHP-Dokumentation zu PHP Data Objects ausgeben... und weil genau diese Dokumentation wirklich gut ist, wirst du darin sicher auch Fallbeispiele finden.

Und wieder sei gesagt das ich ein Anfänger bin und ich habe um Hilfe gesucht und nicht behauptet das mein Weg den ich hier beschritten habe der absolut Wahre und beste ist.
Ja, und du bist gleichzeitig nicht der erste Mensch auf dem Planeten. Kennst du die Redewendung "Standing on the shoulders of giants"? Genau darum ging es mir: Erfinde das Rad nicht neu, frickel nicht jeden Scheiß halbgar zusammen, bloß weil du es noch nicht besser weißt. Lies von Anfang an wirklich hochwertige Quellen und schau, was die sich bei ähnlichen Problemen gedacht haben.

Das heißt aber auch, von Anfang an ein durchaus solides Datenbank-Design zu haben. Dafür gibts einen feinen Merksatz: "The key, the whole key, and nothing but the key, so help me Codd." Hält man sich daran, hat man direkt eine Datenbank in 3. Normalform gemäß der Definition von Codd.


Warum ich direkt zu Abreißen/Neu bauen rate? Dein Codebeispiel oben sieht arg wüst aus. Ich versteh hinten und vorn nicht, wieso du für jeden möglichen GET-Parameter einen eigenen Zweig aufmachst. Unterscheiden sich die Daten denn SO sehr?
 
Ja ist okay. Der Thread kann gerne geschlossen werden:)

PS: ich bin ein begeisterter boulderer und wenn mich jemand fragt wie er das Problem am besten klettern soll gebe ich ihm wirkliche Tipps und Ratschläge und Sage nicht :"das brauchst du garnicht erst versuchen deine Bewegungen sind einfach falsch! " Ich begegne Leute die mich um Hilfe bitten mit nicht so einer Arroganz aber nun gut :)
 
Hi,

Daaron hat aber nunmal schlicht recht mit seinen Aussagen, und zwar mit jeder einzelnen. Er hat nebenbei bemerkt auch nicht gesagt "gib auf du kannst es eh nicht" sondern "fang neu an und mach es richtig". Das ist ein himmelweiter Unterschied in meinen Augen!

Das hat nicht im geringsten etwas mit Arroganz zu tun und ist für meine Begriffe durchaus eine sehr solide Hilfestellung.

VG,
Mad
 
Seiyaru2208 schrieb:
...wenn mich jemand fragt wie er das Problem am besten klettern soll gebe ich ihm wirkliche Tipps und Ratschläge und Sage nicht :"das brauchst du garnicht erst versuchen deine Bewegungen sind einfach falsch! "
Um bei deinem Beispiel zu bleiben:
Ein blutiger Anfänger, der sich im Selbststudium ein paar vollkommen falsche Bewegungsabläufe antrainiert hat, fragt dich nach Rat. Sagst du ihm "Mach mal weiter mit deinen falschen Abläufen, solange du oben an kommst ist alles egal?". Nein, du sagst ihm direkt, DASS seine Abläufe falsch sind und du sagst ihm, WIESO diese Abläufe falsch und sogar gefährlich sind. Dann sagst du ihm, wie es richtig geht.

Also entschuldige, wenn ich hier verhindern will, dass du dich von Anfang an in falsche Abläufe stürzt, die du dann nur mit großer Mühe aus dem Schädel bekommst. Entschuldige, wenn ich dich nicht blind in dein Verderben rennen lasse. Und entschuldige, wenn ich hier nicht die gesamte Dokumentation für PDO abschreibe.

Weißt du, was das Schönste an falschen Datenbank-Ansätzen ist? Dir selbst passiert wenig, wenn du dann darüber gehackt wirst. Deine KUNDEN hingegen verlieren ihre persönlichen Daten, ihre Kennwörter,...
Denk nur an den Playstation Network - Hack vor ein paar Jahren: Das war SQL Injection, da hat irgend ein Vollpfosten elementare Sicherheitsvorkehrungen nicht getroffen. Das ist so peinlich wie nur was. Es hätte keinen nennenswerten Mehraufwand bedeutet, die Lücke gar nicht erst entstehen zu lassen. Aber wer auch immer den Scheiß geschrieben hat, ihm hat offensichtlich niemand das gesagt, was ich dir gerade sagen will: "Mach es RICHTIG oder mach es gar nicht. Bring dir keine offensichtlich falschen Sachen bei."
 
@Daaron

ich muss mich bei dir Entschuldigen, ich kann ein ganz schöner Dickkopf sein aber kann auch Fehler eingestehen auch wenn es etwas dauert ^^

Ich habe mich jetzt noch mal mit deinen Anmerkungen beschäftigt und du hast Recht, leider haben die deutschen Fachbücher die ich mir gekauft haben veraltete Methoden genutzt was mir jetzt auf die Füsse gefallen ist.

Ich werde es jetzt wie du es sagst versuchen, allerdings habe ich immer noch das Problem das ich keine so richtige Ahnung habe wie ich Fotos darstellen kann, da ich quasi 4 Dienstleistungen habe die alle mit verschiedenen Bildern dargestellt werden sollen.

Als ich noch nur mit HTML gearbeitet habe war das kein Problem aber via PHP ist es etwas komplizierter........
 
Nö, es ist nicht komplizierter, außer du überzeugst dich selbst immer und immer wieder davon.
Am Ende spuckt PHP ja doch nur HTML aus. Deine Bilder sind am Ende immer <img src=".." alt="ALT-TEXT">. Für dich heißt das also:
- hole Bild-URL aus der Datenbank gemäß deiner Datenstruktur
- speichere URL in Variable
- <img src="<?php echo $bildvariable['pfad'];?>" alt="<?php echo $bildvariable['alt'];?>" title="<?php echo $bildvariable['title'];?>>
 
Daaron schrieb:
Nö, es ist nicht komplizierter, außer du überzeugst dich selbst immer und immer wieder davon.
Am Ende spuckt PHP ja doch nur HTML aus. Deine Bilder sind am Ende immer <img src=".." alt="ALT-TEXT">. Für dich heißt das also:
- hole Bild-URL aus der Datenbank gemäß deiner Datenstruktur
- speichere URL in Variable
- <img src="<?php echo $bildvariable['pfad'];?>" alt="<?php echo $bildvariable['alt'];?>" title="<?php echo $bildvariable['title'];?>>

Entschuldige wenn ich noch mal frage aber wie trage ich die BILD URL ein? Ich habe jetzt mal ganz stumpf eine neue Tabelle angelegt und als Datentype TEXT verwendet. Ich habe auch schon Dr. Googel gefragt allerdings finde ich dort nur Code-Beispiele um Bilder direkt in die Datenbank zu kopieren und auszulesen.......
 
Naja, damit die Daten in die Datenbank kommen, und man als Betreiber der Website komfortabel mal ein Bild austauschen kann, müsstest du ja passend zu deiner Webseite und Datenbank erst einmal eine Verwaltungsoberfläche programmieren. Wenn es diese jetzt noch nicht gibt, kannst du die Datenbank ja mit einem Tool wie phpMyAdmin mit Testdaten füttern.

Hast du dir schon überlegt, wieviel Arbeit das wird? Wenn deine Webseite sehr speziell ist und sich mit einem der vielen, kostenlosen CMS oder Wordpress nicht gut verwalten lässt, würde ich auch ne eigene Lösung bauen.
Aber es ist verdammt viel Arbeit. Zumindest wenn man will, dass es halbwegs flexibel & komfortabel wird.
 
Also ein backend habe ich schon gebaut es basiert auf bootstrap und funktioniert sehr gut muss ich sagen :)

Aber du hast recht ich habe mir heute mal wordpress angeschaut. Ich brauche aber irgendwas in den ich eine Tabelle anzeigen kann die dann via wordpress backend Verwalter werden.

Sprich eine preisstabile die mit wenig aufwand Verwalter werden kann und eine für aktuelle Stellenangebote
 
Wordpress ist und bleibt Bullshit. Schöne Oberfläche, aber code-seitig verrottet bis ins Mark. Wordpress (bzw. die 1001 Extensions, die man ja doch benutzen wird) sind der schnellste Weg, sich schwere Sicherheitslücken einzuhandeln.

Du willst eine beliebige Datenstruktur über ein angenehmes Backend pflegen und nach deinem Gusto anzeigen?
https://now.metamodel.me/de/home
 
Ich habe mich jetzt mal etwas mit dem Thema beschäftigt und merke das es eine subjektive Betrachtung ist. Einer sagt Wordpress ist Mist der andere sagt Joomla ist Mist. Ein Konsens findet man allerdings darin das die CMS alles mehr oder weniger sicher sind nur die Extensions wie du sagst das Problem sind.

Ich habe mir Wordpress und Contoa angeschaut und ich finde Wordpress einfach angenehmer zudem gibt es wesentlich mehr Themse (ob nun kostenlos oder zum kaufen) ich werde jetzt erstmal mit Wordpress anfangen und sollte ich merken das es für mich nichts ist kann ich immer noch wechseln. Derzeit finde ich habe die Auswahl an Themse im WP einfach kreativer da ich nichts mit designe am Hut habe ist das für mich einwichtiges Kriterium.
 
Eben, die Sicherheit der Extensions ist der größte Hammer.... und genau diese Extensions sind bei WP eben quasi durch die Bank weg mehr als kritisch zu betrachten. Wenn >20% der Top50-Extensions über Monate hinweg gravierende Lücken aufweisen, dann kann man das System einfach nicht verwenden.
Themes... dieselbe Geschichte. WP-Themes binden x andere Komponenten mit ein. Wird hier an irgend einer Stelle in der Kette geschlampt, dann ist das gesamte System unsicher. WP-Themes sind tickende Zeitbomben. Aber was will man für 20$ auch erwarten, hm? Professionelle Contao-Themes kosten nicht grundlos >100€.
 
Naja ich habe mir zum Test ein 60$ Thrones gekauft und die meisten befinden sich in dieser Spanne.

Ich finde einfach keine richtig guten Designs die mir gefallen das ist das Problem. Der Aufpreis wäre nicht das große Problem
 
Auch wenn das jetzt eigentlich vom Thema weg geht. Ich werde zweigleisig fahren ich werde für meine Firmenseite Wordpress einsetzten und für meine andere Firma contao da dort mit mehr Personenwagen gearbeitet wird.

So lerne ich beide cms kennen und kann mir dann selbst ein Bild machen was besser ist und was nicht. Danke daaron für die vielen Tipps :)
 
Zurück
Oben