PSD-Tutorials.de
Forum für Design, Fotografie & Bildbearbeitung
Tutkit
Agentur
Hilfe
Kontakt
Start
Forum
Aktuelles
Besonderer Inhalt
Foren durchsuchen
Tutorials
News
Anmelden
Kostenlos registrieren
Aktuelles
Suche
Suche
Nur Titel durchsuchen
Von:
Menü
Anmelden
Kostenlos registrieren
App installieren
Installieren
JavaScript ist deaktiviert. Für eine bessere Darstellung aktiviere bitte JavaScript in deinem Browser, bevor du fortfährst.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen
alternativen Browser
verwenden.
Antworten auf deine Fragen:
Neues Thema erstellen
Start
Forum
Sonstiges
Webdesign, Webentwicklung & Programmierung
PHP, Javascript, jQuery, Ajax, nodeJS, MySQL...
[PHP u. MySQL] Bild Upload mit Beschreibung: Bilder werden nicht gespeichert.
Beitrag
<blockquote data-quote="Gelöschtes Mitglied 633957" data-source="post: 2665713"><p>Dann sollst Du auch endlich meinen Lösungsansatz bekommen! Bei Deiner Lösung sind die Ideen zur Speicherung in der Datenbank und in einem Verzeichnis ein wenig "verkuddelmuddelt"!</p><p></p><p>Ich habe zuerst eine Datenbank "<em>bilder</em>" erstellt und dann eine Tabelle "<em>hochgeladen</em>", mit folgendem Inhalt:</p><p></p><p>Beachte, dass die Spalte "<em>bild</em>" vom Typ LONGBLOB ist; hier werden die Bilddaten gespeichert!</p><p></p><p>Ich habe mich entschieden, für Upload und Anzeige zwei Dokumente anzulegen - man könnte die PHP-Dateien aber auch zusammenfassen.</p><p></p><p>Mein Upload-Dokument "<em>upload.php</em>" schaut wie folgt aus...</p><p>Ich habe mich bemüht einigermaßen sinnvoll zu kommentieren:</p><p>[PHP]<?php</p><p>// Verbindung zur Datenbank (host/server, benutzer, passwort, datenbankname)</p><p>$mysqli = new mysqli("localhost", "root", "password", "bilder");</p><p></p><p>// Fehlermeldung bei Verbindungsproblemen</p><p>if ($mysqli->connect_errno) {</p><p> printf("Verbindung fehlgeschlagen: %s\n", $mysqli->connect_error);</p><p> exit();</p><p>}</p><p></p><p>// Wenn auf Senden-Button geklickt wird...</p><p>if(isset($_POST["senden"])) {</p><p>// Püfen ob die Beschreibung nicht leer ist</p><p>if(!empty($_POST["beschreibung"])) {</p><p>// Dateiinformationen holen (temporärer Name, Dateiname, -größe und -typ)</p><p> $tempname = addslashes(file_get_contents($_FILES['bild']['tmp_name']));</p><p> $bildname = addslashes($_FILES['bild']['name']);</p><p>// Größe und Typ wollte ich noch für eine Prüfung verwenden, habe es dann aber sein lassen - könnte aber noch interessant werden für die Verwendung des Scripts mit einem Hostingpaket</p><p> $bildgroesse = addslashes($_FILES['bild']['size']);</p><p> $bildtyp = addslashes($_FILES['bild']['type']);</p><p></p><p>// Prüfen ob ein Dateiname existiert</p><p> if(!empty($bildname)) {</p><p>// Prüfen ob Dateiname nur aus Buchstaben, Ziffern und -_. besteht</p><p> if (preg_match('/^[-a-zA-Z0-9_.]+$/', $bildname)) {</p><p></p><p>// Erlaubte Dateiendungen</p><p> $erlaubt = array('jpg','jpeg');</p><p>// Dateiendung aus Dateiname</p><p> $endung = pathinfo($bildname, PATHINFO_EXTENSION);</p><p></p><p>// Prüfen ob Dateiendung zu den erlaubten Endungen passt</p><p> if(in_array($endung, $erlaubt)) {</p><p>// HTML, XML und PHP Tags aus Beschreibung entfernen</p><p> $beschreibung = strip_tags($_POST["beschreibung"]);</p><p>// Info in Datenbank, in Tabelle "hochgeladen" eintragen</p><p> $eintragen = "INSERT INTO hochgeladen (bild, name, beschreibung) VALUES ('$tempname', '$bildname', '$beschreibung')";</p><p> if ($mysqli->query($eintragen) === TRUE) {</p><p> $meldung = "<B>Vielen Dank!</B> Es wurde ein neuer Datensatz hinzugef&uuml;gt!";</p><p> } else {</p><p> $meldung = "Fehler: " . $eintragen . "<BR />" . $mysqli->error;</p><p> }</p><p> } else {</p><p> $meldung = "<B>Fehler</B>: Das ausgew&auml;hlte Bild hat eine unerlaubte Dateiendung!";</p><p> }</p><p> } else {</p><p> $meldung = "<B>Fehler</B>: Bitte verwenden Sie einen Dateinamen, der nur aus Buchstaben, Ziffern und den Zeichen _ - . besteht!";</p><p> }</p><p> } else {</p><p> $meldung = "<B>Fehler</B>: Sie haben keine Datei ausgew&auml;hlt!";</p><p> }</p><p>} else {</p><p> $meldung = "<B>Fehler</B>: Sie m&uuml;ssen eine Beschreibung des Bildes einf&uuml;gen!";</p><p>}</p><p>} else {</p><p> $meldung = "Bitte w&auml;hlen Sie Ihr Bild aus, geben Sie eine Beschreibung ein und klicken Sie auf &quot;Bild hochladen&quot;!";</p><p>}</p><p></p><p>// Verbindung zur Datenbank trennen</p><p>$mysqli->close();</p><p>?></p><p></p><p><!doctype html></p><p><html lang="de"></p><p></p><p><head></p><p> <meta charset="UTF-8" /></p><p> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /></p><p> <title>MySQL Bilder Upload</title></p><p> <meta name="viewport" content="width=device-width, initial-scale=1.0" /></p><p></head></p><p></p><p><body></p><p></p><p><form action="" method="post" enctype="multipart/form-data"></p><p><p><B>Bild ausw&auml;hlen und hochladen...</B></p></p><p><BR /></p><p><p><input name="bild" type="file" /></p></p><p><p><textarea name="beschreibung" rows="4" cols="50" maxlength="200" placeholder="Beschreibe das Bild mit maximal 200 Zeichen..."></textarea></p></p><p><p><input name="senden" type="submit" value="Bild hochladen" /></p></p><p></form></p><p><BR /></p><p><small style="color:red;"></p><p><?php</p><p>// Meldung ausgeben</p><p>echo $meldung;</p><p>?></p><p></small></p><p><BR /><BR /></p><p>Hier geht es zur <a href="./galerie.php" target="_self">Bildergalerie</a></p><p></p><p></body></p><p></html>[/PHP]</p><p>Die Ausgabe der "<em>upload.php</em>" schaut dann so aus:</p><p></p><p></p><p>Die mit Daten gefüllte Tabelle, sollte dann so ausschauen:</p><p></p><p></p><p>Angezeigt wird das ganze mit der "<em>galerie.php</em>":</p><p>[PHP]<!doctype html></p><p><html lang="de"></p><p></p><p><head></p><p> <meta charset="UTF-8" /></p><p> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /></p><p> <title>MySQL Bilder Ausgabe</title></p><p> <meta name="viewport" content="width=device-width, initial-scale=1.0" /></p><p></head></p><p></p><p><body></p><p></p><p><B>BILDERGALERIE</B></p><p><BR /><BR /></p><p></p><p><?php</p><p>// Verbindung zur Datenbank (host/server, benutzer, passwort, datenbankname)</p><p>$mysqli = new mysqli("localhost", "root", "password", "bilder");</p><p></p><p>// Fehlermeldung bei Verbindungsproblemen</p><p>if ($mysqli->connect_errno) {</p><p> printf("Verbindung fehlgeschlagen: %s\n", $mysqli->connect_error);</p><p> exit();</p><p>}</p><p></p><p>// Alle Inhalte aus der Tabelle holen</p><p>$inhalte = "SELECT * FROM hochgeladen";</p><p>if ($inhalt = $mysqli->query($inhalte)) {</p><p></p><p>// Inhalte aufdröseln, Schleife durchlaufen, mögliche HTML, XML oder PHP Tags aus Beschreibung und Bildname entfernen</p><p> while ($spalte = $inhalt->fetch_assoc()) {</p><p> $bildinhalt = $spalte['bild'];</p><p> $bildinfo = strip_tags($spalte['beschreibung']);</p><p> $bildname = strip_tags($spalte['name']);</p><p></p><p>// Bilder mit Info (Beschreibung, Dateiname) ausgeben</p><p> echo '<div style="float:left; width:260px;"><img src="data:image/jpeg;base64,'.base64_encode($bildinhalt).'" width="250" /><BR />';</p><p> echo $bildinfo.'<BR /><small>('.$bildname.')</small><BR /><BR />';</p><p> echo '</div>';</p><p> }</p><p>}</p><p></p><p>// Verbindung zur Datenbank trennen</p><p>$mysqli->close();</p><p>?></p><p></p><p><div style="clear:left;"></div></p><p><BR /><BR /></p><p>Hier geht es zum <a href="./upload.php" target="_self">Bilder-Upload</a></p><p></p><p></body></p><p></html>[/PHP]</p><p>Die dann z.B. so ausschaut:</p><p></p><p></p><p>So viel Code widerspricht ein wenig dem Grundgedanken des Forums: "Hilfe zur Selbsthilfe", jedoch bietet er viele Möglichkeiten daran zu arbeiten:</p><ul> <li data-xf-list-type="ul">die Ausgaben sollten schon hübscher daherkommen</li> <li data-xf-list-type="ul">es lässt sich noch einiges an Funktionalität einbauen (z.B. das Löschen von Bildern aus der Datenbank)</li> <li data-xf-list-type="ul">und in puncto Sicherheit sollten sich auch noch einige Gedanken gemacht werden</li> </ul><p>Dieser Code bietet nur einen minimalen Schutz vor Bösewichten, die Deinem Server oder der Datenbank Übles wollen!</p><p></p><p>Ich hoffe Du kannst damit etwas anfangen und baust dann etwas eigenes und viel besseres!</p><p></p><p>Noch der Hinweis an alle die mehr Ahnung von PHP und MySQL haben:</p><p>Bitte anmerken wenn ich Käse zusammengeschrieben habe!</p><p></p><p><span style="font-size: 12px"><strong>Edit</strong>: Rechtschreibung</span></p></blockquote><p></p>
[QUOTE="Gelöschtes Mitglied 633957, post: 2665713"] Dann sollst Du auch endlich meinen Lösungsansatz bekommen! Bei Deiner Lösung sind die Ideen zur Speicherung in der Datenbank und in einem Verzeichnis ein wenig "verkuddelmuddelt"! Ich habe zuerst eine Datenbank "[I]bilder[/I]" erstellt und dann eine Tabelle "[I]hochgeladen[/I]", mit folgendem Inhalt: Beachte, dass die Spalte "[I]bild[/I]" vom Typ LONGBLOB ist; hier werden die Bilddaten gespeichert! Ich habe mich entschieden, für Upload und Anzeige zwei Dokumente anzulegen - man könnte die PHP-Dateien aber auch zusammenfassen. Mein Upload-Dokument "[I]upload.php[/I]" schaut wie folgt aus... Ich habe mich bemüht einigermaßen sinnvoll zu kommentieren: [PHP]<?php // Verbindung zur Datenbank (host/server, benutzer, passwort, datenbankname) $mysqli = new mysqli("localhost", "root", "password", "bilder"); // Fehlermeldung bei Verbindungsproblemen if ($mysqli->connect_errno) { printf("Verbindung fehlgeschlagen: %s\n", $mysqli->connect_error); exit(); } // Wenn auf Senden-Button geklickt wird... if(isset($_POST["senden"])) { // Püfen ob die Beschreibung nicht leer ist if(!empty($_POST["beschreibung"])) { // Dateiinformationen holen (temporärer Name, Dateiname, -größe und -typ) $tempname = addslashes(file_get_contents($_FILES['bild']['tmp_name'])); $bildname = addslashes($_FILES['bild']['name']); // Größe und Typ wollte ich noch für eine Prüfung verwenden, habe es dann aber sein lassen - könnte aber noch interessant werden für die Verwendung des Scripts mit einem Hostingpaket $bildgroesse = addslashes($_FILES['bild']['size']); $bildtyp = addslashes($_FILES['bild']['type']); // Prüfen ob ein Dateiname existiert if(!empty($bildname)) { // Prüfen ob Dateiname nur aus Buchstaben, Ziffern und -_. besteht if (preg_match('/^[-a-zA-Z0-9_.]+$/', $bildname)) { // Erlaubte Dateiendungen $erlaubt = array('jpg','jpeg'); // Dateiendung aus Dateiname $endung = pathinfo($bildname, PATHINFO_EXTENSION); // Prüfen ob Dateiendung zu den erlaubten Endungen passt if(in_array($endung, $erlaubt)) { // HTML, XML und PHP Tags aus Beschreibung entfernen $beschreibung = strip_tags($_POST["beschreibung"]); // Info in Datenbank, in Tabelle "hochgeladen" eintragen $eintragen = "INSERT INTO hochgeladen (bild, name, beschreibung) VALUES ('$tempname', '$bildname', '$beschreibung')"; if ($mysqli->query($eintragen) === TRUE) { $meldung = "<B>Vielen Dank!</B> Es wurde ein neuer Datensatz hinzugefügt!"; } else { $meldung = "Fehler: " . $eintragen . "<BR />" . $mysqli->error; } } else { $meldung = "<B>Fehler</B>: Das ausgewählte Bild hat eine unerlaubte Dateiendung!"; } } else { $meldung = "<B>Fehler</B>: Bitte verwenden Sie einen Dateinamen, der nur aus Buchstaben, Ziffern und den Zeichen _ - . besteht!"; } } else { $meldung = "<B>Fehler</B>: Sie haben keine Datei ausgewählt!"; } } else { $meldung = "<B>Fehler</B>: Sie müssen eine Beschreibung des Bildes einfügen!"; } } else { $meldung = "Bitte wählen Sie Ihr Bild aus, geben Sie eine Beschreibung ein und klicken Sie auf "Bild hochladen"!"; } // Verbindung zur Datenbank trennen $mysqli->close(); ?> <!doctype html> <html lang="de"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <title>MySQL Bilder Upload</title> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <p><B>Bild auswählen und hochladen...</B></p> <BR /> <p><input name="bild" type="file" /></p> <p><textarea name="beschreibung" rows="4" cols="50" maxlength="200" placeholder="Beschreibe das Bild mit maximal 200 Zeichen..."></textarea></p> <p><input name="senden" type="submit" value="Bild hochladen" /></p> </form> <BR /> <small style="color:red;"> <?php // Meldung ausgeben echo $meldung; ?> </small> <BR /><BR /> Hier geht es zur <a href="./galerie.php" target="_self">Bildergalerie</a> </body> </html>[/PHP] Die Ausgabe der "[I]upload.php[/I]" schaut dann so aus: Die mit Daten gefüllte Tabelle, sollte dann so ausschauen: Angezeigt wird das ganze mit der "[I]galerie.php[/I]": [PHP]<!doctype html> <html lang="de"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <title>MySQL Bilder Ausgabe</title> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> </head> <body> <B>BILDERGALERIE</B> <BR /><BR /> <?php // Verbindung zur Datenbank (host/server, benutzer, passwort, datenbankname) $mysqli = new mysqli("localhost", "root", "password", "bilder"); // Fehlermeldung bei Verbindungsproblemen if ($mysqli->connect_errno) { printf("Verbindung fehlgeschlagen: %s\n", $mysqli->connect_error); exit(); } // Alle Inhalte aus der Tabelle holen $inhalte = "SELECT * FROM hochgeladen"; if ($inhalt = $mysqli->query($inhalte)) { // Inhalte aufdröseln, Schleife durchlaufen, mögliche HTML, XML oder PHP Tags aus Beschreibung und Bildname entfernen while ($spalte = $inhalt->fetch_assoc()) { $bildinhalt = $spalte['bild']; $bildinfo = strip_tags($spalte['beschreibung']); $bildname = strip_tags($spalte['name']); // Bilder mit Info (Beschreibung, Dateiname) ausgeben echo '<div style="float:left; width:260px;"><img src="data:image/jpeg;base64,'.base64_encode($bildinhalt).'" width="250" /><BR />'; echo $bildinfo.'<BR /><small>('.$bildname.')</small><BR /><BR />'; echo '</div>'; } } // Verbindung zur Datenbank trennen $mysqli->close(); ?> <div style="clear:left;"></div> <BR /><BR /> Hier geht es zum <a href="./upload.php" target="_self">Bilder-Upload</a> </body> </html>[/PHP] Die dann z.B. so ausschaut: So viel Code widerspricht ein wenig dem Grundgedanken des Forums: "Hilfe zur Selbsthilfe", jedoch bietet er viele Möglichkeiten daran zu arbeiten: [LIST] [*]die Ausgaben sollten schon hübscher daherkommen [*]es lässt sich noch einiges an Funktionalität einbauen (z.B. das Löschen von Bildern aus der Datenbank) [*]und in puncto Sicherheit sollten sich auch noch einige Gedanken gemacht werden [/LIST] Dieser Code bietet nur einen minimalen Schutz vor Bösewichten, die Deinem Server oder der Datenbank Übles wollen! Ich hoffe Du kannst damit etwas anfangen und baust dann etwas eigenes und viel besseres! Noch der Hinweis an alle die mehr Ahnung von PHP und MySQL haben: Bitte anmerken wenn ich Käse zusammengeschrieben habe! [SIZE=3][B]Edit[/B]: Rechtschreibung[/SIZE] [/QUOTE]
Bilder bitte
hier hochladen
und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Zitate einfügen…
Authentifizierung
Wenn ★ = 12, ◇ = 4 und die Hälfte von ★ zu ◇ addiert wird, was ist das Ergebnis?
Antworten
Start
Forum
Sonstiges
Webdesign, Webentwicklung & Programmierung
PHP, Javascript, jQuery, Ajax, nodeJS, MySQL...
[PHP u. MySQL] Bild Upload mit Beschreibung: Bilder werden nicht gespeichert.
Oben