Bilder auf Webserver speichern und Infos in MYSQL DB speichern

Fragen und Diskussionen rund um Internet, Software und PC
alexbberlin
Mitglied (Level 2)
Mitglied (Level 2)
Beiträge: 11
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: 5744
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 2)
Mitglied (Level 2)
Beiträge: 11
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: 5744
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
Mitglied (Level 10)
Mitglied (Level 10)
Beiträge: 755
Registriert: Di 8. Dez 2020, 19:42
Wohnort: Bamberg
Kontaktdaten:

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 2)
Mitglied (Level 2)
Beiträge: 11
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
Mitglied (Level 10)
Mitglied (Level 10)
Beiträge: 755
Registriert: Di 8. Dez 2020, 19:42
Wohnort: Bamberg
Kontaktdaten:

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: 466
Registriert: Di 8. Dez 2020, 18:37
Wohnort: Elsass

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 2)
Mitglied (Level 2)
Beiträge: 11
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.
alexbberlin
Mitglied (Level 2)
Mitglied (Level 2)
Beiträge: 11
Registriert: So 31. Jul 2022, 16:21

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

Ungelesener Beitrag von alexbberlin »

Also ich habs mal versucht umzusetzen, funktionierte jedoch leider nicht.

Code: Alles auswählen

// Postcheck Was wurde im Formular eingegeben
	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

// erlaubte Anzahl der  Bilder je Subalbum
$max_anzahl_bilder_subalbum = 50;

// Anzahl der Bilder im Uploadordner ermitteln
$anzahl_vorhandener_upload_bilder = count($_FILES);

// Die Anzahl der zu erwartenden Subalben ermitteln 
$anzahl_zu_erwartenden_subalben = ceil($anzahl_vorhandener_upload_bilder / $max_anzahl_bilder_subalbum);

 // Dem jeweiligen Subalbum sofern mehr als 50 Bilder vorhanden sind  soll  eine fortlaufende Nummer angehängt werden.
 // z.B. 'Tag 1' wird bei mehr al 50 Bildern zu 'Tag 1_01' dann zu 'Tag 1_02' usw.


// Folgender Versuch der Umsetzung funktionierte nicht es wurde nur _01 angehängt und auch nur ein Subalbum erstellt eine Fehlermeldung gabs auch

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

// Den Versatz ermitteln
$Versatz = $Aktuelles_Subalbum * $max_anzahl_bilder_subalbum - $max_anzahl_bilder_subalbum;

$subalbum = $val_subalbum.'_'.$Aktuelles_Subalbum;
Benutzeravatar
Werner-Zenk.de
Mitglied (Level 10)
Mitglied (Level 10)
Beiträge: 755
Registriert: Di 8. Dez 2020, 19:42
Wohnort: Bamberg
Kontaktdaten:

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

Ungelesener Beitrag von Werner-Zenk.de »

$anzahl_vorhandener_upload_bilder = count($_FILES);
Und woher sollen die Daten von $_FILES kommen, $_FILES ist nur in einem temporären PHP-Verzeichnis während des Uploads vorhanden und eignet sich nicht für eine Seitennavigation.

Da wurde nicht einmal ansatzweise die Funktionalität von dem von mir geposteten Script verstanden!
alexbberlin
Mitglied (Level 2)
Mitglied (Level 2)
Beiträge: 11
Registriert: So 31. Jul 2022, 16:21

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

Ungelesener Beitrag von alexbberlin »

Ok ich hoffte du hast gesehen dass ich versuche daten zu speichern.
Ich lade Bilder in den uploadordner Ordner hoch. Über ein Formular gebe ich Kategorie Album und Subalbum ein. Diese Daten werden samt Pfad in die Datenbank eingetragen.Das für mich wichtige während das maximal 50 Bilder den selben subalbumeintrag erhalten wenn aber mehr als 50 Bilder im uploadordner sind sollte der Name des subalbum mit 01 usw ergänzt werden
alexbberlin
Mitglied (Level 2)
Mitglied (Level 2)
Beiträge: 11
Registriert: So 31. Jul 2022, 16:21

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

