Hallo,
zunächst möcht ich dir Funktion des Scripts erklären:
...connect.php + browse.php
Wenn das Formular nicht submitted wurde (also Grundzustand) bekommt man eine Tabelle die durch eine for-Schleife alle Bilder aus dem upload-Folder auflistet. Man erhält pro Zeile 2 radiobuttons für neue alben und 2 für bestehende. Außerdem bekommt man ein Textfeld um das Bild zu taggen. Alle 4 Radiobuttons gehören der selben Familie an. Sinn der Sache ist der, dass man ,wenn mann viele Bilder diese gleichzeitig mit nur einem submit 4 verschiedenen Alben zuordnen kann (das script lässt mehr zu, ich finde 4 ausreichend; 2 neue alben & 2 bestehende sind in dem Fall möglich)
Submit gedrückt -> crtl-hidden ist gesetzt, man kommt zur for-schleife ganz oben.
(connect.php)
<?php
$sql = mysql_connect('localhost','root','pw');
if (!$sql)
{
die('database suxxx: '.mysql_error());
};
mysql_select_db('gallery',$sql) or die('database not selected: '.mysql_error());
$dir = 'photo_gallery/';
$fromdir = 'upload/';
$thumbs = 'thumbs/';
$todir = '225x168/';
$files = scandir($_SERVER['DOCUMENT_ROOT']."/".$dir.$fromdir);
$file_count = count($files);
?>
(browse.php)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Photogallery</title>
</head>
<body bgcolor="#999966">
<?php include 'connect.php';
if (array_key_exists('crtl',$_POST))
{
include 'upload.php';
} //if crtl-hidden was set; if submitted
else
{
?>
<form action="<? $_SERVER['PHP_SELF']; ?>" method="post" name="upload_form">
<table>
<thead>
<tr>
<? for ($i=0; $i<2; $i++) {?>
<th>
<span>new album</span><br />
<input type="text" name="<? echo "new_album".$i; ?>" /><br />
<a>de</a><a>select all</a>
</th>
<? };?>
<th></th>
<th></th>
<? for ($i=0; $i<2; $i++) {?>
<th>
<span>join album</span><br />
<select name="<? echo "join_album".$i; ?>">
<option value="">---</option>
<? $selectalbum = mysql_query("SELECT * FROM albums");
while ($row = mysql_fetch_array($selectalbum))
{
echo "<option value=".$row['albumid'].">".$row['album']."</option>";
}; ?>
</select><br />
<a>de</a><a>select all</a>
</th>
<? };?>
</tr>
</thead>
<tbody>
<?php
for ($i=0; $i<$file_count; $i++)
{
if ($info = getimagesize($fromdir.$files[$i]))
{
$width = $info[0];
$height = $info[1];
$type = $info[2];
?>
<tr>
<td><input type="radio" name=" <? echo "radio".$i; ?>" value="new_album0" /></td>
<td><input type="radio" name=" <? echo "radio".$i; ?>" value="new_album1" /></td>
<td><input type="text" name="<? echo "file".$i; ?>" value="<? echo $files[$i]; ?>" readonly="readonly"/></td>
<td><input type="text" name="<? echo "tag".$i; ?>" /></td>
<td><input type="radio" name=" <? echo "radio".$i; ?>" value="join_album0" /></td>
<td><input type="radio" name=" <? echo "radio".$i; ?>" value="join_album1" /></td>
</tr>
<? }
};
mysql_close($sql);
?>
</tbody>
</table>
<input type="hidden" name="crtl" />
<button type="reset">reset</button>
<button type="submit">submit</button>
</form>
<?
}; ?>
</body>
</html>
...upload.php
knapp über der Schleife sieht man die Variable addalbum0 bzw 1. Diese wird vor der Schleife auf 0 gesetzt und hat folgende Funktion: Damit ein neu angelegtes Album nur 1x angelegt wird wird nach dem Insert eines neuen Albums in die Tabelle diese Variable auf 1 gesetzt, somit ist die if-Bedingung in Zeile 14 & 26 nichtmehr erfüllt.
Im oberen Teil gehts prinzipiell eh nur darum die Radiobuttons zuzuordnen und daraus die Albumsinfo zu bekommen (albumid bzw vom Namen auf die ID zurückschließen)
Der untere Teil ab 43 macht dann nichts anderes als, dass es dann abfragt ob überhaupt diese id vorhanden ist (diese wird nach dem Eintragen in die Tabelle auf '' gesetzt ... bis ich das überrissen hab hats eh gedauert) und $info von der anfänglichen if-Bedingung holt. Das alles wird in die Tabelle geschriben und die, in der Tabelle erfassten, Bilder 1.) in ein thumb-Verzeichnis kopiert und 2.) in ein anderes Verzeichnis gemoved
(upload.php)
<?
$addalbum0 = '0'; //if new album gets created, addalbum = 1 -> new album just 1x created
$addalbum1 = '0';
for ($i=0; $i<$file_count; $i++)
{
$filename = $_POST['file'.$i];
$tag = $_POST['tag'.$i];
if (($info = getimagesize($fromdir.$filename)) && array_key_exists('radio'.$i,$_POST)) //only if album selectd & if image format
{
$radio = $_POST['radio'.$i]; //possible radio values: newalbum0, newalbum1, joinalbum0, joinalbum1
if ($radio == 'new_album0' && $_POST['new_album0'] != '') //newalbum0 selected, input-field not empty
{
$album = $_POST['new_album0']; //albumtitle from input = $album
if ($addalbum0 == '0') //if 1st picture from new album: $album -> albums table, afterwards, addalbums = 1 for newalbum0
{
mysql_query("INSERT INTO albums (album) VALUES ('$album')");
$addalbum0 = '1';
}
$albumreq = mysql_query("SELECT albumid FROM albums WHERE album like '$album'"); //albumid gets requested either addalbum=0 or 1
$albumarray = mysql_fetch_array($albumreq);
$albumid = $albumarray['albumid'];
}
elseif ($radio == 'new_album1' && $_POST['new_album1'] != '')
{
$album = $_POST['new_album1'];
if ($addalbum1 == '0')
{
mysql_query("INSERT INTO albums (album) VALUES ('$album')");
$addalbum1 = '1';
}
$albumreq = mysql_query("SELECT albumid FROM albums WHERE album like '$album'");
$albumarray = mysql_fetch_array($albumreq);
$albumid = $albumarray['albumid'];
}
elseif ($radio == 'join_album0') //radio joinalbum selected, albumid from select-dropdown = $albumid
{
$albumid = $_POST['join_album0'];
}
elseif ($radio == 'join_album1')
{
$albumid = $_POST['join_album1'];
}
if (isset($albumid) && $albumid != '') //only if there is an albumid the pictureinfo gets stored in the Database
{
$width = $info[0]; //$info see line 18, was created as condition whether image or nor
$height = $info[1];
$type = $info[2];
$insert_image = mysql_query("INSERT INTO images (albumid, filename, date, width, height, type, tag)
VALUES ('$albumid', '$filename', now(), '$width', '$height', '$type', '$tag')");
$albumid = ''; //reset albumid, so that the next run doesn't keep the albumid, if it is set, the new id is fetched from $_POST anyway
if (!$insert_image) //if mysql-insert fails
{
die('upload to database failed: '.mysql_error());
}
else //mysql_insert successful -> file gets copied to thumbs-directory and moved to $todir:
{ //won't be listed the next time when browsing since not in upload folder; todir is the later used image-folder for the gallery
copy($fromdir.$filename, $thumbs.$filename);
rename($fromdir.$filename, $todir.$filename);
echo $filename." successfully uploaded and moved to the directory ".$todir."<br />";
}
}
} //if radio-button is selected
} //for loop
?>
Was jetzt noch dazukommt:
- die select/deselect all-Gschichten falls man alle Files von demUploadordner in zB ein bestehendes Album geben will
- thumb-fkt. Das sollt glaub ich flott gehn, also die Bilder die Kopiert werden resizen irgedwie
- ein Feld für die Kurzbeschreibung der neuerstellten Alben
... - eine Albumübersichtsseite, quasi die index.php auf der die Albentitel & die Kurzbeschreibung evtl 3 Beispielthumbs stehen
... - die eigentliche Gallerie
Meine Fragen jetzt:
- warum kann ich, wenn ich die neuen Alben in die albums-tabelle schreiben will nicht das erstellungsdatum eintragen? Hab in der Tabelle 2 weitere Felder: update & create die datetime sind, hab now() per INSERT versucht, aber funzt nicht.
- Welche Befehle sind unschön oder schwachsinnig? Bei den verschachtelten ifs in der Schleife bin ich mir nciht sicher, dass das die eleganteste variante war.
- Gibts codeteile/Befehle die man so nicht verwenden sollte?
- Wie wahrscheinlich ist es, dass das skript auf Freewebspaces mit php5 & mysql Datenbank trotzdem wegen versch. funktionen nicht rennt? (zB copy,... ich glaub das verwendet man ja auch für den Upload, also ist das häufig abgeschalten. evtl wär das ja in dem Fall per Email an den Provider regelbar)
- wie dämlich ist das mit der albumid wenn ich ein neues Album erstell: 2 mysql-abfragen, eine zum eintragen & dann eine zum Nachschaun welche ID das gerade eingetragene eigentlich hat. Soll ichd as lieber per abzählen der Zeilen machen oder so?
dass man sicha uch bissal was drunter vorstellen kann:

(stylesheet usw kommt ja dann eh noch, geht nur mal um die Funktion)
tia, Michi
PS: bitte Codefladern wo geht & auch Kritik schreiben! Der link zur Initialidee ist in dem Thread & den Rest hab ich dann selbst ausgebaut, aber wie man sicher merkt hab ich schon lang nix mehr in php gemacht.
edit:
weitere Fragen
- bei der Übersicht (die wird nur per Schleife über getimagesize erstellt und steht nicht in einer DB) wärs evtl fürs taggen sinnvoll, wenn man da auch Bilder dabei hätte. Hab noch nie mit php Bilder verkleinert oder sonst was - das ist in dem Fall viel zu langsam, oder?
Wovon hängt die Geschwindigkeit des resizens ab? Würde 800x600 jpgs raufladen und 80x60 würd in dem Fall für die Vorschau reichen.