Bilder auf Webserver speichern und Infos in MYSQL DB speichern

Fragen und Diskussionen rund um Internet, Software und PC
alexbberlin
Mitglied (Level 1)
Mitglied (Level 1)
Beiträge: 4
Registriert: So 31. Jul 2022, 16:21

Bilder auf Webserver speichern und Infos in MYSQL DB speichern

Ungelesener Beitrag von alexbberlin »

Hallo, bedauerlicher weise hat Werner Zenk seine Seite geschlossen. Nun Quäle ich mich weiter durch mein Vorhaben eine eigene Bildergallery zu erstellen.
Mit Hilfe seiner Scripts und eines JS Packages "Highslide JS" habe ich dieses nun schon sehr weit gebracht.
Dateiupload, Ordnerupload, Favoriten setzen und entfernen, Anzeige, GPS Infos anzeigen nebst Openstreetmap Map als Iframe.Thumbnailerstellung, alles toll.
Nun entdeckte ich ein Problem.
Und zwar beim Ordnerupload. Upload funktioniert.
In der Datenbank werden Kategorie,Album ,Subalbum Bildname, Dateipfad Bild sowie Dateipfad Thumbnail gespeichert.

Jedoch wenn ich z.b. 500 Bilder in einem Subalbum habe steigt die Ladedauer immens.

Code: Alles auswählen

<?php
//PHP Start
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
require_once 'includes/connect.php';
require_once 'includes/functions.inc.php';
require_once 'gallery_inc/gallery_ini.php';
require_once 'gallery_inc/gallery_datalists.php';
$user = check_user();
$seitenname = 'Ordnerupload';
require_once 'header.php';
// Postcheck
if(!empty($_POST["kategorie"])) {$val_kategorie = $_POST["kategorie"];} else {$val_kategorie = "";}
if(!empty($_POST["album"]))		{$val_album = $_POST["album"];} else {$val_album = "";}
if(!empty($_POST["subalbum"])) 	{$val_subalbum = $_POST["subalbum"];} else {$val_subalbum = "";}
// Postcheck ende