Ungelesener Beitrag von alexbberlin »

Sorry finde keinen editbutton.

Hier ein Link zu den Dateien zum Nachbauen:

Download der Gallery

.: Edit Tommy :.
Link korrigiert

Code: Alles auswählen

[url=https://www.alex-b-test.de/downloads/gallerydateien.zip]Download der Gallery[/url]
Im Archiv ist der Ordner Fotos, worin sich die Bilder- Thumbnail- und Uploadordner befinden.
Nach dem Entpacken bitte die Installationsanweisung befolgen und die entpackten Elemente auf den Server hochladen.
Es sind ein paar Beispielbilder enthalten.

bilder_ordner_upload.php und bilder_ordner_upload_settings.php sind die betreffenden Dateien zu meinem Problem.

Wenn weder Lust noch Zeit vorhanden ist folgt hier nochmal der Code inklusiver Vermerke.
Hier der Inhalt der gallery_ini.php

Code: Alles auswählen


<?php
$val_kategorie = '';
$val_album = '';
$val_subalbum = '';
$var_kategorie = '';
$var_album = '';
$var_subalbum = '';
$var_width = NULL;
$var_height = NULL;
$var_unique_id = NULL;
$var_create_date = NULL;
$var_filesize = NULL;
$var_hersteller = NULL;
$var_modell = NULL;
$var_cam_bios = NULL;
$anzeige_form = '';
$anz_uploads = NULL;
$ausgabe_content = '';
$ausgabe_favcheck = NULL;
$ausgabe_meldung='';
$dateinamen='';

$filesize = 0;
$fav_out = 0;
$gallerieanzeige = "";
$Meldung = '';
$Meldung_2 = '';
$newname = '';
$output = '';
$readycheck=0;
$update = "";
$val_kategorie = "";
$val_album = "";
$val_subalbum = "";
$erfolg = 0;
// settings
$bilder_dir = 'fotos/bilder/';
$thumb_dir = 'fotos/thumbs/';
$upload_dir = 'fotos/uploads/';
$maxFilename = 65;
$thumbWidth = 120;
$thumbHeight = 80;
$thumbQuality = 80;
$kategorie_liste="";
$album_liste="";
$subalbum_liste="";

// Postcheck Hier frage ich die Formulareingaben ab
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

// Favcheck Wenn ich im Bildanzeigefenster auf Set Favorit klicke wird hier geprüft und dann reagiert
if(isset($_POST["setfav_btn"]) && !empty($_POST["fav_bild_id"])) 
{
    $favid = $_POST["fav_bild_id"];
    $query_favcheck = "SELECT `fav_flag` from `gal_bilder` WHERE `id` = '".$favid."'";
    $result_favcheck = mysqli_query($connect, $query_favcheck);
    while ($row_favcheck = mysqli_fetch_array($result_favcheck))
        {
            $favcheck = $row_favcheck["fav_flag"];
        }

    if ($favcheck !=1)
        {
            $set_fav='true';
            $ausgabe_favcheck='<h4 style="color:#00ff00;">Favorit gesetzt</h4>';
        }
    else
        {
            $set_fav='false';
            $ausgabe_favcheck='<h4 style="color:#ff0000;">Favorit entfernt</h4>';
        }


        if($ausgabe_favcheck !="")
            {$ausgabe_meldung = '<div class="my_menu text-center pt-2">'.$ausgabe_favcheck.'</div>';}


        
    $update = "UPDATE `gal_bilder` SET `fav_flag` = $set_fav WHERE `gal_bilder`.`id` = '".$favid."'";
    $make_update = mysqli_query($connect, $update);
}

else
{$ausgabe_meldung = '<div class="text-center">Bitte wähle ein Album !</div>';}

// Favcheck ende



// Datalist Kategorie
$query_kategorie = "
SELECT DISTINCT `kategorie` FROM `gal_bilder`";
$result_kategorie = mysqli_query($connect, $query_kategorie);
while ($row_kategorie = mysqli_fetch_array($result_kategorie))
{
   $kategorie_liste = 
   $kategorie_liste . 
   '<option>'
   .$row_kategorie["kategorie"].
   '</option>';
}


// Hier werden die Datalisten aus der Datenbank befüllt
// Datalist Album
if(!empty($val_kategorie))
{
   $query_album = "SELECT DISTINCT `album` FROM `gal_bilder` WHERE `kategorie` LIKE '" . $val_kategorie . "' ";
            $result_album = mysqli_query($connect, $query_album);
            while ($row_album = mysqli_fetch_array($result_album))
                {
                    $album_liste = $album_liste . '<option>'.$row_album["album"].'</option>';
                } 
        }
        
        else
        {
            $query_album = "SELECT DISTINCT `album` FROM `gal_bilder`";
            $result_album = mysqli_query($connect, $query_album);
            while ($row_album = mysqli_fetch_array($result_album))
                {
                    $album_liste = $album_liste . '<option>'.$row_album["album"].'</option>';
                } 
        }

// Datalist Subalbum
    if(!empty($val_kategorie) && !empty($val_album))
        {
            $query_subalbum = "SELECT DISTINCT `subalbum` FROM `gal_bilder` WHERE `kategorie` LIKE '" . $val_kategorie . "' && `album` LIKE '" . $val_album . "'";
            $result_subalbum = mysqli_query($connect, $query_subalbum);
            while ($row_subalbum = mysqli_fetch_array($result_subalbum))
                {
                    $subalbum_liste = $subalbum_liste . '<option>'.$row_subalbum["subalbum"].'</option>';
                } 
        }
        
        else
        {
            $query_subalbum = "SELECT DISTINCT `subalbum` FROM `gal_bilder`";
            $result_subalbum = mysqli_query($connect, $query_subalbum);
            while ($row_subalbum = mysqli_fetch_array($result_subalbum))
                {
                    $subalbum_liste = $subalbum_liste . '<option>'.$row_subalbum["subalbum"].'</option>';
                }
        }
// Datalisten ende
?>

<datalist id="kategorie_liste"><?=$kategorie_liste;?></datalist>
<datalist id="album_liste"><?=$album_liste; ?></datalist>
<datalist id="subalbum_liste"><?=$subalbum_liste; ?></datalist>




Hier der Inhalt der bilder_ordner_upload.php welche das Formular enthältt

Code: Alles auswählen

<?php
//PHP Start
	error_reporting(E_ALL);
	ini_set('display_errors', TRUE);
	require_once 'includes/connect.php';
	$seitenname = 'Ordnerupload';	
	require_once 'gallery_inc/gallery_ini.php';
	require_once 'header.php';

	$_FILES = array_slice(scanDir($upload_dir), 2);
	$anz_uploads = count($_FILES);
	$filecounter = $anz_uploads;

	if ($anz_uploads < 1)
		{$ausgabe_meldung ='Es sind keine Bilder im Uploadordner vorhanden';} 
	else 	
		{$ausgabe_meldung = 'Es sind ' . $anz_uploads . ' Bilder im Uploadordner vorhanden';}
	// Dateien zählen ende


// PHP ENDE
?>
<!-- Seiten content -->
<div class="card col-12 col-md-3 my-0 bg-light" style="border-radius: 40px">
		<!-- Content header -->
			<div class="card-header mx-1 mt-1 my_menu" style="border-radius: 40px 40px 0 0">
				<!-- Untermenu -->
					<ul class="nav justify-content-center col mx-auto my-0">
						<button class="button rbb_anzeige p-1 align-center border-0 bg-transparent text-center me-1" onclick="window.location='bilder_anzeige.php';"></button>
						<button class="button rbb_upload p-1 align-center border-0 bg-transparent text-center me-1" onclick="window.location='bilder_upload.php';"></button>
						<button class="button rbb_ordner_uploadactive p-1 align-center border-0 bg-transparent text-center me-1" onclick="window.location='bilder_ordner_upload.php';"></button>
						<button class="button rbb_bilanz p-1 align-center border-0 bg-transparent text-center me-1" onclick="window.location='bilder_bilanzen.php';"></button>
						<button class="button rbb_fav p-1 align-center border-0 bg-transparent text-center me-1" onclick="window.location='bilder_fav.php';"></button>
					</ul>
				<!-- Untermenu Ende -->
			</div>
		<!-- Content header ende-->

		<!-- Content body -->				
			<div class="card-body my-0 mx-1 bg-secondary">
				<form id="ordnerupload" method="post" action="" enctype="multipart/form-data" autocomplete="off" class="form-inline col mx-auto my-0 py-0">
					<div class="row">
						<div class="form-group p-0 mb-1">
							<small class="ps-1">Kategorie</small>
							<div class="input-group">
								<div class="input-group-prepend"><span class="input-group-text"><i class="bi bi-book-fill mx-1"></i></span></div>
									<input type="text" class="form-control bg-dark text-light py-0 selecticon" name="kategorie" id="kategorieid" list="kategorie_liste" value="<?=$val_kategorie;?>" onChange="this.form.submit()" required>
								<div class="input-group-append"><span class="input-group-text" onclick="empty_kategorie();"><i class="bi bi-eraser"></i></span></div>
							</div>
						</div>

						<div class="form-group p-0 mb-1">
							<small class="ps-1">Album</small>
							<div class="input-group">
								<div class="input-group-prepend"><span class="input-group-text"><i class="bi bi-bookmarks-fill mx-1"></i></span></div>
									<input type="text" class="form-control bg-dark text-light py-0 selecticon" name="album" id="albumid" list="album_liste" value="<?=$val_album;?>" onChange="this.form.submit()" required>
								<div class="input-group-append"><span class="input-group-text" onclick="empty_album();"><i class="bi bi-eraser"></i></span></div>
							</div>
						</div>

						<div class="form-group p-0 mb-1">
							<small class="ps-1">Subalbum</small>
							<div class="input-group">
								<div class="input-group-prepend"><span class="input-group-text"><i class="bi bi-bookmark-fill mx-1"></i></span></div>
									<input type="text" class="form-control bg-dark text-light py-0 selecticon" name="subalbum" id="subalbumid" list="subalbum_liste" value="<?=$val_subalbum;?>" onChange="this.form.submit()" formaction="" required>
								<div class="input-group-append"><span class="input-group-text" onclick="empty_subalbum();"><i class="bi bi-eraser"></i></span></div>
							</div>
						</div>
						
						<div class="form-group p-0 mb-1">
							<div class="input-group">
								<button class="btnleft col ms-auto" type="reset"><i class="bi bi-trash pt-2"></i> Reset</button>
								<button class="btnright col me-auto" type="submit" name="abgesendet" formaction="bilder_ordner_upload_settings.php" id="submit_bildordner">Absenden <i class="bi bi-cloud-arrow-up pt-2"></i> </button>
							</div>
						</div>
					</div>
				</form>
			</div>
		<!-- Content body ende -->

		<!-- Content footer -->
			<div class="card-footer mx-1 mb-1 my_menu text-center" style="border-radius: 0 0 40px 40px">	
				<?=$ausgabe_meldung;?>
			</div>
		<!-- Content footer ende -->
	</div>
<!-- Seiten content ende-->
<?php require_once 'footer.php';
Und hier der Inhalt der bilder_ordner_upload_settings.php welche die Verarbeitung enthältt

Code: Alles auswählen

<?php
//PHP Start
	error_reporting(E_ALL);
	ini_set('display_errors', TRUE);
	require_once 'includes/connect.php';
	require_once 'gallery_inc/gallery_ini.php';
	$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);
		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 = $anz_uploads;
				// Fertige Dateien verschieben ende

				// Erfolgsmeldung erstellen
					if ($anz_uploads > 0)
						{
							$erfolgout = $anz_uploads.' von '.$anz_uploads;
							$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>


alexbberlin
Mitglied (Level 2)
Mitglied (Level 2)
Beiträge: 11
Registriert: So 31. Jul 2022, 16:21

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

Ungelesener Beitrag von alexbberlin »

Werner-Zenk.de hat geschrieben: Mo 15. Aug 2022, 10:50
$anzahl_vorhandener_upload_bilder = count($_FILES);
Und woher sollen die Daten von $_FILES kommen, $_FILES ist nur in einem temporären PHP-Verzeichnis während des Uploads vorhanden und eignet sich nicht für eine Seitennavigation.

Da wurde nicht einmal ansatzweise die Funktionalität von dem von mir geposteten Script verstanden!
Sprich es ist nicht möglich die $_FILES zu zählen und bei allen 50. Eintrag ein neuen Namen zu geben
alexbberlin
Mitglied (Level 2)
Mitglied (Level 2)
Beiträge: 11
Registriert: So 31. Jul 2022, 16:21

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

Ungelesener Beitrag von alexbberlin »

Vielleicht hilft das ja zum Verständnis:

Die Dateien werden aus dem Uploadordner(Quelle) in den Bilderordner (Ziel) verschoben mit ihrem hochgeladenen ursprünglichen Dateinamen.
Der Programablauf ist so:

1. Formular
Benennung Kategorie abfragen.
Benennung Album abfragen.
Benennung Subalbum abfragen.

2. Alle Eingaben gemacht?
Nein: Formular wird nicht abgesendet
Ja : Mit array_slice(scanDir($upload_dir), 2) die im Ordner "uploads" enthaltenen Dateien in dem array "$_FILES" speichern.

3. Mithilfe des Arrays mit einer Schleife Dateiinfos bearbeiten, Thumbnails erstellen.

4. Fertige Infos in die DB eintragen.

Code: Alles auswählen

         
    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
          ]))
    
