Archiv verlassen und diese Seite im Standarddesign anzeigen : Bild aus Datenbank erzeugen
Hallo Leute.
also ich sitze da schon etwas länger dran und ich komme nicht auf die Lösung.
Ich weiß ein Bild in die Datenbank zu stopfen ist nicht zu empfeheln sondern nur die URL. Trotzdem möchte ich gerne Favicons in die Datenbank tun. Da ich auch die Größe prüfe werden die nicht alzu groß sein. Also sollte es nicht das Problem sein.
Nun ich habe erstmal testweise irgendein Bild hochgeladen. Ist alles drinne in der Datenbank. Nun möchte ich das ganz gerne auslesen.
Wie ich das machen soll weiß ich nicht. Daten wurden mit htmlspecialchars() und addslashes eingegeben und und mit decode und strip ausglesen bzw. in Variable gespeichert. So, nun habe ich
echo '<img src="' . $favicon . '">'; eingegben: Hat natürlich nicht geklappt, wäre auch zu schön gewesen um wahr zu sein :)
Na ja nun habe ich das ganze So gemacht:
if($favicon != "" && isset($favicon))
{
echo '<div id="uploadimage"><img src="makeimage.php?id=' . $id . '"</div>';
}
die Datei makeimage:
$id = $_GET['id'];
$db = DB_CONNECT($DB_HOST, $DB_USER, $DB_PASSWORT, $DB_NAME);
$abfrage = "SELECT seiten.favicon FROM seiten WHERE seiten.id = '$id'";
$result = $db->query($abfrage);
$result = $result->fetch_assoc();
$favicon = htmlspecialchars_decode($result['favicon']);
$favicon = stripslashes($favicon);
$db-close();
header ("Content-type: image/jpeg");
$im = ImageCreateFromJPEG($favicon);
ImageJPEG($im);
Tja, falsch ist es scheinbar trotzdem :(
Was mache ich falsch! Bitte um Hilfe.
Vielen Dank
André
Griecherus 29-05-2008, 23:22 Fehlermeldungen? Testausgaben gemacht? Wie sieht das Ergebnis bisher aus?
Fragen über Fragen ;)
Grüße
Na ja, eben halt nichts. :)
Es ist der Bereich im Imagetag der leer im Opera ist und in Mozilla ein rotes x anzeigt! Sprich es wird angezeigt, dass da ein Bild sein sollte jedoch wird nichts angezeigt.
AUch wenn ich die Datei einzeln aufrufe klappt das net. id wird übergeben, die Daten existieren.
Ich bin ja der Meinung, dass ich irgendwas mit dem makeimage falsch gemacht habe.
Griecherus 29-05-2008, 23:41 Und Testausgaben? Was gibt
echo '<pre>' . print_r($result, true) . '</pre'>;
aus?
Wie speicherst du das Bild in der Datenbank?
Array
(
[favicon] => /tmp/phpaA8z4C
)
wird ausgegeben.
Ich speichere das Bild als BLOB ab.
if(isset($_FILES['favicon']['tmp_name']) && $_FILES['favicon']['tmp_name'] != '')
{
// Hier unbedingt noch mal überprüfen, ob es sich um die richtige Größe etc. handelt!
// Alles andere löschen!
$favicon = $_FILES['favicon']['tmp_name'];
$favicon = htmlspecialchars($favicon);
$favicon = addslashes($favicon);
}
und hier wird es eingetragen:
$db = DB_CONNECT($DB_HOST, $DB_USER, $DB_PASSWORT, $DB_NAME);
$select = "INSERT INTO seiten VALUES ('" . $id . "', '" . $name . "', '" . $menuname ."', '"
. $menu . "', '" . $inhalt . "',
'" . $favicon . "', '" . $meta_name ."', '"
. $meta_keys ."', '" . $meta_author . "', '" . $meta_beschreibung . "', '"
. $meta_titel ."','" . $guestbook ."')";
$doIt = $db->query($select);
André
Griecherus 29-05-2008, 23:58 Nimm mal das imagecreatefromjpeg und imagecreate raus. Hast du die Datein tatsächlich in binärer Form in der Datenbank, sollte es echo $result['favicon'] heissen.
Und bitte Code umbrechen. Der erzeugt eine schreckliche Überbreite.
Okay, ich habe jetzt anstelle
$id = $_GET['id'];
$db = DB_CONNECT($DB_HOST, $DB_USER, $DB_PASSWORT, $DB_NAME);
$abfrage = "SELECT seiten.favicon FROM seiten WHERE seiten.id = '$id'";
$result = $db->query($abfrage);
$result = $result->fetch_assoc();
$favicon = htmlspecialchars_decode($result['favicon']);
$favicon = stripslashes($favicon);
$db-close();
header ("Content-type: image/jpeg");
$im = ImageCreateFromJPEG($favicon);
ImageJPEG($im);
folgendes stehen:
include("../config/config.php");//Nur da, damit test durchgeführt werden kann
include("../includes/functions.php");//auch nur zum test da
$id = $_GET['id'];
$db = DB_CONNECT($DB_HOST, $DB_USER, $DB_PASSWORT, $DB_NAME);
$abfrage = "SELECT seiten.favicon FROM seiten WHERE seiten.id = '$id'";
$result = $db->query($abfrage);
$result = $result->fetch_assoc();
$favicon = htmlspecialchars_decode($result['favicon']);
$favicon = stripslashes($favicon);
echo $result['favicon'];
echo "<br>" . $favicon;
echo "<br>" . '<img src="'.$favicon.'">';
leider zeigt die ausgabe zweimal den Inhalt der Variable, aber nicht das Bild und nr.3 zeigt wieder ein Bildbereich an, ohne Bild :(
André
Original geschrieben von aSkInG
[B]Array
(
[favicon] => /tmp/phpaA8z4C
)
Dann hast du nicht den Inhalt der hochgeladenen Datei,sondern nur ihren Namen im temporären Uploadverzeichnis des Servers gespeichert.
ok, das kann sein. Das kann sogar sehr gut sein :)
Wie LADE ich denn explizit die datei hoch?
André
move_uploaded_file und Konsorten.
Beispiele gibts im PHP-Handbuch im Kapitel "Uploads".
Danke, werde ich mal sehen.
Aber mit move_uploaded_files kann ich die Datei auch in die Datenbank kopieren?
Das wusste ich noch nicht.
Danke nochmals
André
Nein kopieren nicht, aber in dein Verzeichnis holen, damit du sie weiterverarbeiten kannst.
Das Übernehmen in die Datenbank machst du dann mit fopen() und fread().
Ok, also ich schiebe die Datei erstmal in einen Ordner. Dann schiebe ich die datei mit fopen und fread in die Datenbank? Und anstelle einer Datei gebe ich dann die Datenbank an?
Sorry, aber ich verstehe das gerade nicht. Habe auch schon im Handbuch nachgesehen. Aber ich glaube ich bin auch zu müde.
Wenn du vielleicht so lieb wärst, könntest du mir das dann einmal erklären? Vielen Dank.
André
Nein, du mußt das Bild mit fread() auslesen und dann mit einem mysql_query() ganz normal mit "INSERT INTO...." in ein Datenbankfeld schreiben.
Gut, also soweit klappt alles. Habe nun wirklcih das Bild hochgeladen.
Nun habe ich aber noch Probleme mit dem auslesen.
Ich habe nur die Variable ausgegeben im script makeimage.
Ich bekomme auch schon ein Bereich angezeigt der die richtige größe hat, auch die Farbtiefe von 8bits wird mir angezeigt und auch, dass es mit adobe erstellt worden ist.
Soweit so gut. Aber das Bild ansich wird mir NICHT angezeigt! :(
Woran mag das liegen?
Danke
André
Das ganze htmlspecialchars Gedöns ist völlig überflüssig!!
Auch die slash verwurstung ist, nunja, unvollkommen.
Benutze die Escape Funktion des DB Treibers wenn nötig.
Welche DB verwendest du überhaupt?
Auch das jpg Gedöns ist falsch, denn es ist ja gar kein Jpg, oder?
Doch zu testzwecken ist es noch ein jpg. nachher wird das für das favicon angepasst.
ich habe jetzt anstelle jpeg jpg genommen.
Wieso ist das htmlspecialchars und slashes unsinnig? Was ich so gelesen habe, da steht das man das eigentlich immer machen sollte. Nun ja, ich kann das auch wegnehmen. Ich nutzte MySQL.
Nun ich habe auch schon einen kleinen Erfolg, und zwar wird ein kleiner Teil des Bildes auch angezeigt. Aber danach bleibt alles weiß
Hier mal den Code von makeimage.php
header("Content-type: image/jpg");
include("../config/config.php");
include("../includes/functions.php");
$id = $_GET['id'];
$db = DB_CONNECT($DB_HOST, $DB_USER, $DB_PASSWORT, $DB_NAME);
$abfrage = "SELECT seiten.favicon FROM seiten WHERE seiten.id = '$id'";
$result = $db->query($abfrage);
$result = $result->fetch_assoc();
$favicon = htmlspecialchars_decode($result['favicon']);
$favicon = stripslashes($favicon);
echo $favicon;
Wieso ist das htmlspecialchars und slashes unsinnig? Was ich so gelesen habe, da steht das man das eigentlich immer machen sollte. Nun ja, ich kann das auch wegnehmen. Ich nutzte MySQL
Schmeiß das Buch weg...
Nutze nur bei dem Eintragen: mysql_real_escape_string()
Beim Lesen brauchst du nix zu machen. Nur die richtigen Header setzen und zum Browser schicken.
Ok, werde ich mir merken.
Du scheinst kein Anhänger von htmlspecialchars zu sein etc. Darf ich nebenbei fragen warum?
UNd dann noch was. Ich habe den Header ja nun richtig gesetzt und ich bekomme ja uach daten angezeigt. Aber nicht die Bilder.
http://www.webby24.de/test/admin/makeimage.php?id=6
da mal ein Link ohne Bild
und hier eins mit einem halebn bild:
http://www.webby24.de/test/admin/makeimage.php?id=73
Du scheinst kein Anhänger von htmlspecialchars zu sein etc. Darf ich nebenbei fragen warum?
Ich bin ein ausgesprochener Fan von htmlspecialchars() und htmlentities() !!
"Image-binär-Daten" !== "HTML"
Oder?
Diese beiden Funktionen sind bei der Erzeugung von HTML ungemein hilfreich!
Aber du willst ja kein HTML erzeugen, sondern ein Bild in der DB speichern. Also sind es definitiv die falschen Funktionen für diesen Zweck.
Schau dir die Seiten im Handbuch nochmal ganz genau an:
http://de3.php.net/manual/de/function.htmlspecialchars.php
http://de3.php.net/manual/de/function.htmlentities.php
Steht das irgend etwas über DBs oder so...?
Zeige doch mal deinen Code wie er jetzt aussieht!
Das Lesen und das Schreiben.
Okay,
ich habe aber eine andere MySQL Verbindung, daher will mysql_real_escape_string nicht. DAher habe ich einfach alles rausgenommen.
Hier erstmal die Formular Daten:
if(isset($_FILES['favicon']['tmp_name']) && $_FILES['favicon']['tmp_name'] != '')
{
// Hier unbedingt noch mal überprüfen, ob es sich um die richtige Größe etc. handelt!
// Alles andere löschen!
$favicon = $_FILES['favicon']['tmp_name'];
$size = $_FILES['favicon']['size'];
$image = fopen($favicon, 'r');
$inputdata = fread($image, $size);
//$inputdata = htmlspecialchars($inputdata);
//$inputdata = addslashes($inputdata);
//$favicon = htmlspecialchars($favicon);
//$favicon = addslashes($favicon);
} else {
$favicon = NULL;
}
nun das senden und ausführen an die DB
// Es wurden nun alle empfangenen Daten in kurze Variablen gespeichert!!!!
// Nun alle Daten in die Datenbank eingeben und bei Erfolg, eine Erfolgsmeldung ausgeben.
$db = DB_CONNECT($DB_HOST, $DB_USER, $DB_PASSWORT, $DB_NAME);
$select = "INSERT INTO seiten VALUES ('" . $id . "', '" . $name
. "', '" . $menuname ."', '" . $menu . "', '" . $inhalt
. "', '" . $inputdata . "', '" . $meta_name
."', '" . $meta_keys ."', '" . $meta_author
. "', '" . $meta_beschreibung . "', '"
. $meta_titel ."','" . $guestbook ."')";
$doIt = $db->query($select);
if($doIt)
{
echo '<h1>Gratulation!</h1><p>Alle Daten wurden erfolgrecih eingespeichert!</p>
<p><a href="einstieg.php?PageId=seiten">Hiermit kehren Sie zur Administrationsoberfläche Zurück.</a>
</p>';
}
Nun die makeimage.php
<?php
header("Content-type: image/jpeg");
include("../config/config.php");
include("../includes/functions.php");
$id = $_GET['id'];
$db = DB_CONNECT($DB_HOST, $DB_USER, $DB_PASSWORT, $DB_NAME);
$abfrage = "SELECT seiten.favicon FROM seiten WHERE seiten.id = '$id'";
$result = $db->query($abfrage);
$result = $result->fetch_assoc();
//$favicon = htmlspecialchars_decode($result['favicon']);
//$favicon = stripslashes($favicon);
echo $result['favicon'];
?>
Na ja da hast du recht. Ich habe nur gelernt, das alles was in die DB rein geschrieben werden soll, so escapet werden sollte. Daher mache ich das. :)
Gar nichts machen kann doch auch nur falsch sein!
Ohne das mysql_real_escape_string() wirds nichts!
Was "eine andere Verbindung" ist, weiß ich auch nicht...
Da bildest du dir was ein.
Und die sind ja immer noch da:
$favicon = htmlspecialchars_decode($result['favicon']);
$favicon = stripslashes($favicon);
Ich habe dir alles geschrieben, was ich dazu weiß!
Mach was draus....
Original geschrieben von aSkInG
ich habe aber eine andere MySQL Verbindung, daher will mysql_real_escape_string nicht. DAher habe ich einfach alles rausgenommen.
mysqli_real_escape_string() (http://de3.php.net/manual/de/mysqli.real-escape-string.php)
Danke!
An euch beide!
es hat funktioniert! Ich kam wieder nicht auf das i, das verdammte :)
So klappt auch alles. :)
Ach ja, noch eins, ich danke dir für deine geduld, doch bin ich nicht beratungsresitent, ich habe lediglich vergessen die hier auszuklammern :)
Zumal ich das testen wollte, ob es so besser ist. War nicht der Fall. Habe ich erkannt.
Danke nochmal
|
|