| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Bildinformationen heranziehen
Diskussion: Bildinformationen heranziehen im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige
N'abend,
Die Überschrift ist leider nicht sehr informativ, es ist aber auch ein schwer in wenigen Worten zusammenfassbares Problem.
...
 |
03.05.07, 21:39
|
#1 (permalink)
|
Registriert seit: 25.06.06 Likes: 0 | Bildinformationen heranziehen Anzeige N'abend,
Die Überschrift ist leider nicht sehr informativ, es ist aber auch ein schwer in wenigen Worten zusammenfassbares Problem.
Und zwar will ich einen kleinen Bilder upload machen.
Dabei hab ich folgendes Eingabefeld: Code: <html>
<head>
<title>
Bilderupload
</title>
</head>
<body>
<form action="../upload.php" method="post" enctype="multipart/form-data">
<h2>
Neues Bild hinzufügen
</h2>
Person: <input name="person" type="text" size="20" /><br />
Ort: <input name="ort" type="text" size="20" /><br />
Datum: <input name="datum" type="text" size="20" /><br />
Fotograf: <input name="fotograf" type="text" size="20" /><br />
Bild: <input name="bild" type="file" size="20" accept="text/*" /><br />
<input name="submit" type="submit" value="Bild hochladen" /><br />
</form>
</body>
</html> So jetzt will ich das in folgenden Skript verarbeiten: PHP-Code:
<html> <head> <title> Bildupload </title> </head> <body> <?php $server = "localhost"; $user = "root"; $password = "*****************"; $database = "wales"; if (isset($_POST['submit'])) { // Prüfen, ob Eingabe gemacht wurde if (empty($_POST['person']) AND empty($_POST['ort']) AND empty($_POST['datum']) AND empty($_POST['fotograf']) OR empty($_POST['bild'])) { echo "Eingabe inkorrekt!<br />"; echo '<a href="../neu.php">Zurück</a>'; exit(); } mysql_connect($server, $user, $password, $database); if (file_exists($_POST['bild'])) { echo "Es gibt bereits ein Bild mit diesem Namen."; } else { copy($_POST['bild'], "../bilder/"); echo "Das Bild".$_POST['bild']."wurde erfolgreich hochgeladen."; //jetzt noch thumbnail erstellen $ziel = $_POST['bild']; $pfad = "../thumb/"; $size = getimagesize("../bilder/$ziel"); $breite = $size[0]; $hoehe = $size[1]; $neuehoehe = 70; $neuebreite = intval($breite*$neuehoehe/$hoehe); if ($size[2] == 2) { $altesbild = ImageCreateFromJPEG("../bilder/$ziel"); $neuesbild = ImageCreate($neuebreite, $neuehoehe); ImageCopyResized($neuesbild, $altesbild, 0, 0, 0, 0, $neuebreite, $neuehoehe, $breite, $hoehe); ImageJPEG($neuesbild, "../thumb/$bild"); } // jetzt noch alles in der Datenbank speichern $query = "INSERT INTO wales_bilder (person, ort, datum, fotograf, bildpfad, thumbpfad) VALUES ('".$_POST['person']."','".$_POST['ort']."','".$_POST['datum']."','".$_POST['fotograf']."', '../bilder/', '../thumb/');"; $result = mysql_query($query) OR die(mysql_error()); echo "Es wurde nun noch ein Thumbnail erstellt und die nötigen Daten in die Datenbank geschrieben.<br />"; echo '<a href="../neu.php">Ein weiteres Bild hochladen</a><br />'; echo '<a href="../index.htm">Zurück zur Startseite.</a><br />'; } } else { echo 'Bitte benutze die <a href="../index.htm">Suchfunktion</a>'; } ?> </body> </html> Ich weiß auch schon wo der Fehler liegt, und zwar wenn ich OR empty($_POST['bild']) weg mache, funzt es mehr oder weniger einwandfrei ( es fehlt halt die variable im restlichen Skript. ).
Jedoch weiß ich sonst nicht, wie ich prüfen soll, ob eine Datei vorher ausgewählt wurden ist, und wie ich an die Bildmaße rankommen.
Ich habe schon probiert das ganze mit !isset() zu ersetzen (,da ich dachte es läge vielleicht am empty ), das ging aber auch nicht.
Danach hab ich nochmal bei selfhtml geguckt. Da steht als einzige 2 Bedingungen, dass es mit POST übergeben muss und im form stehen muss, dass es enctype="multipart/form-data" ist.
Wenn ich bei dem input der File die accept-Bedingung rausnehmen verändert sich trotzdem nichts.
Ich hoffe ihr könnt mir helfen.
0wnZ |
| |
03.05.07, 21:53
|
#2 (permalink)
| | Administrator
Registriert seit: 02.10.01 Likes: 30 | Probiere mal: Code: if ($_FILES['bild']['name']) { Zitat: |
und wie ich an die Bildmaße rankommen.
| Ich habe das in einem Uploadscript mal so gemacht: Code: $image=getimagesize($_FILES['bild']['tmp_name']);
$width=$image[0];
$height=$image[1]; |
| | | |
| | HaBOT
| - Anzeige - |
| |
03.05.07, 22:21
|
#3 (permalink)
| Themenstarter
Registriert seit: 25.06.06 Likes: 0 | Danke, es geht 
Nur ein kleines Problemchen. Das Bild wird nicht gespeichert.
Soll heißen, es kopiert sich nicht in den Zielordner.
In der Datenbank hingegen wird alles richtig eingetragen.
mit copy(); sollte das doch funzen ? |
| |
03.05.07, 22:24
|
#4 (permalink)
| | Moderator
Registriert seit: 14.02.06 Likes: 21 |
__________________ "Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better." - Samuel Beckett JS BB LX UP |
| |
13.05.07, 16:45
|
#5 (permalink)
| Themenstarter
Registriert seit: 25.06.06 Likes: 0 | Entschuldigung für die späte Antwort.
Leider funktioniert move_uploaded_file() nicht. Liegt es daran, dass ich es momentan noch lokal mit xampp ausprobiere ?
Mit is_ulpoaded_file()
habe ich geprüft, ob $_FILES['bild']['name']; eine hochgeladene Datei ist. die Funktion liefert FALSE.
Habe auch schon bei php.net bei Steurung von Dateiuploads, jedoch ohne Erflog  .
Wäre dankbar für eine Idee. |
| |
13.05.07, 19:14
|
#6 (permalink)
|
Registriert seit: 14.03.07 Likes: 0 | Ich trage zwar nicht zur Lösung deines Problems bei, aber möchte dennoch sagen, dass das gesamte Script unsicher ist.
es wird keine einziege Usereingabe überprüft, angefangen von den sql querrys Code: VALUES ('".$_POST['person']. bis zu dem format der datei (das man wirklich nur bilderformate uppen kann (.jpg, .gif, .png, ....) und keine php scripte oder ausführbare programme...
weiter brauche ich garnicht zu schauen, dass sind schonmal 2 sachen die mir direkt ins Auge gestochen sind, und auschon reichen um den Webspace unter kontrolle zu bekommen.
Ich denke mal da hast du noch einige szu verbessern
mfg |
| |
13.05.07, 19:18
|
#7 (permalink)
| Themenstarter
Registriert seit: 25.06.06 Likes: 0 | Ich werde es berücksichtigen. Eigentlich sollte das Skript nur solange auf dem Zielrechner bleiben, wie Bilder hochgeladen werden. Und dann bin ich dabei, oder es sind Leute am Werken, die davon keine Ahnung haben  .
Trotzdem gucke ich nochmal wegen den ganzen Eingaben. Um es einfach Idiotensicher zu machen. |
| |
15.05.07, 23:29
|
#8 (permalink)
|
Registriert seit: 17.03.04 Likes: 2 | Ich denke mal Du rufst die Funktion move_uploaded_file() falsch auf.
Beispiel: PHP-Code: if (! move_uploaded_file($_FILES['bild']['tmp_name'], "../thumb/" . $_FILES['bild']['name'])) { die("Das Bild konnte nicht übertragen werden!"); }
__________________ Mfg Basic Avid
- Use it or be used! - |
| |
16.05.07, 14:56
|
#9 (permalink)
| Themenstarter
Registriert seit: 25.06.06 Likes: 0 | Super, danke, das hat mir schon sehr geholfen.
Damit sind schonmal die Fehlermeldungen weg.
Das Problem, dass die Datei nicht in den dafür vorhergesehen Ordner kopiert wird bleibt.
Nochmal das Skript, wie es jetzt ist: PHP-Code:
<html> <head> <title> Bildupload </title> </head> <body> <?php $server = "localhost"; $user = "root"; $password = "xxxxxxxx"; $database = "wales"; if (isset($_POST['submit'])) { // Prüfen, ob Eingabe gemacht wurde if (empty($_POST['person']) AND empty($_POST['ort']) AND empty($_POST['datum']) AND empty($_POST['fotograf']) OR empty($_FILES['bild']['name'])) { echo "Eingabe inkorrekt!<br />"; echo '<a href="../neu.php">Zurück</a>'; exit(); } mysql_connect($server, $user, $password, $database); mysql_select_db($database); if (file_exists($_FILES['bild']['name'])) { echo "Es gibt bereits ein Bild mit diesem Namen."; } else { $bild = $_FILES['bild']['name']; $hochladen = move_uploaded_file($_FILES['bild']['tmp_name'], "../bilder/"); echo "Das Bild ".$_FILES['bild']['name']." wurde erfolgreich hochgeladen."; //jetzt noch thumbnail erstellen $pfad = "../thumb/"; $size = getimagesize("../bilder/".$_FILES['bild']['name']); $breite = $size[0]; $hoehe = $size[1]; $neuehoehe = 70; $neuebreite = intval($breite*$neuehoehe/$hoehe); if ($size[2] == 2) { $altesbild = ImageCreateFromJPEG($_FILES['bild']['tmp_name']); $neuesbild = ImageCreate($neuebreite, $neuehoehe); ImageCopyResized($neuesbild, $altesbild, 0, 0, 0, 0, $neuebreite, $neuehoehe, $breite, $hoehe); ImageJPEG($neuesbild, "../thumb/"); // jetzt noch alles in der Datenbank speichern $query = "INSERT INTO wales_bilder (person, ort, datum, fotograf, bildpfad, thumbpfad) VALUES ('".$_POST['person']."','".$_POST['ort']."','".$_POST['datum']."','".$_POST['fotograf']."', '../bilder/', '../thumb/');"; $result = mysql_query($query) OR die(mysql_error()); echo "Es wurde nun noch ein Thumbnail erstellt und die nötigen Daten in die Datenbank geschrieben.<br />"; } echo '<a href="../neu.php">Ein weiteres Bild hochladen</a><br />'; echo '<a href="../index.htm">Zurück zur Startseite.</a><br />'; } } else { echo 'Bitte benutze die <a href="../index.htm">Suchfunktion</a>'; } ?> </body> </html> PS: Sicherheit kommt, wenn das funktioniert. |
| |
16.05.07, 15:03
|
#10 (permalink)
|
Registriert seit: 17.03.04 Likes: 2 | Du hast Dir meine Antwort nicht genau genug angeschaut. :O
move_uploaded_file() weiss bei Dir ja nicht wie die Datei heißen soll.
__________________ Mfg Basic Avid
- Use it or be used! - |
| |
16.05.07, 15:07
|
#11 (permalink)
| Themenstarter
Registriert seit: 25.06.06 Likes: 0 | Hat sich 
Smash hat sich bereit erklärt und mir per icq geholfen.
BasivAvid auch 
Trotzdem danke an alle.
Mit freundlichen Grüßen
0wnZ |
| |
16.05.07, 17:58
|
#12 (permalink)
|
Registriert seit: 17.03.04 Likes: 2 | Mir dünstet, Du versuchst mit Deinem Script auf ein Verzeichnis ausserhalb des DocumentRoot zuzugreifen.
Du willst ja mit Deinem ../bilder auf ein Verzeichnis ausserhalb des htdocs Verzeichnisses zugreifen. Böser Fehler!
Ändere mal in Deinen Dateien ../ in ./ um und probier es nochmal.
__________________ Mfg Basic Avid
- Use it or be used! - |
| |
16.05.07, 19:10
|
#13 (permalink)
|
Registriert seit: 14.03.07 Likes: 0 | @Basiv, hab ich schon ;> aber keine Ahnung ob er 's schon wieder geändert hat...
mfg |
| |
16.05.07, 19:19
|
#14 (permalink)
| Themenstarter
Registriert seit: 25.06.06 Likes: 0 | Jap, alles funktioniert jetzt.
Ich weiß, dass es momentan ziemlich unübersichtlich und unsicher ist.
Aber hier erstmal das vorläufige Skript, falls andere Leute genauso auf dem Schlau stehen wie ich: PHP-Code: <?php $server = "localhost"; $user = "root"; $password = "xxxxxxxxxxxxx"; $database = "wales"; if (isset($_POST['submit'])) { // Prüfen, ob Eingabe gemacht wurde if (empty($_POST['person']) AND empty($_POST['ort']) AND empty($_POST['datum']) AND empty($_POST['fotograf'])
OR empty($_FILES['bild']['name'])) { echo "Eingabe inkorrekt!<br />"; echo '<a href="./neu.php">Zurück</a>'; exit(); } mysql_connect($server, $user, $password, $database); mysql_select_db($database); if(file_exists("./bilder/".$_FILES['bild']['name'])) { echo "Es gibt bereits ein Bild mit diesem Namen."; } else { $bild = $_FILES['bild']['name']; $hochladen = move_uploaded_file($_FILES['bild']['tmp_name'], "./bilder/".$_FILES['bild']['name']); echo "Das Bild ".$_FILES['bild']['name']." wurde erfolgreich hochgeladen."; //jetzt noch thumbnail erstellen $size = getimagesize("./bilder/".$_FILES['bild']['name']); $breite = $size[0]; $hoehe = $size[1]; $neuehoehe = 70; $neuebreite = intval($breite*$neuehoehe/$hoehe); if ($size[2] == 2) { $altesbild = ImageCreateFromJPEG("./bilder/".$_FILES['bild']['name']); $neuesbild = ImageCreateTrueColor($neuebreite, $neuehoehe); ImageCopyResampled($neuesbild, $altesbild, 0, 0, 0, 0, $neuebreite, $neuehoehe, $breite, $hoehe); $thumbName = explode('.', $_FILES['bild']['name']); $thumbName = $thumbName[0] . '_thumb.' . $thumbName[1]; ImageJPEG($neuesbild, "./thumb/" . $thumbName); $bildName = $_FILES['bild']['name']; // jetzt noch alles in der Datenbank speichern $query = "INSERT INTO wales_bilder (person, ort, datum, fotograf, bildpfad, thumbpfad) VALUES
('".$_POST['person']."','".$_POST['ort']."','".$_POST['datum']."','".$_POST['fotograf']."', './bilder/$bildName',
'./thumb/$thumbName');"; $result = mysql_query($query) OR die(mysql_error()); echo "Es wurde nun noch ein Thumbnail erstellt und die nötigen Daten in die Datenbank
geschrieben.<br />"; } echo '<a href="./neu.php">Ein weiteres Bild hochladen</a><br />'; echo '<a href="./bilder/'.$bildName.'">Das Bild angucken</a><br />'; echo '<a href="./index.htm">Zurück zur Startseite.</a><br />'; } } else { echo 'Bitte benutze die Uploadskript. <br /> <a href="../index.htm">Zurück</a>'; } ?> </body> </html> Wenn ich Sicherheitslücken gestopft habe und es übersichtlicher ist, werde ich noch edit vornehmen
Danke nochmals |
| |  | | |
| | | - Anzeige - |
| | [HaBo]
» Web, Network & Multimedia Palace
» (Web-) Design und webbasierte Sprachen
»
Bildinformationen heranziehen
| Themen-Optionen | | | | Ansicht | Linear-Darstellung |
Forumregeln
| Es ist Ihnen nicht erlaubt, neue Themen zu verfassen. Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten. Es ist Ihnen nicht erlaubt, Anhänge hochzuladen. Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten. HTML-Code ist aus. | | |
|