5. Dateien vom Uploadordner in den Bilderordner verschieben, ich nutze den Befehl "rename" was nicht das Problem ist da der Pfad ja in der DB steht.

6. Wenn Upload fertig auf die Anzeigeseite Weiterleiten, (ich weis nicht wie ich die Werte aus $val_kategorie, $val_album, $val_subalbum mitübergebe, vielleicht werde ich diese noch in einer session speichern und im Anzeigeskript per if !empty als value in die Inputs einpflege, Aktuell muss ich die noch mal wählen. Ist aber erst mal irrelevant.

Soweit der Ordnerupload.
Das klappt ja auch wunderbar.

Jedoch wenn ich auf die Bilderanzeigeseite gehe und das anzuzeigende Album wähle (ich definiere ja Kategorie,Album und Unteralbum im Upload und frage nach diesem Schema das gewünschte Album ab.

Also wie oben Schon beschrieben:
Beispiel beim Upload werden folgende Einträge für die Datenbank gewählt:

Feldname > Eintrag
Kategorie > Urlaub
Album > Tunesien
Subalbum > Tag 1

Weiterer Upload
Beispiel:

Feldname > Eintrag
Kategorie > Urlaub
Album > Tunesien
Subalbum > Tag 2

usw.
Dann z.B.
Feldname > Eintrag
Kategorie > Urlaub
Album > Ohio
Subalbum > Tag 1

usw.

Werden Bilderpfade mit Kategorie Album und Subalbum je Bild einer ID zugewiesen sprich in einer Reihe geschrieben-

Wähle ich dann im Anzeigeformular

Feldname > Eintrag
Kategorie > Urlaub
Album > Tunesien
Subalbum > Tag 1


werden alle Dateipfade die
Feldname > Inhalt
Kategorie > Urlaub
Album > Tunesien
Subalbum > Tag 1

enthalten angezeigt.

Ausschlaggeben is also das Subalbum welches das eigentliche anzuzeigende Album ist

Habe ich jedoch in Diesem Subalbum zu viele hochgeladen, so erhöht sich die Ladezeit der Seite extrem.

Kopiere ich nun z.B. 500 Dateien im Uploadordner und weise dem, wie im obigen Beispiel beschrieben,folgende Kriterien zu:

Kategorie > Urlaub
Album > Ohio
Subalbum > Tag 1

werden bei der Anzeigeauswahl im Bilderanzeigescript ja alle 500 Dateien in den Speicher geladen.

Da ich ja bei der Anzeige nicht auf eine Lösung zurückgreifen will, in der ich die anzuzeigenden Bilder auf mehrere Seiten verteile und per Seitenavigation auf eine gewisse Anzahl beschränke
will ich dieses schon beim upload beschränken in der Form dass alle 51. Datei sich der Eintrag in der Datenbank im Feld Subalbum um eine laufende Nummer ergänzt wird.

Also

Kategorie > Urlaub
Album > Ohio
Subalbum > Tag 1
Bild1jpg

. . .

Kategorie > Urlaub
Album > Ohio
Subalbum > Tag 1
Bild50jpg

Dann soll eine laufende Nummer angehangen werden also

Kategorie > Urlaub
Album > Ohio
Subalbum > Tag 1_1
Bild51jpg

. . .

Kategorie > Urlaub
Album > Ohio
Subalbum > Tag 1_1
Bild101.jpg

usw.

Wie ich die benötigte Periodenanzahl und die Menge des Überschusses ermittle habe ich wie im folgendem Skript gelöst, als Beispiel enthält der Ordner 516 Bilder:

Code: Alles auswählen

<?php
$anzahl_dateien=516; // Wird aus der Summe des arrays $FILES ermittelt
$anz_perioden = 0;
$step_dateien = 50; // Erlaubte Menge je definierten Subalbums
$restbetrag = 0;


if ($anzahl_dateien > $step_dateien)
{
    $anz_perioden = floor($anzahl_dateien / $step_dateien);
}
else
{
    $anz_perioden = 1;
}

if ($anz_perioden>1)
{
    $restbetrag = $anzahl_dateien - ($anz_perioden * $step_dateien);
}
else
{
    $restbetrag = 0;
}
?>
Ergebniss wäre:

anz_perioden = 10
restbetrag = 16

Meine Frage wie bringe ich das in mein script ein
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 5744
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 »

Moin Alex,

Du ich befürchte, dass Dir bei Deinen Wünschen hier niemand helfen kann.

Werner hat sich hier auch im Moment komplett zurückgezogen, denn er hat ja seine Domain eingestellt, weil ihm das alles zu viel wurde und da macht es dann ja auch keinen Sinn anstelle dessen hier Skripte für die Forum-Mitglieder individuell zu entwickeln.

Werner hat auch schon vor Jahren immer zu seinen Skripten die Bemerkung geschrieben, dass es keinen Support für Anpassungen der Benutzer an seine Skripte geben kann. Wer das macht, der muss es dann auch alleine zu Ende bringen können.

Werner Zenk hat geschrieben:
Es wird kein Support für Probleme geben, die bei der Anpassung der Scripte entstehen.
Die kompletten Nutzungsbedingungen finden Sie unter: werner-zenk.de

Viel Spaß damit!
W. Zenk

... denn das wäre ja eine unendliche Geschichte und viel zu aufwändig für vielleicht ein Dutzend verschiedener Bedürfnisse (oder noch mehr), neben den ohnehin schon sehr zeitinseniven Arbeiten vom Werner, auch noch alles ganz individuell anzupassen. Das kann niemand leisten.


... ich kann Dir leider damit auch nicht helfen.
Benutzeravatar
Werner-Zenk.de
Mitglied (Level 10)
Mitglied (Level 10)
Beiträge: 755
Registriert: Di 8. Dez 2020, 19:42
Wohnort: Bamberg
Kontaktdaten:

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

Ungelesener Beitrag von Werner-Zenk.de »

Habe ich jedoch in Diesem Subalbum zu viele hochgeladen, so erhöht sich die Ladezeit der Seite extrem.
Eben dafür gibt es diese Pagination, mit der man die Daten auf mehrere Seiten verteilt anzeigen kann Stichwort: MySQL "LIMIT".

Beachte auch das was "tk1234" im PHP-forum geschrieben hat "Womit die Bilder auch wieder auf einer extra Seite landen - da halte ich eine Funktion zum Blättern innerhalb eines "Subalbums" für wesentlich übersichtlicher (oder eben die schon genannte lazy-loading-Funktion)." https://www.php.de/forum/webentwicklung ... ost1604351
alexbberlin
Mitglied (Level 2)
Mitglied (Level 2)
Beiträge: 11
Registriert: So 31. Jul 2022, 16:21

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

Ungelesener Beitrag von alexbberlin »

Werner, ich danke erst mal dass Du noch mal geantwortest hast und dir dafür Zeit genommen hast.
Im PHP Forum habe ich auch schon auf tks Antwort reagiert.

Ich verstehe auch dass wenn man eine Sache die man gelernt hat und schätzt auch von dem optimalen ausgeht und Perfektion erwartet.

Ich erwarte keine perfekte fertige Lösung, aber anhand meines fortgeschrittenen Projektes und die Sache dass durch die paginierung, so wie du es vorschlägst, einfach mal zuviele Dinge hinzukommen die ich so erst mal nicht einbauen kann da dann komplett alles wieder fürn Arsch ist was ich hinbekam. Optisch und funktionstechnich ist halt alles ok bis auf die Ladezeit. Ich weis halt nicht wie ich die Paginierung einbinden kann ohne alles wieder von vorne zu beginnen und einfach nur abzuschreiben ohne eigene erarbeitung. Da könnte ich z.Bsp. auch einfach piwigo nutzen. ich will aber mein eignes ding machen. alleine schon wegen dem Design meiner HP.

Aber gut ich werde mir mal lazyload angucken. Danke an alle die helfen wollten.
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 5744
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 »

Moin,

vielleicht kann Dir dieser Artikel bezüglich "PHP Pagination" auch etwas helfen:

https://code.tutsplus.com/de/tutorials/ ... --net-2928
alexbberlin
Mitglied (Level 2)
Mitglied (Level 2)
Beiträge: 11
Registriert: So 31. Jul 2022, 16:21

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

Ungelesener Beitrag von alexbberlin »

Hallo Thommy,
also ich will da noch mal meine Ausgangssituation nachpflegen.

Was mein eigentliches Problem ist, ich nutze zur Darstellung also anzeige der Bilder, HighslideJS,
Das funktioniert so dass ich die Bilder per a href anzeigen und das HighslideJS damit arbeitet, auch die caption des jeweiligen Bildes wird somit generiert.

Die pagination kann ich mangels Erfahrung mit Javascript nicht einbinden.

Darum suche ich ja die Möglichkeit es schon beim Upload zu definieren.

Aber ok ich denke mal es wird da wohl keine Möglichkeit geben, somit beende ich das hier nun, ich will hier nicht weiter eure/deine Zeit verschwenden, Es war eine Idee.
Danke jedoch für eure/deine Hilfe.
Antworten

Wer ist online?

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