Zu Hülf! Problem mit PHP GetImageSize()
- Charlymarx
- Beiträge: 51
- Registriert: Mo 21. Feb 2022, 20:04
Gib mir deine Mailadresse per PN.
Wird zwar noch ein paar Tage dauern weil ich noch einige andere Probleme lösen muß.
Wird zwar noch ein paar Tage dauern weil ich noch einige andere Probleme lösen muß.
- Atarimaster
- Beiträge: 4002
- Registriert: So 6. Feb 2022, 22:09
- Wohnort: Ruhrgebiet
Du hast die Mailadresse mittlerweile ja sicher erhalten…
Macht nix, es eilt ja nicht.Charlymarx hat geschrieben: ↑Mo 12. Dez 2022, 16:48 Wird zwar noch ein paar Tage dauern weil ich noch einige andere Probleme lösen muß.
Ich habe keine Ahnung, aber davon jede Menge.
- Charlymarx
- Beiträge: 51
- Registriert: Mo 21. Feb 2022, 20:04
Schon mal vorweg:
Das Problems bei href und klickbaren Fläche in Form eines Vorschaubildes und damit unmittelbaren Aufruf einer anderen Seite die Information mitzugeben, welches der unzähligen Vorschaubilder denn nun angeklickt wurde, ergab sich letztlich eine elegante und schlanke Lösung: Die URL in der href musste abgefangen werden und mit dem Index des angeklicken Vorschaubildes verknüpft und dann erst ausgeführt werden.
Hier die Lösung:
1. Das href wurde auf eine Javascript-Funktion umgeleitet indem als URL die Funktionsadresse eingetragen wurde -
2. Die Javascript-Funktion auf die der Aufruf umgeleitet wird -
wobei der index die Nummer des Bildes, das zugehörig zum Vorschaubild darstellt soll.
Kurz und schlank aber effektiv, da sonst keinerlei Möglichkeit besteht href eine Information mitzugeben, die einfacher und besser nachvollziehbar ist.
Das Problems bei href und klickbaren Fläche in Form eines Vorschaubildes und damit unmittelbaren Aufruf einer anderen Seite die Information mitzugeben, welches der unzähligen Vorschaubilder denn nun angeklickt wurde, ergab sich letztlich eine elegante und schlanke Lösung: Die URL in der href musste abgefangen werden und mit dem Index des angeklicken Vorschaubildes verknüpft und dann erst ausgeführt werden.
Hier die Lösung:
1. Das href wurde auf eine Javascript-Funktion umgeleitet indem als URL die Funktionsadresse eingetragen wurde -
Code: Alles auswählen
echo '<td><a href="javascript:myFunction(' . $index . ')">';
Code: Alles auswählen
function myFunction(index){
window.location= "bildergalerie.php?start="+index;
}
Kurz und schlank aber effektiv, da sonst keinerlei Möglichkeit besteht href eine Information mitzugeben, die einfacher und besser nachvollziehbar ist.
- Atarimaster
- Beiträge: 4002
- Registriert: So 6. Feb 2022, 22:09
- Wohnort: Ruhrgebiet
Also, mal ganz ehrlich: Eine elegante Lösung ist das nicht.
Denn der Einsatz von JavaScript ist hier, glaub’s mir, überflüssig.
Das würde genauso funktionieren mit einer Schleife nach diesem Schema:
Wenn das bei dir nicht der Fall war, bei $index also immer der Index des letzten Bildes ausgegeben wurde, war da irgendein Fehler im Script. Ehrlich.
Denn der Einsatz von JavaScript ist hier, glaub’s mir, überflüssig.
Das würde genauso funktionieren mit einer Schleife nach diesem Schema:
Code: Alles auswählen
foreach ($fileList as $index => $value)
{
echo '<a href="bildergalerie.php?index=' . $index . '"><img src="' . $value . '"</a>';
}
Ich habe keine Ahnung, aber davon jede Menge.
- Charlymarx
- Beiträge: 51
- Registriert: Mo 21. Feb 2022, 20:04
Es scheint doch ein Fehler drin gewesen zu sein. Aber eins ist sonderbar, der Index als Schlüssel war nicht nutzbar. Der ging nicht bei 0 los sondern z.B. bei 5. Das war aber das geringste Problem. Nun wird vom Vorschauprogramm alles an das Galerieprogramm weitergegeben - Geräteart (Mobil/Rechner), die verfügbare Anzeigebreite und Höhe sowie die Ausrichtung - Portait/Landscape aber ausgerechnet der Index bleibt undefiniert ob 0 oder 5 übergeben wird.
Da ist noch einiges an Suchen angesagt. Ich habe das verfolgt. Selbst für den Fall eines ausgeschalteten Javscripts um ein Window-resize festzustellen und die neuen Fenstermaße zu ermitteln und weiterzugeben, kommt ausgerechnet der Index undefiniert im Galerieprogramm an.
Ich muß weitersuchen woran es liegt aber: Ich komm schon noch drauf. Jedenfalls versuche ich dem auf den Grund zu gehen.
Was allerdings schon funktioniert, ist die Möglichkeit, das Bild in voller Größe nach Klick auf ein Galeriebild in einer neuen Seite anzuzeigen und das dann mit einem Klick wieder zu löschen.
Es klappt also. Nur noch die Parameterübergabe vom Vorschauprogramm auf das Galerieprogramm hat mit dem ersten Parameter ein Problem.
Da ist noch einiges an Suchen angesagt. Ich habe das verfolgt. Selbst für den Fall eines ausgeschalteten Javscripts um ein Window-resize festzustellen und die neuen Fenstermaße zu ermitteln und weiterzugeben, kommt ausgerechnet der Index undefiniert im Galerieprogramm an.
Ich muß weitersuchen woran es liegt aber: Ich komm schon noch drauf. Jedenfalls versuche ich dem auf den Grund zu gehen.
Was allerdings schon funktioniert, ist die Möglichkeit, das Bild in voller Größe nach Klick auf ein Galeriebild in einer neuen Seite anzuzeigen und das dann mit einem Klick wieder zu löschen.
Es klappt also. Nur noch die Parameterübergabe vom Vorschauprogramm auf das Galerieprogramm hat mit dem ersten Parameter ein Problem.
- Atarimaster
- Beiträge: 4002
- Registriert: So 6. Feb 2022, 22:09
- Wohnort: Ruhrgebiet
Sehr schön!
Wie du schon gesagt hast: Da kommst du schon noch drauf.Charlymarx hat geschrieben: ↑Fr 16. Dez 2022, 21:12 Nur noch die Parameterübergabe vom Vorschauprogramm auf das Galerieprogramm hat mit dem ersten Parameter ein Problem.
Ist vermutlich irgendein Tippfehler von der Art, die man ständig überliest. Die kenne ich zur Genüge.
Falls die Sache nicht eilig ist: Mir hat es oft geholfen, den Code mal ein paar Tage nicht anzuschauen. Und wenn ich dann wieder reingeschaut habe, hab ich den Fehler sofort gesehen und mich gefragt, wie ich den ständig überlesen konnte.
(Aber eben nur »oft«, auch nicht »immer«. )
Ich habe keine Ahnung, aber davon jede Menge.
- Charlymarx
- Beiträge: 51
- Registriert: Mo 21. Feb 2022, 20:04
Du hast vollkommen recht!
Man kann zehnmal drüberschauen und findet nichts. Ich hatte mich dann einer anderen dringenden Aufgabe zugewandt und den Code mal Code sein lassen und jetzt mir wieder angeschaut - und nach kurzer Zeit mit dem Ergebnis:
Es war ein doppeltes Anführungszeichen, das bei html-Code generieren durch php sich eingeschlichen hatte.
Dem PHP war das egal - war ja korrekt geklammert und bei der HTML-Interpretation durch den Browser hat der ab dem doppelten Anführungszeichen einfach nichts mehr gemacht - war ja ein Schließendes.
Jetzt kann ich endlich beruhigt weitermachen - Feintuning - die Bildränder rechts und unten bei einem resize richtig anpassen damit am Rechner im Fenster nur genau ein Bild mit Navigation und Bildtext unten angezeigt wird und nicht noch ein halbes Folgebild. Anschließend kommt das Formular mit dem Bildinfo-optionen, die zur Anzeige kommen sollen, denn die Adaptierung nach Einstellung muss noch im Code berücksichtigt werden.
Man kann zehnmal drüberschauen und findet nichts. Ich hatte mich dann einer anderen dringenden Aufgabe zugewandt und den Code mal Code sein lassen und jetzt mir wieder angeschaut - und nach kurzer Zeit mit dem Ergebnis:
Es war ein doppeltes Anführungszeichen, das bei html-Code generieren durch php sich eingeschlichen hatte.
Dem PHP war das egal - war ja korrekt geklammert und bei der HTML-Interpretation durch den Browser hat der ab dem doppelten Anführungszeichen einfach nichts mehr gemacht - war ja ein Schließendes.
Jetzt kann ich endlich beruhigt weitermachen - Feintuning - die Bildränder rechts und unten bei einem resize richtig anpassen damit am Rechner im Fenster nur genau ein Bild mit Navigation und Bildtext unten angezeigt wird und nicht noch ein halbes Folgebild. Anschließend kommt das Formular mit dem Bildinfo-optionen, die zur Anzeige kommen sollen, denn die Adaptierung nach Einstellung muss noch im Code berücksichtigt werden.
- Charlymarx
- Beiträge: 51
- Registriert: Mo 21. Feb 2022, 20:04
Javascript ist jetzt auf ausschließlich Clientseitige Abfragen für das Fensterresize beschränkt. Ob ein Rechner oder Mobiles Gerät benutzt wird und wenn mobiles Gerät - ob dieses in Portrait- oder Landscape-Modus verwendet wird. Dann wird die Anzeige angepasst - Stichwort responsive Modus.
Wenn schon PHP benutzt wird, dann muss es nicht noch zusätzlich durch CSS durchgenudelt werden wenn schon in PHP die Verhältnisse passgenau berechnet werden können, bevor etwas zur Anzeige kommt.
Was die Einteilung in der Vorschau betrifft, könnte CSS da ohnehin kaum helfen und in php wird das in zwei Abfragen abgehandelt.
Wenn schon PHP benutzt wird, dann muss es nicht noch zusätzlich durch CSS durchgenudelt werden wenn schon in PHP die Verhältnisse passgenau berechnet werden können, bevor etwas zur Anzeige kommt.
Was die Einteilung in der Vorschau betrifft, könnte CSS da ohnehin kaum helfen und in php wird das in zwei Abfragen abgehandelt.
- Charlymarx
- Beiträge: 51
- Registriert: Mo 21. Feb 2022, 20:04
Der responsive Modus ist ja eine feine Sache um den Seiteninhalt auf die Anzeige des Clientgeräts anzupassen. Da gibt es aber ein paar Fallstricke.
Eine Erkenntnis musste für mobile Geräte noch berücksichtigt werden:
Bei mobilen Geräten darf, wenn der Inhalt unten über den Bildschirmrand hinausreicht, ein resize mit einem Reload der Seite nur genau einmal durchgeführt werden damit beim Blättern nicht ständig ein Reload der Seite erfolgt und auf den Seitenanfang zurückpositioniert wird.
Das wird durch eine Bedingung in der Javascript-Funktion, die über onresize die Anzeigegrößen ermittelt und anschließend eben nur einmal ausgeführt wird, erreicht.
Bei iPhones und iPads ist das kein Problem, denn hier springt dann der Reader an, der das verhindert. Ein Tip auf das Readersymbol an der Stelle des Favicons und man kann scrollen, ohne dass ein Reload durchgeführt wird und auf den Anfang der Seite zurückpositioniert wird. Nicht so bei Android mit dem Chrome-Browser. Da ist das Reload nach dem ersten Resize unbedingt zu verhindern.
Das wollte ich nur für alle erwähnen, die in dieser Sache Programmlösungen suchen.
Eine Erkenntnis musste für mobile Geräte noch berücksichtigt werden:
Bei mobilen Geräten darf, wenn der Inhalt unten über den Bildschirmrand hinausreicht, ein resize mit einem Reload der Seite nur genau einmal durchgeführt werden damit beim Blättern nicht ständig ein Reload der Seite erfolgt und auf den Seitenanfang zurückpositioniert wird.
Das wird durch eine Bedingung in der Javascript-Funktion, die über onresize die Anzeigegrößen ermittelt und anschließend eben nur einmal ausgeführt wird, erreicht.
Bei iPhones und iPads ist das kein Problem, denn hier springt dann der Reader an, der das verhindert. Ein Tip auf das Readersymbol an der Stelle des Favicons und man kann scrollen, ohne dass ein Reload durchgeführt wird und auf den Anfang der Seite zurückpositioniert wird. Nicht so bei Android mit dem Chrome-Browser. Da ist das Reload nach dem ersten Resize unbedingt zu verhindern.
Das wollte ich nur für alle erwähnen, die in dieser Sache Programmlösungen suchen.