for schleifen verständniss Problem
Jonny F.
- php
0 Steel0 suit0 Peter Pan0 Gunnar Bittersmann0 suit
1 EKKi0 Jonny F.
0 Jonny F.0 Vinzenz Mai0 Jonny F.
Hallo,
ich verstehe es nicht, ich versuche mir eine For-Schleife zu Basteln die eine Blätternausgabe erstellen soll.
so
$seiten=5;
for($i = 0; $i == $seiten ; $i = $i + 1) {
echo $i;
}
Die Ausgabe müsste dann doch jetzt so aussehen
12345 oder lieg ich da falsch...
Hab grad voll den druchhänger
Gruß Jonny F.
Moinsen!
$seiten=5;
for($i = 0; $i == $seiten ; $i = $i + 1) {
echo $i;
}
>
> Die Ausgabe müsste dann doch jetzt so aussehen
>
> 12345 oder lieg ich da falsch...
Ja. Du hast recht!
Du liegst falsch.
$i == $seiten ist wann true? Ist das bei Beginn der Schleife der Fall?
Deine Schleife erfuellt Die Bedingung zum Loopen sofort nicht mehr.
--
"Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
- T. Pratchett
$seiten=5;
for($i = 0; $i == $seiten ; $i = $i + 1) {
echo $i;
}
>
> Die Ausgabe müsste dann doch jetzt so aussehen
>
> 12345 oder lieg ich da falsch...
Ja, du liegst falsch. Die Ausgabe müsste ein Leerstring sein da `$i == seiten;`{:.language-php} niemals zutreffen wird - und auch wenn du diesen fehler korrigierst, wird die Ausgabe nicht richtig sein.
btw: $i = $i + 1 lässt sich mit $i++ abkürzen.
> Hab grad voll den druchhänger
Du hast auch vergessen zu erwähnen, was aktuell bei deinem Code ausgegeben wird (nicht, dass das nicht offensichtlich wäre - aber du bist lange genug dabei um zu wissen, dass eine ordentliche Fehlerbeschreibung bei der Lösungsfindung sehr sehr hilfreich sein kann - auch für dich selbst).
btw: $i = $i + 1 lässt sich mit $i++ abkürzen.
ja des weiß ich, ich habe es nur so hingeschrieben weil ich gedacht hab das der PHP-Mensch es nicht akzeptiert. :D
Trotzdem danke für die Aufklärung.
Gruß Jonny F.
ja des weiß ich, ich habe es nur so hingeschrieben weil ich gedacht hab das der PHP-Mensch es nicht akzeptiert. :D
Der PHP-Mensch (wenn du damit den PHP-Interpreter meinst) ist sogar mit '++$i', '$i ++' oder '++ $i' zufrieden.
Hi!
$seiten=5;
for($i = 0; $i == $seiten ; $i = $i + 1) {
echo $i;
}
>
> Die Ausgabe müsste dann doch jetzt so aussehen
Die Bedingung in der Mitte muß zu true evaluieren, damit die Schleife fortgeführt wird - dort steht $i==5, deshalb gibt Dein Code nur eine 0 aus.
off:PP
--
"You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
Die Bedingung in der Mitte muß zu true evaluieren, damit die Schleife fortgeführt wird - dort steht $i==5, deshalb gibt Dein Code nur eine 0 aus.
Nein, eine 0 darf er nicht ausgeben - die Prüfung findet bei einer for-Schleife stehts VOR der Ausführung statt.
Etwas ähnliches wie do-while im sinne einer for-Schleife gibt es afaik in php nicht.
Hi!
Die Bedingung in der Mitte muß zu true evaluieren, damit die Schleife fortgeführt wird - dort steht $i==5, deshalb gibt Dein Code nur eine 0 aus.
Nein, eine 0 darf er nicht ausgeben - die Prüfung findet bei einer for-Schleife stehts VOR der Ausführung statt.
Ja, du hast recht - ich habe es bereits korrigiert.
off:PP
Hallo,
Etwas ähnliches wie do-while im sinne einer for-Schleife gibt es afaik in php nicht.
Kann man bauen, z.B.:
for ($i = 1, $first = True; ($i < 5) || $first; $i++, $first = False) {
echo $i;
}
Freundliche Grüße
Vinzenz
Kann man bauen, z.B.:
Ja natürlich aber, aber ein fertige built-in Lösung für eine for-schleife mit nachheriger Prüfung gibt es nicht :)
Hi!
Etwas ähnliches wie do-while im sinne einer for-Schleife gibt es afaik in php nicht.
off:PP
Hi,
while verhält sich zu for wie do while zu ?
Wie do und anschliessendes for :-)
MfG ChrisB
Hi!
deshalb gibt Dein Code nur eine 0 aus.
<del>0</del><ins>Nichts</ins>
off:PP
@@Jonny F.:
nuqneH
for($i = 0; $i == $seiten ; $i = $i + 1)
Die Schleife wird nicht solange, bis der zweite Ausdruck wahr ist, ausgeführt; sondern sie wird, solange der zweite Ausdruck wahr ist, ausgeführt.
Du möchtest die Bedingung negieren.
Zum Hochzählen gibt es de Operator $i++
.
12345 oder lieg ich da falsch...
Du möchtest bei 1 anfangen zu zählen.
Qapla'
Du möchtest die Bedingung negieren.
Oder eine andere geeignete Bedingung wählen.
Mahlzeit Jonny F.,
for($i = 0; $i == $seiten ; $i = $i + 1) {
Ich würde es einfacher $i++
schreiben ...
Hab grad voll den druchhänger
Als Ergänzung zu Steels Erklärung:
In PHP (wie auch den meisten Sprachen mit C-Syntax) legst Du bei for mit dem ersten Ausdruck fest, was zu Beginn der Schleife (bzw. genauer: vor dem Starten der Schleife) passieren soll, mit dem zweiten Ausdruck legst Du fest, wielange die Schleife laufen soll, und mit dem dritten legst Du fest, was in jedem Schleifendurchgang passieren soll.
Dabei bedeutet der zweite Ausdruck mehr oder weniger umgangssprachlich "solange diese Bedingung erfüllt ist" (d.h. die Bedingung muss wahr sein, damit die Schleife durchlaufen wird) ... in Deinem Fall müsste es also $i <= $seiten
heißen.
In anderen Sprachen ist das anders - da wird bei for-Schleifen das Abbruchkriterium angegeben und die Schleife läuft solange, wie es noch nicht erreicht ist (d.h. die Bedingung muss falsch sein, damit die Schleife durchlaufen wird).
MfG,
EKKi
In anderen Sprachen ist das anders - da wird bei for-Schleifen das Abbruchkriterium angegeben und die Schleife läuft solange, wie es noch nicht erreicht ist (d.h. die Bedingung muss falsch sein, damit die Schleife durchlaufen wird).
stimmt :D war grad komplett in der falschen Sprache :D
danke jetzt funktioniert es auch.
Gruß Jonny F.
Hier ist mal die Rohfassung meiner Blätternschleife :D
$daten_pro_seite sind ist die Anzahl der Daten die angezeigt werdensollen
$datenanzahl ist die Gesamtanzahl der Daten
$aktseit ergibt sich in der Schleife
Die variablen Namen sind jetzt nicht wirklich gut, okey sie sind sch*** aber habs auf die schnelle gemacht, werd es noch bearbeiten und Designen dann Poste ich es nochmal.
$seiten= ceil($datenanzahl/$daten_pro_seite);
if(isset($_GET['aktseit'])){
$aktseiten=$_GET['aktseit'];
}
else{
$aktseiten=1;
}
$vorher=$aktseiten-1;
$nachher=$aktseiten+1;
$fortlaufende_nummer = 0;
// Die Schleife zeigt jeden X-ten ($daten_pro_seite) Datensatz mit einem Link an
for($zaehler = 0; $zaehler < $datenanzahl ; $zaehler = $zaehler + $daten_pro_seite) {
$fortlaufende_nummer++;
//Erste Seite, wenn nicht gerade ausgewählt ist
if($aktseiten!=1 && $fortlaufende_nummer==1){
echo "<a href=\"?seitenzahl=$zaehler&&aktseit=$fortlaufende_nummer\" style=\"font-size:10pt; font-family:Arial; \">Anfang</a>";
}
//Eine Seite zurück wenn Seite vorhanden
if($vorher == $fortlaufende_nummer && $aktseiten!=1){
echo "<a href=\"?seitenzahl=$zaehler&&aktseit=$fortlaufende_nummer\" style=\"font-size:10pt; font-family:Arial; \"> zurück </a>";
}
//Zeigt die aktuelle Seite an
if($aktseiten==$fortlaufende_nummer){
echo "<a style=\"font-size:10pt; font-family:Arial; font-weight:bold; \">$fortlaufende_nummer</a>";
}
//Eine Seite nach vorne, wenn vorhanden
if($nachher == $fortlaufende_nummer && $aktseiten!=$seiten){
echo "<a href=\"?seitenzahl=$zaehler&&aktseit=$fortlaufende_nummer\" style=\"font-size:10pt; font-family:Arial; \"> vor </a>";
}
//Letzte Seite, wenn nicht schon ausgewählt ist
if($fortlaufende_nummer==$seiten && $aktseiten!=$seiten ){
echo "<a href=\"?seitenzahl=$zaehler&&aktseit=$fortlaufende_nummer\" style=\"font-size:10pt; font-family:Arial; \">Ende</a>";
}
}
Danke für eure Hilfe
Gruß Jonny F.
Hallo Johnny,
Du bist doch auch in Perl unterwegs? Ist Dir der Taintmode ein Begriff?
# Übernimmst Du ungeprüft Daten von außen?
# Hier ja.
> $seiten= ceil($datenanzahl/$daten_pro_seite);
> if(isset($_GET['aktseit'])){
> $aktseiten=$_GET['aktseit'];
> }
> else{
> $aktseiten=1;
> }
> $vorher=$aktseiten-1;
> $nachher=$aktseiten+1;
jetzt hast Du schon drei Variablen, denen man nicht ansehen kann, dass sie ungeprüfte Inhalte von außen enthalten.
Warum nicht
$aktseiten = 1;
if (isset($_GET['aktseit'])) {
$aktseiten = [link:http://de.php.net/manual/de/function.intval.php@title=intval]($_GET['aktseit']);
}
# Du kannst nun sicher sein, dass $aktseiten eine Integer enthält.
# Frage: wie ist der zulässige Wertebereich für $aktseiten?
$vorher = $aktseiten - 1;
$nachher = $aktseiten + 1;
den Rest des Codes hab' ich mir nicht angeschaut.
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
Du bist doch auch in Perl unterwegs? Ist Dir der Taintmode ein Begriff?
Ja die Tademode ist mir ein Begriff.
jetzt hast Du schon drei Variablen, denen man nicht ansehen kann, dass sie ungeprüfte Inhalte von außen enthalten.
Ja mein Post ging ja nicht um Variablen verarbeiteung ect. sondern nur um die funktionalität, wie ich diese Blätternschleife zum laufe bringe natürlich wird jetzt noch alles safety gemacht :D
$aktseiten = 1;
if (isset($_GET['aktseit'])) {
$aktseiten = link:http://de.php.net/manual/de/function.intval.php@title=intval;
}Du kannst nun sicher sein, dass $aktseiten eine Integer enthält.
Frage: wie ist der zulässige Wertebereich für $aktseiten?
$vorher = $aktseiten - 1;
$nachher = $aktseiten + 1;
Vielen Dank dass du mich noch mal darauf aufmerksam gemacht hast des hätte ich jetzt nicht bedacht.
Gruß Jonny F.