 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
09.06.2002, 21:04
|
#1
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
[php/mysql] Wie bild speichern
nabend!
hab ein kleines Problem, Kunde will seine Referenzen mit Bild + Titel + Text eingeben können (in Formular)
soweit sogut, nur mit dem Bild hab ich keinen Tau wie das denn bitteschön gehen soll. (so mit durchsuchen button) ihr wisst ja eh
danke im voraus
PS: Kann durchaus sein dass hier schon mal ein Thread über das Thema war hab'n aber nicht gefunden.
|
|
|
09.06.2002, 22:44
|
#2
|
|
TP-Veteran
Registriert seit: Nov 2001
Ort: Friedrichshafen am Bodensee
|
Vielleicht hilft dir das hier weiter.
|
|
|
10.06.2002, 01:37
|
#3
|
|
TP-Specialist
Registriert seit: Feb 2002
Ort: Wien
|
Hi Holunda,
Hier gibts ein gut erklärtes Tutorial darüber, wie ein Fileupload funktioniert und wie die Binärdaten direkt in die mySQL-DB gespeichert werden.
Ich denke, damit solltest du es ruck zuck auf die Reihe kriegen.
Wenn du die Bilder nicht in die DB speichern willst, ist der Uploadprozess der selbe, nur werden dann die hochgeladenen Dateien mit den Filecopy-Funktionen von PHP in eine bestimmtes Verzeichnis kopiert.
Gruß, Jürgen
|
|
|
10.06.2002, 17:07
|
#4
|
|
TP-Greis
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
|
Ich möchte noch anmerken, dass es ein weit verbreiteter Irrglaube ist, Binärdaten seien in MySQL-Datenbanken gut aufgehoben. Da die LONGBLOB-Felder (BLOB = Binary Large Object) in MySQL tatsächlich nur reine ASSCII-Werte aufnehmen, müssen die Daten vorher escaped werden, wodurch sie immens an Grösse zunehmen. Viel besser ist es daher eigentlich, solche Daten im Dateisystem zu speichern und in der DB eine reine Referenz auf selbige anzugeben.
__________________
Give up yourself into the moment — The time is now.
|
|
|
10.06.2002, 17:18
|
#5
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
Zitat:
Original geschrieben von schmobi
Ich möchte noch anmerken, dass es ein weit verbreiteter Irrglaube ist, Binärdaten seien in MySQL-Datenbanken gut aufgehoben. Da die LONGBLOB-Felder (BLOB = Binary Large Object) in MySQL tatsächlich nur reine ASSCII-Werte aufnehmen, müssen die Daten vorher escaped werden, wodurch sie immens an Grösse zunehmen. Viel besser ist es daher eigentlich, solche Daten im Dateisystem zu speichern und in der DB eine reine Referenz auf selbige anzugeben.
|
ja gut, aber wie setze ich das als php newb in die Tat um? Also eine Verknüpfung/Referenz in die DB speichern?
|
|
|
10.06.2002, 17:32
|
#6
|
|
TP-Greis
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
|
Theoretisch ganz einfach:
Bild per Formular hochladen (look@Link) -> einen Dateinamen für selbiges vergeben -> diesen in der DB speichern -> bei der Ausgabe wieder einsetzen
__________________
Give up yourself into the moment — The time is now.
|
|
|
10.06.2002, 17:46
|
#7
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
Zitat:
|
Theoretisch ganz einfach:
|
hast recht - nur in der Praxis  - NEIN, ich werds mal probieren, wenns nicht klappt meld' ich mich nochmal
lg holunda
|
|
|
10.06.2002, 17:53
|
#8
|
|
TP-Specialist
Registriert seit: Feb 2002
Ort: Wien
|
Wieder mal doppelt - gelöscht
Geändert von Jürgen (10.06.2002 um 18:03 Uhr).
|
|
|
10.06.2002, 18:01
|
#9
|
|
TP-Specialist
Registriert seit: Feb 2002
Ort: Wien
|
Also, die immense Größenzunahme, die Schmobi anspricht, kann ich nicht ganz nachvollziehen, ich hab das bei mir grad bei einem Skript ausprobiert, das ich kürzlich programmiert habe, und bin auf folgende Differenzen bei den Dateigrößen gekommen:
aus einer gif-Datei mit 33.028 byte werden 33.112 -> 0,25 %
aus einem jpg-File mit 12.120 byte werden 12.208 -> 0,72 %
@Schmobie: wie kommst du denn auf so große Unterschiede?
Beim Speichern in die DB hat man zumindest den Vorteil, dass man sich um z. B. gleiche Filenamen keine Gedanken machen muss. Außerdem ist finde ich ein Backup leichter machbar, da alle Daten in einer DB beisammen sind.
Bleibt für mich eigentlich nur der angeblich geringe Geschwindigkeitsvorteil, den man hat, wenn die Dateien über das Filesystem geladen werden. Aber bei ein paar kleinen jpg-Files gibt es da denke ich keinen erkennbaren Unterschied.
Ich hatte auch schon mit einem Projekt zu tun, bei dem wir 20 GB in Form von Word-Files in BLOB-Felder gespeichert hatten, auch das ging - allerdings mit einem MS-SQL Server.
Gruß, Jürgen
|
|
|
10.06.2002, 18:15
|
#10
|
|
TP-Greis
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
|
Bei kleinen GIF- oder JPG-Bildchen geht's sicherlich ohne weitere Probleme, aber wenn es sich um von Natur aus wirklich grosse Dateien handelt, macht sicher der zuwachs stark bemerkbar und die Performance leidet stark darunter.
Der MS SQL-Server behandelt BLOBs übrigens auch anders als MySQL.
__________________
Give up yourself into the moment — The time is now.
|
|
|
10.06.2002, 18:24
|
#11
|
|
TP-Specialist
Registriert seit: Feb 2002
Ort: Wien
|
Zitat:
Original geschrieben von schmobi
Bei kleinen GIF- oder JPG-Bildchen geht's sicherlich ohne weitere Probleme, aber wenn es sich um von Natur aus wirklich grosse Dateien handelt, macht sicher der zuwachs stark bemerkbar und die Performance leidet stark darunter.
Der MS SQL-Server behandelt BLOBs übrigens auch anders als MySQL.
|
Die kleinen Bilder fürs Web bieten sich finde ich schon an, ins BLOB-Feld zu speichern. Große sollte man eh keine auf der Website haben
Ich hatte das mit dem Performance-Verlust auch befürchtet, bin aber draufgekommen, dass mySQL da pfeilschnell ist, man merkt - zumindest bei den kleinen Fotos fürs Web bis 50 kb - absolut nichts, dass die aus der DB kommen.
Außerdem hab ich gern alles in Tabellen
Gruß, Jürgen
|
|
|
10.06.2002, 18:26
|
#12
|
|
TP-Member
Registriert seit: Jan 2002
Ort: Schweiz
|
ich habs auch jeweils so gelöst, dass ich die variable $userfile_name in der datenbank und die bilder in einem ordner (uploads) abgelegt habe. hat den nachteil, dass man die bilder weniger leicht wieder löschen kann nach einer gewissen zeit.
gruess saimn
|
|
|
10.06.2002, 22:15
|
#13
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
sodale: habs mal versucht:
hier mein mehr oder weniger gutes ergebnis
PHP-Code:
<html>
<head>
<title>Untitled</title>
</head>
<body bgcolor="#CCCCCC">
<form enctype="multipart/form-data" name="Upload" action="<? $php_self ?>" method="post">
<table border="0" cellpadding="0" cellspacing="0" bordercolor="#111111" width="500">
<tr>
<td bgcolor="#FF9900" colspan="2"><b><font face="Verdana" size="2" color="#FFFFFF"> Lange Referenzen eingeben</font></b></td>
</tr>
<tr>
<td bgcolor="#FFE3BB" colspan="2"><br></td>
</tr>
<tr>
<td width="150" bgcolor="#FFE3BB"><font face="Verdana" size="2"> Titel:</font></td>
<td width="100%" bgcolor="#FFE3BB"><input type="text" name="titel" size="20"></td>
</tr>
<tr>
<td width="150" bgcolor="#FFE3BB"><font face="Verdana" size="2"> Text:</font></td>
<td width="100%" bgcolor="#FFE3BB"><textarea cols="25" rows="3" name="text"></textarea></td>
</tr>
<tr>
<td width="150" bgcolor="#FFE3BB"><font face="Verdana" size="2"> Dateipfad:</font></td>
<td width="100%" bgcolor="#FFE3BB"><input type="file" name="file" size="20"></td>
</tr>
<tr>
<td width="33%" bgcolor="#FFE3BB"><font face="Verdana" size="2"><br><br> </font></td>
<td width="67%" bgcolor="#FFE3BB"><font face="Verdana" size="2"><input type="submit" value="Upload file" name="cmdSubmit"></font></td>
<input type="hidden" name="action" value="upload">
</tr>
</table>
</form>
<?
include ("../connect.php"); // Verbindung läuft bereits
if ($action == "upload"){
$anfrage = "INSERT INTO referenzen2 (titel,text,bild) VALUES ('$titel','$text','$file')";
mysql_query ($anfrage) or die ("Referenzen konnten nicht gespeichert werden");
echo "Referenzen wurden gespeichert<br><br>";
} //Ende if "upload" #######
$anzeigen = "SELECT * FROM referenzen2 ORDER BY timestamp DESC";
$auswerten = mysql_query ($anzeigen,$verbindung);
echo "<table border=\"1\">";
while ($daten = mysql_fetch_array ($auswerten)){
$daten['titel'] = $titel;
$daten['text'] = $text;
$daten['bild'] = $bild;
echo "<tr>
<td>$bild</td>
<td>$titel</td>
<td>$text</td>
</tr>";
} // Ende Datenausgabe
echo "</table";
mysql_close ($verbindung);
?>
</body>
</html>
er zeigt mir aber nichts an. Woran liegt das?
mfg holunda
|
|
|
10.06.2002, 22:23
|
#14
|
|
TP-Greis
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
|
So wie Du es vorhast, wird das mit den Bildern nicht klappen. Du musst - wie bereits oben erwähnt - erst das Bild einlesen und escapen:
PHP-Code:
$file = addslashes(fread(fopen($file,"r"), filesize($file)));
Schau Dir mal das hier an. 
__________________
Give up yourself into the moment — The time is now.
|
|
|
10.06.2002, 22:40
|
#15
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
bin ratlos
habs probiert: erst das bild einlesen und escapen  aber es funzt immer noch nicht. Bin ratlos
Nochmal der Vollständigkeit halber:
PHP-Code:
<?
include ("../connect.php"); // Verbindung läuft bereits
if ($action == "upload"){
$file = addslashes(fread(fopen($file,"r"), filesize($file)));
$anfrage = "INSERT INTO referenzen2 (titel,text,bild) VALUES ('$titel','$text','$file')";
mysql_query ($anfrage) or die ("Referenzen konnten nicht gespeichert werden");
echo "Referenzen wurden gespeichert<br><br>";
} //Ende if "upload" #######
$anzeigen = "SELECT * FROM referenzen2 ORDER BY timestamp DESC";
$auswerten = mysql_query ($anzeigen,$verbindung);
echo "<table border=\"1\">";
while ($daten = mysql_fetch_array ($auswerten)){
$daten['titel'] = $titel;
$daten['text'] = $text;
$daten['bild'] = $bild;
echo "<tr>
<td>$bild</td>
<td>$titel</td>
<td>$text</td>
</tr>";
} // Ende Datenausgabe
echo "</table";
mysql_close ($verbindung);
?>
php ist und bleibt für mich ein mysterium
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:44 Uhr.
|
 |