PHP Bild hochladen und abspeichern
Hallo Community,
ich will eine Seite (HTML,PHP, MySQLi, CSS - möglichst kein JS) machen, wo man sein Bild hochlädt und es dann gespeichert wird, während der Pfad in der DB landet.
Mein Code bis jetzt:
HTML:
<br /><h3><?php echo $language['reportTitle']; ?></h3>
<form class="adder" action="saveReport.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="ID" value="<?php echo $_SESSION['ID']; ?>" />
<br /><?php echo $language['reportImage']; ?><label class="upload"><p><?php echo $language['reportUpload']; ?></p><input name="image" type="file" maxlength="1000000" accept="image/*" /></label>
<br /><br /><?php echo $language['reportDescription']; ?><input name="description" type="text" />
<br /><br /><b><?php echo $language['reportInfoTitleGeneral']; ?></b><input type="submit" />
</form>
CSS: (eig. unwichtig)
.upload {
overflow: hidden;
position: absolute;
text-align: center;
font-size: small;
color: #708090;
background-color: #dddddd;
width: 213px;
height: 33px;
left: 500px;
margin-top: -10px;
border-width: thin;
border-color: #C0C0C0;
border-style: solid;
border-radius: 3px;
}
.upload:hover {
border-color: #008B8B;
}
.upload [type="file"] {
display: block;
position: absolute;
font-size: 999px;
filter: alpha(opacity=0);
opacity: 0;
right: 0;
top: 0;
}
.upload p {
margin-top: 10px;
}
PHP: (nur ein Ansatz)
<?php
include('../include/language.inc.php');
include('../include/testSession.inc.php');
include('../include/connect.inc.php');
$info[1] = $_POST['ID'];
$info[2] = $_POST['description'];
$info[3] = $_FILES['image'];
$size = sizeof($info);
for($i = 0; $i < $size; $i++) {
if(empty($info[$i])) {
$_SESSION['error'] = $language['addErrorMissingData'];
header('Location:report.php');
die($language['addErrorMissingData']);
}
}
$path = "INSERT INTO bugs VALUES (NULL,'".$info[1]."','".$info[2]."','".$info[3]."')";
$mysqli->query($path);
imagepng($im, '../include/images/'. $mysqli->insert_id . image_type_to_extension(IMAGETYPE_PNG));
?>
Ich habe schon ein bisschen gegoogelt, aber ich versteh's nicht. Gefunden hab ich:
- ob_start()
- POST uploads: http://php.net/manual/en/features.file-upload.post-method.php#features.file-upload.post-method
Am ende sollen (NULL für die ID), die UserID und die Beschreibung in der DB landen. Der Bild-Pfad soll bug['ID'].'.png' sein.
Fragen:
- Wie nehme ich das Bild entgegen? ($_POST oder $_FILES)
- Wie wandle ich das Bild in ein PNG-Format um?
- Wie speicher ich das Bild?
- Wieso spackt der "Hochladen"-Button so? (Text verschwindet nach anklicken) (Optional)
Danke, schon mal im Voraus!
-Minding
1 Antwort
Hey (Frage gerade erst gesehn),
Du hast ja scheinbar rausgefunden wie du die Datei entgegennimmst und speichern kannst (move uploaded file). Sehr gut.
Zu deinen restlichen Fragen:
Wie ändere ich die Endung?
Du willst ein beliebiges Bild, das hochgeladen wurde ins PNG-Format formatieren? Dazu gibts die Funktion imagepng():
$result = imagepng(imagecreatefromstring(file_get_contents($filename)), "dein/zielpfad/datei.png");
Einfach die hochgeladene Datei damit konvertieren.
Können manche Bildformate mehr als PNG oder werden sie vlt. bei der Formatierung beschädigt (kein .gif oder so)
Wenn Bild-Dateien in ihrer Struktur beschädigt sind kann es natürlich sein, dass das konvertieren fehlschlägt (oder wenn etwas anderes als ein Bild hochgeladen wurde). In diesem Fall weißt du Bescheid, indem du den Rückgabewert von imagepng untersuchst. Wenn $result false ist, würde kein gültiges Bild hochgeladen. Bedenke, dass das Ändern der Dateiendung keine Konvertierung ist! Du hast dann immer noch ein JPG oder GIF, dessen Dateiname dann lediglich mit ".png" endet
Wieso spackt der "Hochladen"-Button so? (Text verschwindet nach anklicken) (Optional)
Soweit ich dein CSS und HTML gesehen habe hast du kein entsprechendes Verhalten definiert. Ich vermute daher, dass der Schuldige der Browser ist, der den Text ändert/löscht, nachdem er mit dem Senden begonnen hat (um den User daran zu hindern während des Sendevorgangs erneut eine Datei auszuwählen). Schau doch mal ob ein anderer Browser genauso reagiert (IE, Firefox, Chrome)
Hi,
danke für deine Antwort!
Ich hab's jetzt mit Opera, Chrome, FF und IE ausprobiert - überall das gleiche Problem!
Ich hoffe mir kann jemand Helfen, ich nehm auch gerne andere CSS Vorschläge an und passe sie dann meinem Design an.
-Minding