Hallo zusammen
Ich habe letztes Jahr einen Code hier gepostet, weil ich eine Frage hatte. Über die Beatwortung der Frage hinaus haben sich aber auch Leute von hier viel Zeit genommen und mir Mängel in meinem Script aufgezeigt (vielen Dank nochmals!). Ich habe seither viel an meinen Grundlagen gearbeitet und bin (so denke ich) ein ganzes Stück weiter gekommen. So habe ich zur Zeit eigentlich auch keine Frage, sondern eher eine Bitte: Würde sich noch einmal jemand Zeit nehmen, meinen Code anzuschauen und mir vorhandene Mängel aufzeigen?
Hier exemplarisch das script zum Editieren von Einträgen (Bild in Filesystem + Text aus DB) und die Vollbild-Ansicht eines Bildes.
modify.php
fullscreen.php
Vielen Dank schon mal im Voraus.
Ich habe letztes Jahr einen Code hier gepostet, weil ich eine Frage hatte. Über die Beatwortung der Frage hinaus haben sich aber auch Leute von hier viel Zeit genommen und mir Mängel in meinem Script aufgezeigt (vielen Dank nochmals!). Ich habe seither viel an meinen Grundlagen gearbeitet und bin (so denke ich) ein ganzes Stück weiter gekommen. So habe ich zur Zeit eigentlich auch keine Frage, sondern eher eine Bitte: Würde sich noch einmal jemand Zeit nehmen, meinen Code anzuschauen und mir vorhandene Mängel aufzeigen?
Hier exemplarisch das script zum Editieren von Einträgen (Bild in Filesystem + Text aus DB) und die Vollbild-Ansicht eines Bildes.
modify.php
PHP-Code:
<?php
$root = $_SERVER['DOCUMENT_ROOT'];
require_once ($root."/config.php");
$imgpath = "/gallery/upimg/"; // Pfad zum Bild
$imgpathphp = ($root."/gallery/upimg/");
$allowedimgtype = array(IMAGETYPE_GIF,IMAGETYPE_JPEG,IMAGETYPE_PNG,IMAGETYPE_SWF,IMAGETYPE_PSD,IMAGETYPE_BMP,IMAGETYPE_TIFF_II,IMAGETYPE_TIFF_MM,IMAGETYPE_JPC,IMAGETYPE_JP2,IMAGETYPE_JPX,IMAGETYPE_JB2,IMAGETYPE_SWC,IMAGETYPE_IFF,IMAGETYPE_WBMP,IMAGETYPE_XBM,'IMAGETYPE_ICO');
if (isset($_POST['send'])) : //prüft, ob das script oder das Formular angezeigt werden soll
$id = (int) $_POST['id'];
if(!empty($_FILES['imgdata']['name'])) : //prüft, ob ein Bild ausgewählt wurde
if(!in_array(exif_imagetype($_FILES['imgdata']['tmp_name']),$allowedimgtype,true)) : //prüft, ob die Startbits einem der in $allowedimgtype genannten Bildtypen entsprechen
?>
<div class="messages">
<span class="messages selfcreatedicons webicon-attention">!</span>
<span class="messages messagescontent">Die von Ihnen ausgewählte Datei wurde nicht als Bild eines gültigen Formates erkannt. Falls Sie ein Bild ausgewählt haben und diese Fehlermeldung trotzdem erscheint, öffnen Sie das Bild bitte in einem Bildbearbeitungs-Programm und speichern es nochmals als Bild ab.<br>Gültige Formate sind GIF, JPEG, SWF, PSD, BMP, TIFF, JPC, JP2, JPX, JB2, SWC, IFF, WBMP, XBM, ICO.</span><br>
</div>
<?php
else :
// Datei löschen, falls vorhanden
$query = "SELECT name FROM gallery WHERE id =?";
$stmt = mysqli_stmt_init($verbindung);
if (mysqli_stmt_prepare($stmt, $query)) :
if (!$stmt) :
die('mysqli error: '.mysqli_error($verbindung));
endif;
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $filetodelete);
mysqli_stmt_fetch($stmt);
endif;
if (file_exists($imgpathphp.$filetodelete)) :
if (!unlink($imgpathphp.$filetodelete)) :
?>
<div class="messages">
<span class="messages selfcreatedicons webicon-attention">!</span>
<span class="messages messagescontent">Die Datei konnte nicht vom Dateisystem gelöscht werden.</span><br>
</div>
<?php
else :
?>
<div class="messages">
<span class="messages selfcreatedicons webicon-success">s</span>
<span class="messages messagescontent">Die Datei wurde erfolgreich vom Dateisystem gelöscht.</span><br>
</div>
<?php
endif;
else:
?>
<div class="messages">
<span class="messages selfcreatedicons webicon-attention">!</span>
<span class="messages messagescontent">Die Datei, welche Sie zu löschen versuchen, existiert als Datei nicht mehr auf dem Server.</span><br>
</div>
<?php
endif;
// Hochzuladende Datei umbenennen
$fileinfo = pathinfo($_FILES['imgdata']['name']); // Dateiinfos auslesen
$fileextension = $fileinfo['extension']; //File-Extension herausfinden
$imgnamenew = md5(time()); //Der Datei einen "zufälligen" Namen geben
$imgnamenew = substr($imgnamenew, -7).".".$fileextension; //Dateinamen verkürzen und Extension anhängen
// Datei hochladen
if (!move_uploaded_file($_FILES['imgdata']['tmp_name'], $imgpathphp.$imgnamenew)) :
?>
<div class="messages">
<span class="messages selfcreatedicons webicon-attention">!</span>
<span class="messages messagescontent">Beim Upload der Datei ist ein Fehler aufgetreten.</span><br>
</div>
<?php
else:
?>
<div class="messages">
<span class="messages selfcreatedicons webicon-success">s</span>
<span class="messages messagescontent">Der Upload der Datei war erfolgreich.</span><br>
</div>
<?php
endif;
// Meta-Daten des Bildes in der DB updaten
$filetype = $_FILES['imgdata']['type'];
$filesize = $_FILES['imgdata']['size'];
$imgname_tmp = $_FILES['imgdata']['tmp_name'];
$query = "UPDATE gallery SET name =?, name_tmp =?, filetype =?, filesize =? WHERE id =?";
$stmt = mysqli_stmt_init($verbindung);
mysqli_stmt_prepare($stmt, $query);
if ( !$stmt ) :
die('mysqli error: '.mysqli_error($verbindung));
endif;
mysqli_stmt_bind_param($stmt, "sssii", $imgnamenew, $imgname_tmp, $filetype, $filesize, $id);
if(!mysqli_stmt_execute($stmt)):
die( 'stmt error: '.mysqli_stmt_error($stmt));
endif;
if (mysqli_stmt_affected_rows($stmt) == 0): //überprüft, ob ein Datenbank-Eintrag hinzugefügt wurde
?>
<div class="messages">
<span class="messages selfcreatedicons webicon-info">i</span>
<span class="messages messagescontent">Es wurden keine Änderungen an der Datenbank vorgenommen.</span><br>
</div>
<?php
else :
?>
<div class="messages">
<span class="messages selfcreatedicons webicon-success">s</span>
<span class="messages messagescontent">Die Datenbankeinträge wurden erfolgreich geändert.</span><br>
</div>
<?php
endif;
endif;
else:
?>
<div class="messages">
<span class="messages selfcreatedicons webicon-info">i</span>
<span class="messages messagescontent">Die Datei wurde nicht geändert.</span><br>
</div>
<?php
endif;
// Bild-unabhängige Formulardaten in der Datenbank ändern
$query = "SELECT alttext FROM gallery WHERE id =?";
$stmt = mysqli_stmt_init($verbindung);
if (mysqli_stmt_prepare($stmt, $query)) :
if (!$stmt) :
die('mysqli error: '.mysqli_error($verbindung));
endif;
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $alttextdb);
mysqli_stmt_fetch($stmt);
endif;
//$alttextdb = $row['alttext'];
$alttextpost = $_POST['alttext'];
$query2 = "UPDATE gallery SET alttext =? WHERE id =?";
$stmt = mysqli_stmt_init($verbindung);
mysqli_stmt_prepare($stmt, $query2);
if (!$stmt ) :
die('mysqli error: '.mysqli_error($verbindung));
endif;
mysqli_stmt_bind_param($stmt, "si", $alttextpost, $id);
if(!mysqli_stmt_execute($stmt)):
die( 'stmt error: '.mysqli_stmt_error($stmt));
endif;
if (mysqli_stmt_affected_rows($stmt) == 0): //überprüft, ob ein Datenbank-Eintrag hinzugefügt wurde
?>
<div class="messages">
<span class="messages selfcreatedicons webicon-info">i</span>
<span class="messages messagescontent">Sie haben keine von Ihrem Bild unabhängigen Daten geändert.</span><br>
</div>
<?php
else :
?>
<div class="messages">
<span class="messages selfcreatedicons webicon-success">s</span>
<span class="messages messagescontent">Die Änderungen Ihrer vom Bild unabhängigen Datenbankeinträgen waren erfolgreich.</span><br>
</div>
<?php
endif;
// Bietet Möglichkeit auf Admin-Seite zurückzukehren
echo '<br><a href="/admin/gallery.html.php">Zurück zur Administrations-Seite</a>';
else :
?>
<html>
<head>
<meta charset="utf8">
<title>
Test-Formular
</title>
</head>
<body>
<?php
// lädt ein abgefülltes Formular, wenn die Seite nicht über POST['send'] aufgerufen wurde
$id = (int) $_GET['id'];
$query = "SELECT alttext, name FROM gallery WHERE id =?";
$stmt = mysqli_stmt_init($verbindung);
if (mysqli_stmt_prepare($stmt, $query)) :
if (!$stmt) :
die('mysqli error: '.mysqli_error($verbindung));
endif;
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $alttext, $imgname);
mysqli_stmt_fetch($stmt);
endif;
?>
<form enctype="multipart/form-data" action="" method="post">
<input type ="hidden" name="id" value="<?=$id?>" /><br>
<input name="alttext" value="<?=$alttext?>" maxlength="70" size="30" /><br>
aktuelles Bild:<br>
<img style="max-height:200px; max-width:200px;" src="<?=$imgpath.$imgname?>" /><br>
neues Bild, sofern Sie das Bild ändern möchten:<br>
<input name="imgdata" type="file" size="40"><br>
<input name="send" type="submit" value="modify" />
</form>
<?php
endif;
/*
ToDo:
- Fehlermeldung, wenn man ein Bild in .jpg umbenennt und hochzladen versucht,
wird nicht richtig dargestellt (zu lang, bzw. Zeilenumbrüche werden nicht richtig dargestellt)
*/
?>
fullscreen.php
PHP-Code:
<?php
$root = $_SERVER['DOCUMENT_ROOT'];
require_once ($root.'/config.php');
$imgpath = '/gallery/upimg/'; // Pfad zum Bild
if( isset($_GET['id'])) :
$id = (int)$_GET['id'];
else :
if (isset($_GET['nextid'])) :
$id = (int)$_GET['nextid'];
else :
$id = (int)$_GET['backid'];
endif;
endif;
/*** Foto zum Anzeigen abfragen ***/
$query = "SELECT name, datetime FROM gallery WHERE id =?";
$stmt = mysqli_stmt_init($verbindung);
if (mysqli_stmt_prepare($stmt, $query)) :
if (!$stmt) :
die('mysqli error: '.mysqli_error($verbindung));
endif;
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
mysqli_stmt_bind_result($stmt, $imgname, $thisdatetime);
mysqli_stmt_fetch($stmt);
mysqli_stmt_free_result($stmt);
endif;
/*** Element mit nächst kleinerem Datum bestimmen ***/
$backquery = "SELECT id FROM gallery WHERE `datetime` < (SELECT `datetime` FROM gallery WHERE id =?) ORDER BY `datetime` DESC LIMIT 1";
$backstmt = mysqli_stmt_init($verbindung);
if(mysqli_stmt_prepare($backstmt, $backquery)) :
if (!$backstmt) :
die('mysqli error1: '.mysqli_error($verbindung));
endif;
mysqli_stmt_bind_param($backstmt, "i", $id);
mysqli_stmt_execute($backstmt);
mysqli_stmt_store_result($backstmt);
mysqli_stmt_bind_result($backstmt, $backid);
mysqli_stmt_fetch($backstmt);
else :
die('mysqli error6: '.mysqli_error($verbindung));
endif;
$nextquery = "SELECT id FROM gallery WHERE `datetime` > (SELECT `datetime` FROM gallery WHERE id =?) ORDER BY `datetime` ASC LIMIT 1";
$nextstmt = mysqli_stmt_init($verbindung);
if (mysqli_stmt_prepare($nextstmt, $nextquery)) :
if (!$nextstmt) :
die('mysqli error: '.mysqli_error($verbindung));
endif;
mysqli_stmt_bind_param($nextstmt, "i", $id);
mysqli_stmt_execute($nextstmt);
mysqli_stmt_store_result($nextstmt);
mysqli_stmt_bind_result($nextstmt, $nextid);
mysqli_stmt_fetch($nextstmt);
endif;
if ($backid != 0) :
?>
<div style="float:left;">
<a href="fullscreen.html.php?id=<?=$backid?>">
back
</a>
</div>
<?php
endif;
if ($nextid != 0) :
?>
<div style="float:right;">
<a href="fullscreen.html.php?id=<?=$nextid?>">
next
</a>
</div>
<?php
endif;
?>
<div class="fullscreen">
<a href ="<?=$imgpath.$imgname?>">
<img class="fullscreen" src="<?=$imgpath.$imgname?>" />
</a>
</div>
Kommentar