// Dateien aus Ordner hochladen
$_FILES = array_slice(scanDir($upload_dir), 2);
$anz_uploads = count($_FILES);
$filecounter = $anz_uploads;
for ($i = 0; $i < count($_FILES); $i++)
{
// Info über die Datei holen
$path = $upload_dir . $_FILES[$i];
$tmp_bild =  $path;
$newpath = $bilder_dir;
list($tmpWidth, $tmpHeight, $tmpType) = getImageSize($path);
$set_filename =  explode(".", $_FILES[$i]);
$filename = $set_filename[0];
$extension = strtolower($set_filename[1]);

$fn_filter = utf8_decode($filename);
$fn_trim = trim($fn_filter);
$fn_lower = mb_strtolower($filename);
$fn_rewritechars = str_replace(["ä", "ö", "ü", "ß", " ",], ["ae", "oe", "ue", "ss", "_",], $fn_lower);
$fn_result = preg_replace("/[^a-z0-9_-]/", '', $fn_rewritechars);
$bildname = substr($fn_result, 0, $maxFilename) . "." . $extension;
$thumb_name = 'tumb_' . $bildname;
// Info über die Datei holen ende

// Datumsausgabe generieren
$exif = exif_read_data($tmp_bild, 0, true);
if (isset($exif['EXIF']['DateTimeOriginal']))
{
$datum = $exif['EXIF']['DateTimeOriginal'];
}
else
{
$datum = date("d.m.Y");
}

$day_val = $datum;
$toDay = strtotime("+0 day", strtotime($day_val));;
$createdate = date("d.m.Y", $toDay);
$tag = date("d", $toDay);
$monat = date("m", $toDay);
$jahr = date("Y", $toDay);
// Datumsausgabe generieren Ende

// Dateinamen und Pfad formatieren
$bilddatei  = $bilder_dir . $bildname;
$thumbdatei = $thumb_dir . 'tumb_' . $bildname;
$uploaddatei = $path;
// Dateinamen und Pfad formatieren ende

// Datenbankeinträge
$insert = $db->prepare
("INSERT IGNORE INTO `gal_bilder` SET
`bilddatei` = :bilddatei,
`thumbdatei` = :thumbdatei,
`bildname` = :bildname,
`kategorie` = :kategorie,
`album` = :album,
`subalbum` = :subalbum,
`createdate` = :createdate,
`tag` = :tag,
`monat` = :monat,
`jahr` = :jahr,
`width` = :width,
`height` = :height");

if ($insert->execute
([
':bilddatei' => $bilddatei,
':thumbdatei' => $thumbdatei,
':bildname' => $bildname,
':kategorie' => $val_kategorie,
':album' => $val_album,
':subalbum' => $val_subalbum,
':createdate' => $createdate,
':tag' => $tag,
':monat' => $monat,
':jahr' => $jahr,
':width' => $tmpWidth,
':height' => $tmpHeight
]))
{
// Erzeugung Thumbnail

// Dateiformat
switch ($extension)
{
case 'jpg':
$create = imageCreatefromJPEG($tmp_bild);
break;
case 'png':
$create = imageCreatefromPNG($tmp_bild);
break;
case 'gif':
$create = imageCreatefromGIF($tmp_bild);
break;
case 'webp':
$create = imageCreatefromWEBP($tmp_bild);
break;
}

// Breite und Höhe des Bildes ermitteln
$imageW = $tmpWidth;
$imageH = $tmpHeight;

// Thumbnail Abmessungen reduzieren
if ($imageW > $imageH)
{
$thumbW = $thumbWidth;
$thumbH = $imageH / $imageW * $thumbWidth;
}

if ($imageW < $imageH)
{
$thumbH = $thumbHeight;
$thumbW = $imageW / $imageH * $thumbHeight;
}

if ($imageW == $imageH)
{
$thumbW = $thumbWidth;
$thumbH = $thumbHeight;
}
// Thumbnail Abmessungen reduzieren ende

// Thumbnail mit neuen Abmessungen kopieren
$thumbnail = imageCreateTruecolor($thumbW, $thumbH);
imageCopyResampled($thumbnail, $create, 0, 0, 0, 0, $thumbW, $thumbH, $imageW, $imageH);

// Thumbnail speichern und den Grafikspeicher löschen
imageJPEG($thumbnail, $thumb_dir . $thumb_name, $thumbQuality);
imageDestroy($thumbnail);

// Erzeugung Thumbnail Ende
}
// Datenbankeinträge ende

// Fertige Dateien verschieben
rename($uploaddatei, $bilddatei);
$uploadresult = $filecounter;
// Fertige Dateien verschieben ende

// Erfolgsmeldung erstellen
if ($filecounter > 0)
{
$erfolgout = $filecounter.' von '.$filecounter;
$output =
'
<div class="col-10 my-4 mx-auto menu" style="color:#00ff00; border:5px #00ff00 solid; border-radius:15px">
<div class="col-10 my-4 mx-auto p-3 text-center" style="color:#00ff00; border:5px #00ff00 solid; border-radius:15px">
<h3>Es wurden ' . $erfolgout . ' Dateien erfolgreich in den Bilderordner verschoben! </h3>
</div>
</div>
';
}
else
{
$output =
'
<div class="col-10 my-4 mx-auto menu" style="color:#ff0000; border:5px #ff0000 solid; border-radius:15px">
<div class="col-10 my-4 mx-auto p-3 text-center" style="color:#ff0000; border:5px #ff0000 solid; border-radius:15px">
<h3>Es sind keine Dateien im Uploadordner vorhanden!</h3>
</div>
</div>
';
}
// Erfolgsmeldung erstellen ende
}
// Dateien aus Ordner hochladen ende

echo $output;
require_once 'footer.php';
?>
<script>
setTimeout("location.href='bilder_anzeige.php'",3000);
</script>
Nun habe ich mir gedacht ob es möglich ist es so handzuhaben wie bei doppelten Dateien (was ich hier weggelassen habe da es keine doppelten Bilder geben soll, werden weder hochgeladen noch in der Datenbank eingetragen).

Also wenn ich Bilder hochlade, Benenne ich

Kategorie - Album - Subalbum

z.B. in

Urlaub - Tunesien - Tag 1.

Wenn nun aber die Bilderanzahl im Upload größer 50 ist, so soll das Album mit eine Laufenden Zahl ersetzt werden.
Zum Beispiel: Tag 1_01,Tag 1_02 ....
Leider weiss ich nicht wie ich das umsetzen kann.

Vielleicht kann mir ja jemand helfen.

Ich danke schon mal im Vorraus.

Und noch mal Vielen lieben Dank Werner Zenk du hast mir sehr viel geholfen
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 2903
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Bilder auf Webserver speichern und Infos in MYSQL DB speichern

Ungelesener Beitrag von Tommy Herrmann »

Hallo Alex,

habe heute keine Zeit mehr, wollte Dich aber zumindest noch ganz herzlich bei uns im Forum begrüßen :hallo:

Ich habe noch nie eine solche Menge Bilder hoch geladen, gehen sollte das doch aber.

Vielleicht liest Werner das ja hier und kann Dir Deine Frage beantworten - ich habe Deine Frage (auf die Schnelle) noch nicht ganz verstanden ...

Du meinst nicht das fertige Skript "Fotoalbum" von Werner-Zenk.de oder?

https://www.mobirise-tutorials.com/Fotouploadalbum.php

Diese Skripte bieten ein Upload (auch vom Handy) und eine Art CMS für die Verwaltung.

Hier geht es zu meinem Download-Archiv, wo Du diese Anwendung als "2018-11-18-fotoalbum.zip" (#20) downloaden kannst:

https://www.mobirise-tutorials.com/Download-Archiv/
alexbberlin
Mitglied (Level 1)
Mitglied (Level 1)
Beiträge: 4
Registriert: So 31. Jul 2022, 16:21

Re: Bilder auf Webserver speichern und Infos in MYSQL DB speichern

Ungelesener Beitrag von alexbberlin »

Hallo, danke erst mal. Nein nicht das, dort kann man ja nur ein Bild hochladen, er hatte auf seiner Seite auch ein Bilderuploadscript, wo man mehrere Bilder hochladen kann und diese in einen Ordner gespeichert werden und Infos in einer Datenbank geschrieben werden.

Auf die normale Uploadvariante kann ich max 20 Bilder auf einmal hochladen.
Ich habe einen Ordnerupload hinzugefügt. das geht. aber wenn ich dann das Album aufrufe mit den 500 Bildern dann rattert es sozusagen.
Da ich die DB auslese und mit den gespeicherten Dateipfaden darin auf Kategorie Album und Subalbum beschränkt, die Bilder in einer Schleife an das Highslide JS übergebe also
DB Auslese -> Schleife -> Anzeige (a href Bildadresse img thumbadressea)
Somit läd er ja alle erst mal. Da ich nicht weis wie ich das bei der Ausgabe aufteilen kann, kam ich auf die Idee es vorab schon zu reduzieren
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 2903
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Bilder auf Webserver speichern und Infos in MYSQL DB speichern

Ungelesener Beitrag von Tommy Herrmann »

Hallo,

ich befürchte da kann ich Dir nicht helfen. Müssen wir mal hoffen, dass sich Werner dazu äußert.

Ich glaube, dass ich dieses Skript vom Werner auch nicht kenne. Wahrscheinlich habe ich das nie benutzt.

Meine Programmierkenntnisse reichen auch nicht aus, um so etwas komplett alleine entwickeln zu können.

Ich habe noch dieses alte Skript vom Werner aus dem Jahr 2016 gefunden (ohne DB, das ist es also auch nicht), welches ich damals noch in die alte Software "NOF" eingebaut habe. Damit kann man mehrere Bilder gleichzeitig hochladen.

http://www.nof-tutorials.com/Bilder-im- ... ver-laden/
Benutzeravatar
Werner-Zenk.de
Moderator
Moderator
Beiträge: 563
Registriert: Di 8. Dez 2020, 19:42

Re: Bilder auf Webserver speichern und Infos in MYSQL DB speichern

Ungelesener Beitrag von Werner-Zenk.de »

Hallo,
da die Daten der Bilder in einer DB liegen, könnte man diese Daten pro Seite begrenzt anzeigen.
Dazu benötigt man eine Paginierung, hier mal ein Beispiel (PDO) wie die Daten ausgegeben werden können:

Code: Alles auswählen

<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="UTF-8">
  <title>Nachrichten</title>

  <style>
  body {
   font-family: Verdana, Arial, Sans-Serif;
  }

  a:link, a:visited {
   color: Royalblue;
   text-decoration: None;
  }
  </style>

 </head>
<body>

<h3>Nachrichten</h3>

<?php
// Verbindung zur Datenbank aufbauen.
$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');

// Anzeige der Datensätze pro Seite
$DatensaetzeSeite = 3;

// Anzahl der Datensätze ermitteln
$AnzahlDatensaetze = $db->query("SELECT COUNT(*) FROM `nachrichten`")->fetchColumn(0);

// Die Anzahl der Seiten ermitteln
$AnzahlSeiten = ceil($AnzahlDatensaetze / $DatensaetzeSeite);

 // Die aktuelle Seite ermitteln
$AktuelleSeite = (int) ($_GET["seite"] ?? 1);

// Den Wert überprüfen und ggf. ändern
$AktuelleSeite = ctype_digit($AktuelleSeite) ? $AktuelleSeite : 1;
$AktuelleSeite = $AktuelleSeite < 1 || $AktuelleSeite > $AnzahlSeiten ? 1 : $AktuelleSeite;

// Den Versatz ermitteln
$Versatz = $AktuelleSeite * $DatensaetzeSeite - $DatensaetzeSeite;

// Datensätze auslesen
$select = $db->prepare("SELECT `titel`, `autor`, `nachricht`, `datum`
                                  FROM `nachrichten`
                                  ORDER BY `datum` DESC
                                  LIMIT :versatz, :dseite");
$select->bindValue(':versatz', $Versatz, PDO::PARAM_INT);
$select->bindValue(':dseite', $DatensaetzeSeite, PDO::PARAM_INT);
$select->execute();
$nachrichten = $select->fetchAll(PDO::FETCH_OBJ);

// Ausgabe über eine Foreach-Schleife
if ($AnzahlDatensaetze > 0) {
 foreach ($nachrichten as $nachricht) {
  sscanf($nachricht->datum, "%4s-%2s-%2s", $jahr, $monat, $tag);
  echo '<p><small>' .  $tag . '.' . $monat . '.' . $jahr .
   '</small> - <b>' . $nachricht->titel . '</b><br>' .
   ' Autor: <em>' . $nachricht->autor . '</em><br>' .
   nl2br($nachricht->nachricht) . '</p>';
 }

 // Formular.- und Blätterfunktion
 echo '<form method="GET" autocomplete="off">' .
  (($AktuelleSeite - 1) > 0 ?
  '<a href="?seite=' . ($AktuelleSeite - 1) . '">&#9668;</a>' :
  ' &#9668;') .
 ' <label>Seite <input type="text" value="' . $AktuelleSeite . '" name="seite" size="3"
  title="Seitenzahl eingeben und Eingabetaste betätigen"> von ' . $AnzahlSeiten . '</label>' .
  (($AktuelleSeite + 1) <= $AnzahlSeiten ?
   ' <a href="?seite=' . ($AktuelleSeite + 1) . '">&#9658;</a>' :
   ' &#9658;') .
 '</form>';
}
else {
 echo '<p>Keine Nachrichten vorhanden.</p>';
}
?>

</body>
</html>
Folgende DB-Tabelle wurde im Anwendungsbeispiel verwendet:

Code: Alles auswählen

CREATE TABLE `nachrichten` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `titel` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
  `autor` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `nachricht` text COLLATE utf8_unicode_ci NOT NULL,
  `datum` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `nachrichten` (`id`, `titel`, `autor`, `nachricht`, `datum`) VALUES
(1,	'Sprüche 1',	'Werner',	'Stur lächeln und winken, Männer!',	'2016-07-01'),
(2,	'Yeti gefunden',	'Jörg',	'Gestern in den Morgenstunden sah Reinhold M. einen ...',	'2016-07-04'),
(3,	'Eine Scheibe',	'Hans',	'Die Erde ist eine Scheibe Käse, hier der Beweis ...',	'2016-07-02'),
(4,	'Wasser und Balken',	'Stefan',	'Wasser hat keine Balken. Wirklich! ...',	'2016-07-09');
Das ganze mal nachbauen und schauen ob und wie es funktioniert.
alexbberlin
Mitglied (Level 1)
Mitglied (Level 1)
Beiträge: 4
Registriert: So 31. Jul 2022, 16:21

Re: Bilder auf Webserver speichern und Infos in MYSQL DB speichern

Ungelesener Beitrag von alexbberlin »

Hallo Thommy, danke erst mal Werner hat geantwortet.

Nun zu dem was ich dachte umzusetzen( ausgeschnitten aus dem foto.php Skript von Werner.
Codeteil 1:

Code: Alles auswählen

 // Wenn die Datei vorhanden ist, hänge eine Zahl an den Dateinamen
   if (file_exists($directory . $newname)) {
    $nr = 2;
    do {
     $newname = substr($filename, 0, 45) . $nr . "." . $extension;
     $nr++;
    }
    while(file_exists($directory . $newname));
   }
Ich speichere meine Bilderinfos so (auch aus Werners genialen Skripts):
Codeteil 2:

Code: Alles auswählen

				// Dateinamen und Pfad formatieren
				
					$bilddatei  = $bilder_dir . $bildname;
					$thumbdatei = $thumb_dir . 'tumb_' . $bildname;
					$uploaddatei = $path;
				// Dateinamen und Pfad formatieren ende

				// Datenbankeinträge
					$insert = $db->prepare
						("INSERT IGNORE INTO `gal_bilder` SET
						`bilddatei` = :bilddatei,
						`thumbdatei` = :thumbdatei,
						`bildname` = :bildname,
						`kategorie` = :kategorie,
						`album` = :album,
						`subalbum` = :subalbum,
						`createdate` = :createdate,
						`tag` = :tag,
						`monat` = :monat,
						`jahr` = :jahr,
						`width` = :width,
						`height` = :height");

					if ($insert->execute
						([
						':bilddatei' => $bilddatei,
						':thumbdatei' => $thumbdatei,
						':bildname' => $bildname,
						':kategorie' => $val_kategorie, // kommt aus Formular
						':album' => $val_album, // kommt aus Formular
						':subalbum' => $val_subalbum, // kommt aus Formular und soll als Kriterium sein **Siehe unten
						':createdate' => $createdate,
						':tag' => $tag,
						':monat' => $monat,
						':jahr' => $jahr,
						':width' => $tmpWidth,
						':height' => $tmpHeight
						]))
					{
** Alle Uploads die $val_subalbum beim upload erhalten sollen gezählt werden bzw je 20 bilder enthalten bei mehr im upload soll eine laufende nummer an $val_subalbum angehängt werden.

Nun wollte ich die Variante aus Codeteil 1 umbasteln.
und Da fehlts mir.

Hallo Werner, sorry jetzt muss ich erst mal richtig umdenken ist nämlich genau die andere Variante. :angst:

So rufe ich die Bilder ab :

Code: Alles auswählen

$query_bilder = $db->query("SELECT * FROM `gal_bilder` WHERE `kategorie` LIKE '" . $val_kategorie . "' && `album` LIKE  '" . $val_album . "' && `subalbum` LIKE '" . $val_subalbum . "'");
und so zeige ich diese an:

Code: Alles auswählen

	$result_bilder = $query_bilder->fetchAll();
		foreach ($result_bilder as $bild)
			{
			$var_id = $bild["id"];			
			$var_datei = $bild["bilddatei"];
			$var_thumb = $bild["thumbdatei"];
			$var_name = $bild["bildname"];
			$var_kategorie = $bild["kategorie"];
			$var_album = $bild["album"];
			$var_subalbum = $bild["subalbum"];
			$var_create_date = $bild["createdate"]; 
			$var_width = $bild["width"];
			$var_height = $bild["height"];
			$var_fav_flag = $bild["fav_flag"];
			$var_oc_id = 'offcanvas_' . $var_id;
					$gallerieanzeige .= '
		<a id="thumb1" class="highslide" href="' . $var_datei . '" onclick="return hs.expand(this, GalleryOptions)" title="' . $var_name . '">
			<img src="' . $var_thumb . '" class="thumb" width:100%; height:100%" alt="" />
		</a>';

wie soll ich das umsetzen Kriterium ist hier

Code: Alles auswählen

$var_datei = $bild["bilddatei"];
dieses ist die Hauptsache mit der die einzelnen Bilder definiert sind
Benutzeravatar
Werner-Zenk.de
Moderator
Moderator
Beiträge: 563
Registriert: Di 8. Dez 2020, 19:42

Re: Bilder auf Webserver speichern und Infos in MYSQL DB speichern

Ungelesener Beitrag von Werner-Zenk.de »

Hallo,
das Kopieren von PHP-Variablen solltest du bleiben lassen, denn das ist sinnlos und verschleiert nur den Kontext, aus dem die Variablen entnommen wurden und kann später zu Problemen führen.

Code: Alles auswählen

$var_id = $bild["id"];			
			$var_datei = $bild["bilddatei"];
			$var_thumb = $bild["thumbdatei"];
			$var_name = $bild["bildname"];
			$var_kategorie = $bild["kategorie"];
			$var_album = $bild["album"];
			$var_subalbum = $bild["subalbum"];
			$var_create_date = $bild["createdate"]; 
			$var_width = $bild["width"];
			$var_height = $bild["height"];
			$var_fav_flag = $bild["fav_flag"];

Code: Alles auswählen

$query_bilder = $db->query("SELECT * FROM `gal_bilder` WHERE `kategorie` LIKE '" . $val_kategorie . "' && `album` LIKE  '" . $val_album . "' && `subalbum` LIKE '" . $val_subalbum . "'");
Anstatt: LIKE würde ich das Gleichheitszeichen: = verwenden.

Code: Alles auswählen

&& `album` LIKE  '" . $val_album . "'
MySQL ist kein PHP, ersetze: && durch: AND.
$var_datei = $bild["bilddatei"];
dieses ist die Hauptsache mit der die einzelnen Bilder definiert sind
Ja schon, sollen denn alle 500 Bilder auf der Seite angezeigt werden oder nur 50-100 pro Seite?
Benutzeravatar
Rancher
Moderator
Moderator
Beiträge: 312
Registriert: Di 8. Dez 2020, 18:37
Wohnort: Elsass
Kontaktdaten:

Re: Bilder auf Webserver speichern und Infos in MYSQL DB speichern

Ungelesener Beitrag von Rancher »

@Werner
Ich dachte eigentlich, Du wolltest jetzt Besseres tun :confused:
(Ich beziehe mich auf Deinen Avatar :lachtot: :lachtot: :lachtot: :lachtot: :lachtot: :lachtot: :lachtot:)
Wenn Dein Pferd tot ist, steig ab.
alexbberlin
Mitglied (Level 1)
Mitglied (Level 1)
Beiträge: 4
Registriert: So 31. Jul 2022, 16:21

Re: Bilder auf Webserver speichern und Infos in MYSQL DB speichern

Ungelesener Beitrag von alexbberlin »

Hallo Werner.
Danke erst mal für den Tipp, werde ich anpassen.

Also ich versuch es mal zu erklären das ein Programmierer meine niederschmetternd schlechte Darstellung versteht. also Fachchinesisch reverse sozusagen :prost: Nee Ich weis schon dass anhand meinem fehlendem Fachwissen es schon schwierig ist meinen geistigen Ergüssen zu folgen.
Ich bin dir jedenfallos sehr Dankbar, und damit zeigst du dass wenn Dir etwas sehr wichtig ist du auch bereit bist dein Wissen zu teilen. Ich habe schon sehr viel gelernt durch das Projekt, was als Dienstplanschnittstelle Webseite zu Googeltabelle zu Googlekalender ohne dass der Formularersteller ein Googlekonto benötigt. Und man selbst kein Kostenpflichtigen Api key benötigt.
Schnittstelle funktioniert soweit. Leider kann ich das nicht mit deinem Kalenderprojekt verbinden das sprengt anhand des Umfangs meine Fähigkeiten bezüglich der Einbindung, auch wenn da schon eine ähnliche Variante eingebunden wurde. Aber ok ist Geschichte.
Weiter habe ich versucht Dein Loginscript einzubinden bin dann aber beim Script vom PHP einfach Team hängengeblieben. Es funktioniert halt und ich konnte es umsetzen. Nach wie vor habe ich meine Var teilweise noch nicht mit prepare statements versehen, was aber definitiv noch folgt. Meine Seite wächst und wächst bezüglich der Funktionen.

Nun zu dem was ich meine:

Wenn ich Bilder anzeigen will nutze ich Teile deiner scripts Bilder auf Server speichern und Infos in DB eintragen und das auslesen.

sowie für die visuelle Anzeige das Package highslide.js
welches auf die anker also a href zielt

also ich rufe zur Ausgabe der Bilder die Pfade der Bilder aus der Datenbank ab.
Hierzu werden alle Pfade die der gewählten Kategorie, des Albums und des Subalbums entsprechen, per foreach
in den Array $bild geladen (war ein Teil deines Scripts daher dachte ich ok Du kannst es vollziehen, da as was du machts ein absolut toller weg zum lernen für mich war, du hast die Umgebung sehr identisch gehalten halt bis auf einmal wo du es aber auch erwähnt hast.
hier noch mal die Abfrage der DB(&& werde ich noch durch AND ersetzen, jedoch funktioniert es soweit ja erstmal):

$val_kategorie,$val_album und $val_subalbum erhalte ich aus Formulareingaben welche ich diesen Variablen per $_POST Abfrage meines Auswahlformulars zuweise.

Hier gekürzt die Inputs:

Code: Alles auswählen

<input type="text"  name="kategorie">
<input type="text" name="album">
<input type="text"  name="subalbum">
Hier Abfrage und Aufruf

Code: Alles auswählen

	// Postcheck
	if(!empty($_POST["kategorie"])) 	{$val_kategorie = $_POST["kategorie"];} else {$val_kategorie = "";}
	if(!empty($_POST["album"]))		{$val_album = $_POST["album"];} else {$val_album = "";}
	if(!empty($_POST["subalbum"])) 	{$val_subalbum = $_POST["subalbum"];} else {$val_subalbum = "";}
	// Postcheck ende


Hier die Datenbank Abfrage

Code: Alles auswählen

$query_bilder = $db->query("
SELECT * FROM `gal_bilder` 
WHERE `kategorie`= ' " . $val_kategorie . " ' 
AND 
`album` =  '" . $val_album . "' 
AND 
`subalbum`= ' " . $val_subalbum . " ' ");

$result_bilder = $query_bilder->fetchAll();
foreach ($result_bilder as $bild)
	{
		$var_id = $bild["id"];			
		$var_datei = $bild["bilddatei"];
		$var_thumb = $bild["thumbdatei"];
		$var_name = $bild["bildname"];
		$var_kategorie = $bild["kategorie"];
		$var_album = $bild["album"];
		$var_subalbum = $bild["subalbum"];
		$var_create_date = $bild["createdate"]; 
		$var_width = $bild["width"];
		$var_height = $bild["height"];
		$var_fav_flag = $bild["fav_flag"];
		$var_oc_id = 'offcanvas_' . $var_id;

	// Anzeige der highslide  Gallerie erstellen 
		$gallerieanzeige .= '
		<a  
			href=" ' . $var_datei . ' "
			id="thumb1" 
			class="highslide" 
			onclick="return hs.expand(this, GalleryOptions)" 
			title="' . $var_name . '">
			<img src="' . $var_thumb . '" class="thumb" width:100%; height:100%" alt="" />
		</a>';
	// Startthumb der highslide  Gallerie ende
	
       // es folgen weiter Anzeigedetails  welche sich durch das highslide js ergeben.
       // jedoch ist das a href ausschlaggebend der Auslöser für alles.
 } 
Der Upload ist ähnlich, per oben stehenden Inputs und dem filesinput werden kategorie album und subalbum angefordert und samt Pfad in der DB gespeichert

Hier der auf das betreffende gekürzte Code:

Code: Alles auswählen

		// Postcheck
		if(!empty($_POST["kategorie"])) {$val_kategorie = $_POST["kategorie"];} else {$val_kategorie = "";}
		if(!empty($_POST["album"]))		{$val_album = $_POST["album"];} else {$val_album = "";}
		if(!empty($_POST["subalbum"])) 	{$val_subalbum = $_POST["subalbum"];} else {$val_subalbum = "";}
	// Postcheck ende
	
	// Dateien aus Ordner hochladen
		$_FILES = array_slice(scanDir($upload_dir), 2);
		$anz_uploads = count($_FILES);
		$filecounter = $anz_uploads;
		for ($i = 0; $i < count($_FILES); $i++)
			{
				// Info über die Datei holen
					$path = $upload_dir . $_FILES[$i];
					$tmp_bild =  $path;
					$newpath = $bilder_dir;
					list($tmpWidth, $tmpHeight, $tmpType) = getImageSize($path);
					$set_filename =  explode(".", $_FILES[$i]);
					$filename = $set_filename[0];
					$extension = strtolower($set_filename[1]);

					$fn_filter = utf8_decode($filename);
					$fn_trim = trim($fn_filter);
					$fn_lower = mb_strtolower($filename);
					$fn_rewritechars = str_replace(["ä", "ö", "ü", "ß", " ",], ["ae", "oe", "ue", "ss", "_",], $fn_lower);
					$fn_result = preg_replace("/[^a-z0-9_-]/", '', $fn_rewritechars);
					$bildname = substr($fn_result, 0, $maxFilename) . "." . $extension;
					$thumb_name = 'tumb_' . $bildname;
				// Info über die Datei holen ende

				// Datumsausgabe generieren
					$exif = exif_read_data($tmp_bild, 0, true);
						if (isset($exif['EXIF']['DateTimeOriginal']))
							{
								$datum = $exif['EXIF']['DateTimeOriginal'];
							}
						else
							{
								$datum = date("d.m.Y");
							}

					$day_val = $datum;
					$toDay = strtotime("+0 day", strtotime($day_val));;
					$createdate = date("d.m.Y", $toDay);
					$tag = date("d", $toDay);
					$monat = date("m", $toDay);
					$jahr = date("Y", $toDay);
				// Datumsausgabe generieren Ende

				// Dateinamen und Pfad formatieren
					$bilddatei  = $bilder_dir . $bildname;
					$thumbdatei = $thumb_dir . 'tumb_' . $bildname;
					$uploaddatei = $path;
				// Dateinamen und Pfad formatieren ende

				// Datenbankeinträge
					$insert = $db->prepare
						("INSERT IGNORE INTO `gal_bilder` SET
						`bilddatei` = :bilddatei,
						`thumbdatei` = :thumbdatei,
						`bildname` = :bildname,
						`kategorie` = :kategorie,
						`album` = :album,
						`subalbum` = :subalbum,
						`createdate` = :createdate,
						`tag` = :tag,
						`monat` = :monat,
						`jahr` = :jahr,
						`width` = :width,
						`height` = :height");

					if ($insert->execute
						([
						':bilddatei' => $bilddatei,
						':thumbdatei' => $thumbdatei,
						':bildname' => $bildname,
						':kategorie' => $val_kategorie,
						':album' => $val_album,
						':subalbum' => $val_subalbum,
						':createdate' => $createdate,
						':tag' => $tag,
						':monat' => $monat,
						':jahr' => $jahr,
						':width' => $tmpWidth,
						':height' => $tmpHeight
						]))
					{
						// Erzeugung Thumbnail
	
					}
				// Datenbankeinträge ende

				// Fertige Dateien verschieben
					rename($uploaddatei, $bilddatei);
		
Also ich verschiebe den Ordnerinhalt aus dem Uploadordner in den Bilderordner erstelle die Thumbs und trage die Infos in die DB ein.

Hier kommt es zum Problem.
Wenn ich zum Beispiel meine Gallery so aufbaue
Kategorie = Urlaub
Album = Tunesien
Subalbum = Tag 1,Tag 2,Tag3 usw.
und ich einen Tag habe, z.B. Tag 7 wo ich z.B. 500 Fotos habe.
So klappt der Upload zwar aber wenn ich dann dieses Subalbum aufrufe also
Kategorie = Urlaub
Album = Tunesien
Subalbum = Tag 7

dann werden ja alle Pfade die den obenstehenden Kriterien per foreach in das Array $bild geladen

Code: Alles auswählen

$result_bilder = $query_bilder->fetchAll();
foreach ($result_bilder as $bild)
	{
	   $var_datei = $bild["bilddatei"];
	  ....    
Und mit dem a href

Code: Alles auswählen

	  
	  
	// Anzeige der highslide  Gallerie erstellen 
		$gallerieanzeige .= '
		<a  
			href=" ' . $var_datei . ' "
			id="thumb1" 
			class="highslide" 
			onclick="return hs.expand(this, GalleryOptions)" 
			title="' . $var_name . '">
			<img src="' . $var_thumb . '" class="thumb" width:100%; height:100%" alt="" />
		</a>';
	// Startthumb der highslide  Gallerie ende
in der Gallery eingebunden.

Dadurch entstehen halt extreme Ladezeiten.

Darum möchte ich es in diesem Falle erreichen, weil es auf dem Wege der Anzeigeaufteilung, wie du es vorgeschlagen hast nicht funktioniert, bzw sich da wohl mehr Probleme zur Umsetzung ergeben würden die ich nicht vorhersehen kann und wo mir das Wissen und Verständnis fehlt.

Du hast ja in deinen Bilderuploadscripts folgende Variante bezüglich der doppelten Dateien eingebaut

Code: Alles auswählen

  // Wenn die Datei vorhanden ist, hänge eine Zahl an den Dateinamen
   if (file_exists($directory . $newname)) {
    $nr = 2;
    do {
     $newname = substr($filename, 0, 45) . $nr . "." . $extension;
     $nr++;
    }
    while(file_exists($directory . $newname));
   }
Noch ein Hinweis:
Alle Bilder landen in meinem Script im selben Ordner /fotos/bilder und die Thumbnails in /fotos/thumbs und für den Ordnerupload lade ich per filezilla die bilder in /fotos/uploads.

Ich würde gerne erreichen wenn der Uploadordner wie in meinem Beispiel 500 Bilder enthält, soll der Subalbumname Tag 7 alle als Beispiel 50 Bilder einen anhang bekommen.

Also statt alle 500 Bilder in der Datenbank mit folgenden Einträgen zu versehen
Kategorie = Urlaub
Album = Tunesien
Subalbum = Tag 7

Sollen die ersten 50 Bilder mit obenstehenden Einträgen versehen sein.
Das 51. bis 100. Bild soll dann folgendes enthalten

Kategorie = Urlaub
Album = Tunesien
Subalbum = Tag 7_1

Das 101. bis 150. Bild

Das 51. bis 100. Bild soll dann folgendes enthalten

Kategorie = Urlaub
Album = Tunesien
Subalbum = Tag 7_2

usw.

Kurz die Wariable $val_subalbum muss periodisch ergänzt werden.
Weil ich jedoch nicht alles wieder zerreissen will,
vor allem weil "dont touch a running system -> wenn du keine Ahnung hast"
ersuche ich deine Hilfe.

Die Filenamevariante hat ja den vorteil weil es sich um Dateioperationen handelt, hier ist es eine Variable und DBeintrag sachedingsbums hrgmpf.

ich würde ja gerne die Gallery hochladen aber 16MB inklusive ein paar Beispielbilder ist schwierig glaube ich.
Ich schaue mal ob ich das über ne Sub von meinem Webspace aufziehe.
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste