Führende Null
calconeon
- php
Ich bin grad bei der Programmierung einer Bildergalerie.
Dabei wird erstmal immer nur ein Bild angezeigt, dass vorher ausgewählt wurde. Die ID wird über die URL weitergebeben.
Die Bilder sind mit dreistelligen Zahlen gepseichert. Also 001.jpg..002.jpg usw.
Wenn man nun auf das Bild klickt, soll das nächste angeziegt werden.
Das addiere ich zu der grade angezeigten Bild_Id 1. Dabei wandelt PHP die Zahl aber in einen Integer-Wert um, und zwar ohne führende Nullen. Daraus folgt, dass die Datei nicht gefunden wird.
Wie kann ich die führenden Nullen kreiren?
Dankeschön...
Moin!
wenn die zahlen des dateinamens immer 3 stellig sind, kannst du über die zeichenkettenlänge des neuen dateinamens bestimmen, wie viele nullen davor müssen. etwa so:
<?php
$altername = 009;
//php macht daraus 9
$neuername = $altername+1;
//ist 10
$zahl = strlen($neuername);
//ist 2
$nullenzahl = 3-$zahl;
//ist 3-2=1, also eine null (010)
//jetzt hast du ddie anzahl der nullen
$i = 0;
while($i < $nullenzahl){
$pr .= "0";
$i++;
}
$dateiname = $pr.$neuername;
?>
tschüssi
ichen
<?php
$altername = 009;
//php macht daraus 9
$neuername = $altername+1;
//ist 10
$zahl = strlen($neuername);
//ist 2
$nullenzahl = 3-$zahl;
//ist 3-2=1, also eine null (010)
//jetzt hast du ddie anzahl der nullen
$i = 0;
while($i < $nullenzahl){
$pr .= "0";
$i++;
}
$dateiname = $pr.$neuername;
?>
Danke!
Ich hoffte, da gibt es auch was komfortableres, aber das geht Notfalls auch.
Hallo
Ich hoffte, da gibt es auch was komfortableres, aber das geht Notfalls auch.
Das gibt's wohl. str_pad ist der Name der Funktion.
in deinem Fall:
$zahl = str_pad($input,3,"0",STR_PAD_LEFT);
Tschö, Auge
Hi,
$altername = 009;
//php macht daraus 9
Also mein PHP (4.3.1) macht daraus (richtigerweise) 0.
Und bei
$x = 010;
$x++;
echo $x;
wird logischerweise 9 ausgegeben.
Zahlen mit führender 0 sind in PHP Oktalzahlen ...
cu,
Andreas
Moin!
sorry, das wusste ich nicht. danke für den hinweis.
tschüssi
ichen
Hallo,
Wie kann ich die führenden Nullen kreiren?
Neben str_pad() leistet auch sprintf() gute Dienste:
$index=1;
$index_neu=sprintf("%03s",$index); // 001
MfG, Thomas
Hallo,
Ich bin grad bei der Programmierung einer Bildergalerie.
Das ist schön, wunderbar mit PHP zu realisieren.
Wenn man nun auf das Bild klickt, soll das nächste angeziegt werden.
Das addiere ich zu der grade angezeigten Bild_Id 1. Dabei wandelt PHP die Zahl aber in einen Integer-Wert um, und zwar ohne führende Nullen. Daraus folgt, dass die Datei nicht gefunden wird.
Das jedoch ist viel zu unsicher, instabil und zudem kompliziert! Was passiert denn, wenn mal ein Bild zwischendrin fehlt? Dann hast du den Salat. Mach es besser: Lies alle JPG-Dateien im Verzeichnis aus und schreibe sie ein Array, dann kannst du es noch sortieren und schon hast du eine komfortable Bildergalerie. Außerdem: Woher soll dein Skript wissen, wann die Bilderserie zu Ende ist? Du müsstest dann ja immer bis 999.jpg gehen!
Gruß
Lachgas
Das jedoch ist viel zu unsicher, instabil und zudem kompliziert! Was passiert denn, wenn mal ein Bild zwischendrin fehlt? Dann hast du den Salat. Mach es besser: Lies alle JPG-Dateien im Verzeichnis aus und schreibe sie ein Array, dann kannst du es noch sortieren und schon hast du eine komfortable Bildergalerie. Außerdem: Woher soll dein Skript wissen, wann die Bilderserie zu Ende ist? Du müsstest dann ja immer bis 999.jpg gehen!
Gutes Argument. Ich habe das Problem so gelöst, dass mit is_file überprüft wird, ob eine nächste Datei vorhanden ist. Ist dies nicht der Fall, wird das erste Bild geladen und der Spaß geginnt von vorn. Und das funzt auch.
Aber du hast Recht, das Script wird von Lehrern betreut, die unter Umständen kein Fachwissen besitzen. Wenn sie nachträglich ein Bild löschen, obwohl es sorgfältig mit IrfanView durchnummeriert wurde, dann bricht alles zusammen. Ich werde es nach deinem Ansatz nochmal überarbeiten.