buzzom
Mitglied
Hallo,
Ich habe zwei Möglichkeiten geschrieben Bilddateien in meine Datenbank zu schreiben.
Feld--------Typ--------Kollation--------Attribute--------Null--------Standard--------Extra
lfd_nr------int(14)----------------------UNSIGNED-----Nein-------------------------auto_increment Primärschlüssel
ID-------varchar(50) -utf8_bin-----------------------------Ja-----------NULL
dateityp--char(50)---utf8_bin------------------------------Ja-----------NULL
datei-----longblob------------------------BINARY----------Ja----------NULL
Die erste Abfrage prüft, ob ein Bild bereits in DB vorhanden ist, anhand von ID_check
Die zweite Abfrage prüft, wenn noch kein Bild in DB, anhand von ID_check, vorhanden ist dann neues Bild eintragen in DB
Nun klappt das eintragen auch, ABER: Wenn noch kein Bild in DB ist und ich ein neues hinzufüge, steht in der DB unter datei [BLOB - 20 KiB]. Dabei wird das Bild dann nicht dargstellt.
Update ich das Bild, also schreibe das gleiche Bild über das alte in der DB steht unter datei datei [BLOB - 19,6 KiB] und das Bild wird wie gewünscht dargstellt?
Frage nun: Wieso ist das Bild erst größer und wird dementsprechen nicht dargestellt und wieso ist es beim updaten dann original gross und wird dargstellt?
Ich versteh das wirklich nicht.
Kannst Du mir helfen?
Ich habe zwei Möglichkeiten geschrieben Bilddateien in meine Datenbank zu schreiben.
Feld--------Typ--------Kollation--------Attribute--------Null--------Standard--------Extra
lfd_nr------int(14)----------------------UNSIGNED-----Nein-------------------------auto_increment Primärschlüssel
ID-------varchar(50) -utf8_bin-----------------------------Ja-----------NULL
dateityp--char(50)---utf8_bin------------------------------Ja-----------NULL
datei-----longblob------------------------BINARY----------Ja----------NULL
Die erste Abfrage prüft, ob ein Bild bereits in DB vorhanden ist, anhand von ID_check
PHP:
//Pruefen ob Profilbild schon in DB
$sql="SELECT ID FROM profile_pictures ";
$sql.=" WHERE ID='".$_SESSION['IDuser']."'";
$db = new db();
$result=$db->execute($sql);
if($db->num_rows() == 1)
{
$ID_check = $result[1]['ID'];
}
//wenn schon ein Profilbild in DB mit UserID, dann updaten
if($ID_check && is_uploaded_file($_FILES['profilbild']['tmp_name']))
{
if($_FILES['profilbild']['size']>100000) {$fehler.="<br>Die Datei ist zu gross!";}
if(!($_FILES['profilbild']['type'] == 'image/jpeg' OR $_FILES['profilbild']['type'] == 'image/gif'))
{$fehler.="<br>Der Dateityp ist nicht zulaessig!<br>";}
if(!$fehler)
{
$datei=fopen($_FILES['profilbild']['tmp_name'],'rb');
$data=addslashes(fread( $datei, $_FILES['profilbild']['size']));
$db = new db();
$dateityp = $_FILES['profilbild']['type'];
$sql="UPDATE profile_pictures SET dateityp='$db->prepare$dateityp', datei='$db->prepare$data' WHERE ID='$ID'";
$result=$db->execute($sql);
}
if($fehler){ echo "<font color=\"red\">".$fehler."</font>";}
}
Die zweite Abfrage prüft, wenn noch kein Bild in DB, anhand von ID_check, vorhanden ist dann neues Bild eintragen in DB
PHP:
//wenn noch kein Profilbild in DB mit UserID, dann neu hinzufuegen
if(!$ID_check && is_uploaded_file($_FILES['profilbild']['tmp_name']))
{
if($_FILES['profilbild']['size']>100000) {$fehler.="<br>Die Datei ist zu gross!";}
if(!($_FILES['profilbild']['type'] == 'image/jpeg' OR $_FILES['profilbild']['type'] == 'image/gif'))
{$fehler.="<br>Der Dateityp ist nicht zulaessig!<br>";}
if(!$fehler)
{
$datei=fopen($_FILES['profilbild']['tmp_name'],'rb');
$data=addslashes(fread( $datei, $_FILES['profilbild']['size']));
$db = new db();
$dateityp = $_FILES['profilbild']['type'];
$sql="INSERT INTO profile_pictures (ID, dateityp, datei) VALUES ('".$db->prepare($ID)."','".$db->prepare($_dateityp)."','".$db->prepare($data)."')";
$result=$db->execute($sql);
}
if($fehler){ echo "<font color=\"red\">".$fehler."</font>";}
}
Nun klappt das eintragen auch, ABER: Wenn noch kein Bild in DB ist und ich ein neues hinzufüge, steht in der DB unter datei [BLOB - 20 KiB]. Dabei wird das Bild dann nicht dargstellt.
Update ich das Bild, also schreibe das gleiche Bild über das alte in der DB steht unter datei datei [BLOB - 19,6 KiB] und das Bild wird wie gewünscht dargstellt?
Frage nun: Wieso ist das Bild erst größer und wird dementsprechen nicht dargestellt und wieso ist es beim updaten dann original gross und wird dargstellt?
Ich versteh das wirklich nicht.
Kannst Du mir helfen?
