Hallo liebes Traum-Team,
habe mir ein tolles Script mit PHP und HTML gebastelt, welches mir Bilder auf den Server lädt. Man kann Bilder auswählen, diese werden dann in drei verschiedenen Größen auf dem Server, mit Orginal Dateinamen + Endungen und Dateityp gespeichert. Danach werden die Pfade zum Verzeichnis sowie zu den Bildern, welche ich zuvor über eine Schleife in ein array gepackt habe in die Datenbank eingetragen. Hinzu habe ich noch die Alt Tags über eine Form mitgeschickt. Diese werden auch in die Datenbank eingetragen. Dieses Script soll nur für mich sein um Inhalte in eine Datenbank einfacher eingeben zu können -- beziehungsweise meine Freundin...
Daher sind auch noch keine Sicherungsabfragen drin und es ist auch noch alles etwas chaotisch angeordnet.
Mein Problem, bei dem ich nun nicht weiterkomme ist, wie ich nun Bilder hinzugebe und in der Datenbank abspeichere.
Aufgrund meines Upload Scriptes habe ich nun schon etwas gebastelt, habe aber im Array immer nur NULL stehen. Weiß nicht wie ich das lösen soll.
Hier erst mal das Script:
In diesem Teil prüfe ich erstmal ob das Formular abgeschickt wurde, lege das Array an, bereinige den Ordnernamen und lege den Pfad fest, wo die Bilder gespeichert werden sollen.
PHP-Code:
if (isset($_POST['submitbutton']))
{
$bilder_dump = array();
$neuer_ordner = $_POST['name_ordner'];
// Umlaute des Ordners ersetzen usw.
$neuer_ordner_bereinigen = array('ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', ' ' => '_');
$neuer_ordner_neu = strtr(strtolower($neuer_ordner), $neuer_ordner_bereinigen);
$pfad = "../deutsch/images_neu/$neuer_ordner_neu/";
$pfad_alt= $datensatz["verzeichnis"];
include ("inc_functions.php");
// Ordner umbenennen mit PHP
rename( $pfad_alt, $pfad);// Hier werde ich noch eine Prüfung einfügen ob der Ordner bereits existiert!!!!!
In diesem Teil lege ich die erlaubten Dateiendungen fest, setze Zäler auf 0 und erzeuge eine Schleife, für jedes Bild das angegeben wird. Dann prüfe ich noch, ob die Datei mehr als 0 KB hat, wenn nicht wurde auch nichts hochgeladen.
PHP-Code:
{
// Erlaubte Dateiendungen festlegen
$Erlaubte_Dateiendungen = array("jpg", "JPG", "gif", "GIF", "png", "BMP", "bmp");
$i = 0;
// Schleife erzeugen für jedes Bild
foreach ($_FILES['datei']['error'] as $key => $error)
{
if ($error == UPLOAD_ERR_OK)
// Pruefen ob die hochgeladenen Datei mehr als 0 Byte hat
if ($_FILES['datei']['size'][$key] > 0)
{
In diesem Schritt nun wird die Dateiendung abgetrennt, Prüfung erfolgt, ob erlaubt, Dateiname umgewandelt und für Linux UMASK resettet.
PHP-Code:
// Dateiendung der hochgeladenen Datei abhacken....
$UploadDateiEndung = array_pop(explode(".", strtolower($_FILES['datei']['name'][$key])));
// Prüfen ob die Endung der hochgeladenen Datei erlaubt ist
if (!in_array($UploadDateiEndung, $Erlaubte_Dateiendungen))
{
die("Die angehängte Datei hat eine nicht erlaubte Dateiendung!");
}
// Neuen Dateinamne erzeugen indem Umlaute und Leerzeichen umgewandelt werden
$DateiNameNeu = strtr(strtolower($_FILES['datei']['name'][$key]), $bereinigen);
// UMASK resetten um Dateirechte zu ändern (Linux, Windows ignoriert das)
$umask_alt = umask(0);
Jetzt geht es los, Datei wird verschoben, und meine Funktion picSize kommt zum Einsatz, welche ich gleich noch bereitstelle.
PHP-Code:
// Hochgeladenen Datei verschieben
if (@move_uploaded_file($_FILES['datei']['tmp_name'][$key], $pfad.$DateiNameNeu))
{
$groesse["_150"] = picSize($_FILES['datei']['name'][$key], 150);//hier wird nun die Funktion aufgerufen; Argument 1 ist die Datei und als größe ist 150 definiert
$groesse["_400"] = picSize($_FILES['datei']['name'][$key], 400);//hier wird nun die Funktion aufgerufen; Argument 1 ist die Datei und als größe ist 400 definiert
$groesse["thumb"] = picSize($_FILES['datei']['name'][$key], 100);//hier wird nun die Funktion aufgerufen; Argument 1 ist die Datei und als größe ist 100 definiert.
//Array befüllen
$i++;
$bild[$i] = $groesse;
// Dateirechte setzen, damit man später die Datei wieder vom FTP bekommt und die UMASK auf den alten Wert setzen
@chmod($neues_bild, 0777);
umask($umask_alt);
}
else
{
// UMASK resetten
umask($umask_alt);
// Hier steht Code der ausgefuehrt wird, wenn der Upload fehl schlug
}
$bilder_dump = $bild;}
}
Hier nun die Funktion, welche ich in einer extra Datei gespeichert habe.
PHP-Code:
<?php
function picSize($pic,$size){
$Dateiname_bereinigen = array( 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', ' ' => '_' );
$neues_bild = strtr( strtolower( $pic ), $Dateiname_bereinigen ); //hier steht nun die Variable welche Argument 1 bildet ($pic)
$neuer_ordner = $_POST['name_ordner'];
$neuer_ordner_bereinigen = array('ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', ' ' => '_');
$neuer_ordner_neu = strtr(strtolower($neuer_ordner), $neuer_ordner_bereinigen);
$pfad = "../deutsch/images_neu/$neuer_ordner_neu/";
$groesse = getimagesize( $pfad.$neues_bild );
$breite = $groesse[0];
$hoehe = $groesse[1];
$typ=$groesse[2];
// Breite des Anzeigebildes festlegen (Höhe wird automatisch angepasst)
$breite_400 = $size;
$hoehe_auto = intval($hoehe * $breite_400 / $breite);
// Bei GD < 2.0.1: ImageCreateTrueColor -> ImageCreate, ImageCopyResampled -> ImageCopyResized
$bild_400 = imagecreatetruecolor( $breite_400, $hoehe_auto );
switch ($typ)
{
case 1:
$bild = imagecreatefromgif("$pfad$neues_bild");
break;
case 2:
$bild = imagecreatefromjpeg("$pfad$neues_bild");
break;
case 3:
$bild = imagecreatefrompng("$pfad$neues_bild");
break;
case 4:
$bild = imagecreatefromwbmp("$pfad$neues_bild");
break;
default: $gestorben="ja";
}
imagecopyresampled( $bild_400, $bild, 0, 0, 0, 0,$breite_400 ,$hoehe_auto ,$breite ,$hoehe );
// Endung bei Dateiname hinzufügen, vor ".jgp"
$neues_bild = explode (".", $neues_bild);
// Dateianhang definieren
if ($size == "400")
{
$zusatz = "_400.";
}
elseif ($size == "150")
{
$zusatz = "_150.";
}
else
{
$zusatz = "_thumb.";
}
// Anzeigebild in $pfad mit angepasstem Dateinamen speichern, JPG Qualität: 90
$path_file= ("$pfad$neues_bild[0]$zusatz$neues_bild[1]");
switch ($typ)
{
case 1:
imagegif ( $bild_400, $path_file );
break;
case 2:
imagejpeg ( $bild_400, $path_file, 90 );
break;
case 3:
imagepng ( $bild_400, $path_file );
break;
case 4:
imagewbmp ( $bild_400, $path_file );
break;
default: $gestorben="ja";
}
// Temporären Speicher auf Server wieder frei geben
imagedestroy($bild);
imagedestroy($bild_400);
if ($zusatz == "_thumb.")
{
unlink("$pfad$neues_bild[0].$neues_bild[1]");
}
//Rückgabe des Pfades+Name
return $path_file; }
?>
So, noch das UPDATE der Datenbank(en), und der funktioniert hier nicht, weil ich nur NULL drin stehen habe, sollte er aber, denn NULL kann man ja auch eintragen. Im Original UPDATE Script gehts aber(mit INSERT) :
PHP-Code:
$query = "UPDATE bilder SET
id_bez = '" . $ausgabe . "',
verzeichnis = '" . $neuer_ordner_neu ."' WHERE id = $ausgabe";
$result = mysql_query( $query );
if ( ! $result )
{
die("konnte den Datensatz nicht eintragen: " . mysql_error());
}
for($i = 0; $i <= 25; $i++)
{
if ( $bild[$i] != "" )
{
$query = "UPDATE bilder SET
$bild_150_$i = '" . $bild[$i]['_150'] . "' WHERE id = $ausgabe";
}
$result = mysql_query( $query );
if ( ! $result )
{
die("konnte den Datensatz nicht eintragen: " . mysql_error());
}
}
for($i = 0; $i <= 25; $i++)
{
if ( $bild[$i] != "" )
{
$query = "UPDATE bilder SET
thumb_$i = '" . $bild[$i]['_thumb'] . "' WHERE id = $ausgabe";
}
$result = mysql_query( $query );
if ( ! $result )
{
die("konnte den Datensatz nicht eintragen: " . mysql_error());
}
}
for($i = 0; $i <= 25; $i++)
{
if ( $bild[$i] != "" )
{
$query = "UPDATE bilder SET
bild_$i = '" . $bild[$i]['_400'] . "' WHERE id = $ausgabe";
}
$result = mysql_query( $query );
if ( ! $result )
{
die("konnte den Datensatz nicht eintragen: " . mysql_error());
}
}
for($i = 0; $i <= 25; $i++)
{
if ( $_REQUEST["form_alt_$i"] != "" )
{
$query = "UPDATE alt SET
alt_$i = '" . $_REQUEST["form_alt_$i"] ."' WHERE id = $ausgabe";
}
$result = mysql_query( $query );
if ( ! $result )
{
die("konnte den Datensatz nicht eintragen: " . mysql_error());
}
echo ($_REQUEST["$altcount"]);
}
header("Location: check_bilder.php");
die;
//echo "Hier der Pfad: ".$pfad;
//echo "Hier das Array: "; var_dump($bilder_dump);
}
}
Vermutlich liegt der Fehler aber im Formular. Ich lasse erst prüfen, ob in der Datenbank schon was steht und gebe dies dann aus. Danach werden dann die restlichen Upload Felder und ALT Felder angezeigt um dort noch Bilder und Alt Texte hinzuzufügen.
HTML-Code:
<table class="haupt"><form name="DateiUpload" id="DateiUpload" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" enctype="multipart/form-data">
<tr>
<td>
<h1>
Unsere Bilder </h1><br>
<input type="text" name="name_ordner" value="<?php echo basename ($datensatz["verzeichnis"]); ?>">
Bilderordner<br>
<br>
<br>
<br>
<?php
for ( $i=0; $i <= 25; $i++)
{
if ($datensatz["bild_150_$i"] != "")
{
?>
<img src="<?php echo $datensatz["bild_150_$i"];?>" alt="<?php echo ($datensatz1["alt_$i"]);?>"><br />
Beschreibung:<?php echo ($datensatz1["alt_$i"]);?><br />
<?php
}
else
{
?>
<input type="file" name="datei[$i]" id="datei"><br>
<input type="text" name="form_alt_$i"> Beschreibungen immer mit Ferienhaus Mallorca usw. angeben<br><br>
<?php
}
}
?>
<input type="submit" name="submitbutton" id="submitbutton" value="Dateien laden"><a href="logout.php">Ausloggen</a> </td>
</tr>
</form></table>
Also, der Upload funktioniert wenn ich neue Quellen angebe und die Bilder werden korrekt bearbeitet. Was nur nicht funktioniert, ist das UPDATE der Datenbanken, sogar dei ALT TAGS werden nicht eingetragen. Die entsprechende Datenbankzeile ist auch ausgewählt, habe ich jetzt nur nicht auch noch hinzugefügt. Das Array enthält nur NULL en,selbst die werden nicht geupdated. Warum, weiß ich nicht, deshalb rufe ich um Hilfe.
Vielen Dank im Voraus,
mallmis