Auswahl in Schleife treffen
Hi, hoffe ihr könnt mir helfen.
ich habe eine Pdf Vorlage (Kostenvoranschlag) die aus min. 3 Seiten besteht, die ich mit posten befüllen soll.
Seite 1 kann 5 posten aufnehmen, Seite 2 kann 7 posten aufnehmen und Seite 3 ist nur die Zusammenfassung aller posten.
Wenn mehr als 12 posten sein sollten wird eine neue Seite 2 eingefügt. Bsp. 13 Posten .... S1 + S2 +S2 + S3.
Seite 1 kann ich mit 5 posten füllen dann kommt die Schleife zu Seite 2 Leer und Seite 3 ist wieder Ok.
nach etlichen versuchen bin ich dann von if und elseif auf switch gekommen (jetzt denk blokade)
Bitte um Hilfe
ich habe eine Pdf Vorlage (Kostenvoranschlag) die aus min. 3 Seiten besteht, die ich mit posten befüllen soll.
Seite 1 kann 5 posten aufnehmen, Seite 2 kann 7 posten aufnehmen und Seite 3 ist nur die Zusammenfassung aller posten.
Wenn mehr als 12 posten sein sollten wird eine neue Seite 2 eingefügt. Bsp. 13 Posten .... S1 + S2 +S2 + S3.
Seite 1 kann ich mit 5 posten füllen dann kommt die Schleife zu Seite 2 Leer und Seite 3 ist wieder Ok.
nach etlichen versuchen bin ich dann von if und elseif auf switch gekommen (jetzt denk blokade)
Bitte um Hilfe
$rownrtemp=$rownr;
}
if ($rownr>=5) {
if ($rownr==$rownrtemp) { //Bedingung erfüllt $rownr=5
$rownrtemp=$rownrtemp+7;
$seitennummer=$seitennummer+1;
}
if ($rownr==$rownr+1) {
//pdf zeug...tu was
}
if ($rownr==$rownr+2) {
//pdf zeug...tu was
}
if ($rownr==$rownr+3) {
//pdf zeug...tu was
}
if ($rownr==$rownr+4) {
//pdf zeug...tu was
}
if ($rownr==$rownr+5) {
//pdf zeug...tu was
}
if ($rownr==$rownr+6) {
//pdf zeug...tu was.
}
if ($rownr==$rownr+7) {
//pdf zeug...tu was.
}
$rownr++;
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 375408
Url: https://administrator.de/forum/auswahl-in-schleife-treffen-375408.html
Ausgedruckt am: 23.12.2024 um 16:12 Uhr
15 Kommentare
Neuester Kommentar
Moin,
was Du da treibst, weiß ich nicht, aber
Wo kommt $rownrtemp her? Was steht da drin? Und wo ist die im topic erwähnte Schleife? Ein wenig mehr Code wäre nicht schlecht.
Nö, es sei denn in $rownrtemp steht 5.
Warum?
Diese Bedingung ist niemals wahr. NIEMALS! Denn, wenn jetzt in $rownr eine 5 steht, dann steht da aufgelöst:
Und das ist nie wahr. Egal, was in $rownr steht. Es kann nie gleich $rownr+1 sein. Das gilt auch für alle folgenden Vergleiche.
Liebe Grüße
Erik
was Du da treibst, weiß ich nicht, aber
Wo kommt $rownrtemp her? Was steht da drin? Und wo ist die im topic erwähnte Schleife? Ein wenig mehr Code wäre nicht schlecht.
if ($rownr>=5) {
> if ($rownr==$rownrtemp) { //Bedingung erfüllt $rownr=5
Nö, es sei denn in $rownrtemp steht 5.
$rownrtemp=$rownrtemp+7;
> $seitennummer=$seitennummer+1;
> }
>
Warum?
if ($rownr==$rownr+1) {
> //pdf zeug...tu was
> }
Diese Bedingung ist niemals wahr. NIEMALS! Denn, wenn jetzt in $rownr eine 5 steht, dann steht da aufgelöst:
if(5==6)
Und das ist nie wahr. Egal, was in $rownr steht. Es kann nie gleich $rownr+1 sein. Das gilt auch für alle folgenden Vergleiche.
Liebe Grüße
Erik
Lass das mit den ganzen IF-Vergleichen, das kannst du viel einfacher lösen indem du folgendes machst:
- Von deiner Gesamtanzahl an Seiten ziehst du 5 ab und ermittelst so ob du Seite 2 brauchst oder nicht
- Hast du im ersten Ergebnis >5 ermittelt dann teilst du nun dieses Ergebnis durch 7 und nimmst davon das "ceiling" http://php.net/manual/de/function.ceil.php --> ceil(Ergebnis/7)
- Dieses Ergebnis ist nun die Anzahl wie oft du deine Seite 2 erzeugen musst. Damit fertigst du eine for Schleife an, fertig ist die Pappe.
Hallo dax4fun,
decathlons Ansatz erscheint mir aber auch deutlich sinniger als Deiner.
Wenn ich Deiner Aufforderung nachkomme, jetzt "blokade" zu denken, denke ich Du meintest Denkblockade und halte drei Fehler in einem Wort für etwas zu üppig.
@136166
Gruß Frank
Zitat von @dax4fun:
nach etlichen versuchen bin ich dann von if und elseif auf switch gekommen (jetzt denk blokade)
warum verwendest Du dann switch nicht oder hast Du uns veralteten Code gepostet?nach etlichen versuchen bin ich dann von if und elseif auf switch gekommen (jetzt denk blokade)
decathlons Ansatz erscheint mir aber auch deutlich sinniger als Deiner.
Wenn ich Deiner Aufforderung nachkomme, jetzt "blokade" zu denken, denke ich Du meintest Denkblockade und halte drei Fehler in einem Wort für etwas zu üppig.
@136166
Zitat von @136166:
Hast du im ersten Ergebnis >5 ermittelt dann teilst du nun dieses Ergebnis durch 7 und nimmst davon das "ceiling"
Vor dem Teilen durch 7 müssen aber zunächst die 5 (der ersten Seite) abgezogen werden.Hast du im ersten Ergebnis >5 ermittelt dann teilst du nun dieses Ergebnis durch 7 und nimmst davon das "ceiling"
Gruß Frank
Zitat von @Pedant:
Vor dem Teilen durch 7 müssen aber zunächst die 5 (der ersten Seite) abgezogen werden.
JeppVor dem Teilen durch 7 müssen aber zunächst die 5 (der ersten Seite) abgezogen werden.
Hallo dax4fun,
Wie Erik schon schrieb:
Wie soll denn jemals
Nur
Alle anderen Varianten ( + 1 oder mehr) sind niemals wahr, egal wie lange irgendeine Schleife durchlaufen wird.
Gruß Frank
Wie Erik schon schrieb:
Wie soll denn jemals
5 == 6
wahr werden?Nur
$rownr == $rownr + 0
wäre (immer) wahr.Alle anderen Varianten ( + 1 oder mehr) sind niemals wahr, egal wie lange irgendeine Schleife durchlaufen wird.
Gruß Frank
Beispiel schnell zusammengeschrotet:
$intPages = 22;
$itemsOnPage1 = 5;
$itemsOnPage2 = 7;
if ($intPages > $itemsOnPage1){
$full = floor(($intPages - $itemsOnPage1) / $itemsOnPage2) + 1;
$rest = ($intPages - $itemsOnPage1) % $itemsOnPage2;
echo "Items on Page 1<br />";
for ($i = 0; $i < $itemsOnPage1; $i++){
echo "item $i<br />";
}
for ($p = 0; $p < $full;$p++){
if ($p < $full-1){
echo "Items on Pagetemplate 2 ($p)<br />";
for ($i = ($p * $itemsOnPage2 + $itemsOnPage1); $i < ($p * $itemsOnPage2) + $itemsOnPage2 + $itemsOnPage1; $i++){
echo "Item $i<br />";
}
}else{
if ($rest > 0 ){
echo "Items on Pagetemplate 2 ($p)<br />";
for ($i = ($p * $itemsOnPage2 + $itemsOnPage1); $i < ($p * $itemsOnPage2) + $itemsOnPage1 + $rest; $i++){
echo "Item $i<br />";
}
}
}
}
}else{
if ($intPages > 0){
echo "Items on Page 1<br />";
for ($i = 0; $i < $intPages; $i++){
echo "item $i<br />";
}
}
}
Hallo decathlon,
Dein Code funktioniert bei mir.
Zwischen Zeile 3 und 4 sollte noch ein Block eingefügt werden, damit auch eine Ausgabe erfolgt, falls keine Seite 2 benötigt wird.
Gruß Frank
Dein Code funktioniert bei mir.
Zwischen Zeile 3 und 4 sollte noch ein Block eingefügt werden, damit auch eine Ausgabe erfolgt, falls keine Seite 2 benötigt wird.
if ($intPages <= $itemsOnPage1){
echo "Items on Page 1<br />";
for ($i = 0; $i < $itemsOnPage1; $i++){
echo "item $i<br />";
}
}
$intPages
würde ich lieber $itemsTotal
oder so nennen, da es sich nicht um die Seitenanzahl handelt, sondern um die Gesamtmenge der Items (Posten), die es auf die Seiten zu verteilen gilt.Gruß Frank
Hallo dax4fun,
ja und wenn sie mit dem Wert 4 durchlaufen wird, wird sie zweimal erhöht.
Siehe Dein Code mit meinem // Kommentar:
Falls Du bei Deinem Ansatz bleiben möchtest, statt decathlons funktionierenden Code zu verwenden...
Die Erhöhung solltest besser nur einmal und zwar ans Schleifenblock-Ende setzen.
Zusätzlich würde ich nicht
So hast Du eine nachvollziehbarere Entweder-oder-Unterscheidung und kannst Deine Anweisungen besser zuteilen und damit Fehler vermeiden.
Gruß Frank
ja und wenn sie mit dem Wert 4 durchlaufen wird, wird sie zweimal erhöht.
Siehe Dein Code mit meinem // Kommentar:
$rownr=1;
while($row = mysqli_fetch_object($ergebnis)) {
...
if ($rownr<=5) { // 4 <= 5 => wahr
...
$rownr++; // 4++ => 5
}
if ($rownr>=5) { // 5 >= 5 => wahr
...
$rownr++; // 5++ => 6
}
}
Falls Du bei Deinem Ansatz bleiben möchtest, statt decathlons funktionierenden Code zu verwenden...
Die Erhöhung solltest besser nur einmal und zwar ans Schleifenblock-Ende setzen.
Zusätzlich würde ich nicht
$rownr<=5
und $rownr>=5
verwenden, sondern$rownr<=5
und $rownr>5
, damit entweder der erste Block oder der zweite Block ausgeführt wird.So hast Du eine nachvollziehbarere Entweder-oder-Unterscheidung und kannst Deine Anweisungen besser zuteilen und damit Fehler vermeiden.
$rownr=1;
while($row = mysqli_fetch_object($ergebnis)) {
...
if ($rownr<=5) { // 4 <= 5 => wahr
...
}
if ($rownr>5) { // 4 > 5 => falsch
...
}
$rownr++; // 4++ => 5
}
Gruß Frank