php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 18-08-2003, 20:24
Benji
 Senior Member
Links : Onlinestatus : Benji ist offline
Registriert seit: Jun 2003
Beiträge: 574
Benji ist zur Zeit noch ein unbeschriebenes Blatt
Standard Probleme FOR-Schleife

Hallo,

ich habe einige Probleme mit meiner FOR-Schleife. Hier ein Auszug:

$Anzahl=2;
$maximum = 2;
$minimum = 0;

for( $i = $minimum ; $i < ($minimum + $Anzahl) ; $i++ )
{
$kdnr = $liste[$i]['kdnr'];
$inhaber_nachname = $liste[$i]['inhaber_nachname'];
echo "<br>";
echo "Kdnr: $kdnr";
}

Mein Problem ist folgendes. Wenn ich insgesamt 3 Datensätze habe, und möchte 2 pro Seite ausgeben, dann werden auf der 1.Seite 2 Datensätze ausgegeben. Das ist soweit richtig. Auf der 2.Seite wo der 3.Datensatz dargestellt wird, wird noch zusätzlich ein 4. leer Datensatz angezeigt. Ich möchte, dass auf der 2.Seite nur der 3.Datensatz angezeigt wird, mehr nicht. Wieso? Ich kann den Fehler in der FOR-Schleife nicht finden. Vielleicht könnt ihr mir ja weiter helfen.

Ich wäre euch sehr dankbar!

Gruss
Benji
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 18-08-2003, 20:30
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

drei datensätze => indizes von 0 bis 2

du zählst aber von 0 bis 3
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #3 (permalink)  
Alt 18-08-2003, 20:33
Benji
 Senior Member
Links : Onlinestatus : Benji ist offline
Registriert seit: Jun 2003
Beiträge: 574
Benji ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wieso bis 3? Könntest du mir das bitte etwas genauer erläutern?
Mit Zitat antworten
  #4 (permalink)  
Alt 18-08-2003, 20:36
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

sorry verlesen

du zählst natürlich von 0 solange hoch wie der zähler kleiner als 2 is, also von 0 - 1
=> schleife wird zweimal durchlaufen

das machst du aber immer, ich seh nirgends, dass du die größe des arrays berücksichtigst
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #5 (permalink)  
Alt 18-08-2003, 20:44
Benji
 Senior Member
Links : Onlinestatus : Benji ist offline
Registriert seit: Jun 2003
Beiträge: 574
Benji ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wie muss ich denn die Schleife umschreiben, damit die korrekte Anzahl der Datensätze angezeigt wird?
Mit Zitat antworten
  #6 (permalink)  
Alt 18-08-2003, 20:57
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

kommt drauf an was in $liste drinsteht, aber prinzipiell verkehrt wäre sowas nicht:
PHP-Code:
$max=min(count($liste), ($minimum+$anzahl));

for (
$i=0;$i<$max;$i++) 
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #7 (permalink)  
Alt 18-08-2003, 21:03
Payne_of_Death
 Master
Links : Onlinestatus : Payne_of_Death ist offline
Registriert seit: Dec 2002
Ort: Folterkeller Nr. 18
Beiträge: 2.953
Payne_of_Death ist zur Zeit noch ein unbeschriebenes Blatt
Payne_of_Death eine Nachricht über ICQ schicken Payne_of_Death eine Nachricht über AIM schicken Payne_of_Death eine Nachricht über Yahoo! schicken
Standard

mach das nach diesem Prinzip (nicht 1:1 übernehmen)

1.) Ermittele die Größe des Arrays
2.) Leite anhand dieser Infos deine Schleifenlaufzeit ab.


PHP-Code:
 $seiten ceil($menge $Anzahl);
  if ( !
$z )
  
$z 1;

$maximum $s $Anzahl;
$minimum $maximum $Anzahl
Ich habe hierzu schon mal ein Tut geschrieben in den CodeSchnippseln....

Angenommen du hast eine Anzahl von 2 und eine Menge an Datensätzen im Array 5
dann bekommst du rechnerisch 2,5 -> es wird aufgerundet also 3. Stimm auch

$s ist deine derzeitige Seite wo du übergibst z.B. Seite 2

Deine For(); musst du dann auf das ganze hier umschreiben dann springt sie da rein wo sie soll.

Beispiel weitergeführt.......

$maximum=2+2
$maximum=4
$minimum=4-2
$minimum=2

von 2 bis 4.


Dann musst du nur noch die letzte Position abfangen
$maximum=6
$minimum=4
-> 2 Datensätze wo es aber nur noch einen gibt.......

Schau mal ins codeschnippsel vorbei
__________________
MfG Payne_of_Death

Manual(s): <-| PHP | MySQL | SELFHTML |->
Merke:
Du brauchst das Rad nicht neu erfinden ! <-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

Murphy`s Importanst LAWS
Jede Lösung bringt nur neue Probleme
Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
In jedem kleinen Problem steckt ein großes, das gern raus moechte.
Mit Zitat antworten
  #8 (permalink)  
Alt 18-08-2003, 21:06
Benji
 Senior Member
Links : Onlinestatus : Benji ist offline
Registriert seit: Jun 2003
Beiträge: 574
Benji ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das hat auch nicht geklappt. Auf der 1.Seite werden zwar die beiden Datensätze dargestellt, aber auf der 2.Seite werden dann alle 3 angezeigt. Da stimmt die FOR Schleife immer noch nicht.
Mit Zitat antworten
  #9 (permalink)  
Alt 18-08-2003, 21:07
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

schau dir mal das von pod an

mein snippet sorgtn ur dafür, dass du das richtige ende erwsicht, den richitgen anfang musst du ja auch noch angeben
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #10 (permalink)  
Alt 18-08-2003, 21:32
Benji
 Senior Member
Links : Onlinestatus : Benji ist offline
Registriert seit: Jun 2003
Beiträge: 574
Benji ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hier ein Auszug aus meinem Code:

$Abzahl = 2;
$liste = array();
if($obj = mysql_query("SELECT * FROM dhs_branchenbuch_spezialeintrag WHERE linkverzeichnis=1"))
{
while($row = mysql_fetch_assoc($obj))
{
array_push($liste,$row);
}
}

$menge = 3;
$seiten = ceil($menge / $Anzahl);

if ( !$z )
$z = 1;

$maximum = $z * $Anzahl;
$minimum = $maximum - $Anzahl;

If ($menge > 0)
{
for( $i = $minimum ; $i < ($maximum) ; $i++ )
{
$kdnr = $liste[$i]['kdnr'];
echo "Kdnr: $kdnr";
}
}

If ($menge > $Anzahl)
{
echo "<b><center>";
$vor = $z - 1; // Gibt einen Statuswert ab der sagt ob es noch ältere Einträge gibt.
$next = $z + 1; // Gibt einen Statuswert ab ob es noch weitere gibt.

If ($vor != 0 )
echo "<a href=\"anzahl_seiten1.php?z=$vor\">";
If ($vor == 0)
{
echo "<span class=\"links_inaktiv\"><strike>Zurück</strike></span>";
}
else
{
echo "<span class=\"links_normal\">Zurück</span>";
}
If ($vor !=0) echo "</a>";
echo " | ";
If ($next <= $seiten)
echo "<a href=\"anzahl_seiten1.php?z=$next\">";
If ($next > $seiten)
{
echo "<span class=\"links_inaktiv\"><strike>Vor</strike></span>";
}
else
{
echo "<span class=\"links_normal\">Vor</span>";
}
If ($next <=$seiten) echo "</a>";
echo"</b></center><P>";
}


Mit diesem Skript werden immer noch 4 statt 3 Datensätze verteilt auf 2 Seiten angezeigt.
Mit Zitat antworten
  #11 (permalink)  
Alt 18-08-2003, 21:41
Payne_of_Death
 Master
Links : Onlinestatus : Payne_of_Death ist offline
Registriert seit: Dec 2002
Ort: Folterkeller Nr. 18
Beiträge: 2.953
Payne_of_Death ist zur Zeit noch ein unbeschriebenes Blatt
Payne_of_Death eine Nachricht über ICQ schicken Payne_of_Death eine Nachricht über AIM schicken Payne_of_Death eine Nachricht über Yahoo! schicken
Standard

Gleich ein Fehler aufgefallen:

1.) keine Forum PHP-Tags
2.)
Zitat:
$Abzahl = 2;
heisst wohl net $Anzahl oder?

3.) Den Thread zu Ende lesen, da steht was von aufgrund bestimmter Konstellationen zwischen $Anzahl und Datensatzmenge kann es zu Problemen kommen.
Daher sehe ich auch kein break


Frage ist der 4.Datensatz ein leerer?
__________________
MfG Payne_of_Death

Manual(s): <-| PHP | MySQL | SELFHTML |->
Merke:
Du brauchst das Rad nicht neu erfinden ! <-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

Murphy`s Importanst LAWS
Jede Lösung bringt nur neue Probleme
Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
In jedem kleinen Problem steckt ein großes, das gern raus moechte.
Mit Zitat antworten
  #12 (permalink)  
Alt 18-08-2003, 21:45
Benji
 Senior Member
Links : Onlinestatus : Benji ist offline
Registriert seit: Jun 2003
Beiträge: 574
Benji ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Sorry hab mich bei $anzahl verschrieben. Natürlich soll es $anzahl heissen.

Und der 4.Datensatz ist bei mir leer.
Mit Zitat antworten
  #13 (permalink)  
Alt 18-08-2003, 21:52
Payne_of_Death
 Master
Links : Onlinestatus : Payne_of_Death ist offline
Registriert seit: Dec 2002
Ort: Folterkeller Nr. 18
Beiträge: 2.953
Payne_of_Death ist zur Zeit noch ein unbeschriebenes Blatt
Payne_of_Death eine Nachricht über ICQ schicken Payne_of_Death eine Nachricht über AIM schicken Payne_of_Death eine Nachricht über Yahoo! schicken
Standard

Geh noch mal in den Thread bei den CodeSchnippsels und schau dir den Beitrag von Happy den Beitrag genauer an, dann dürfte das nicht mehr vorkommen.

Du musst eben nur noch bedenken das aufgrund der Rundung und bestimmtes Zahlenkonstellationen eine höhere Differenz gibt als tatsächlich vorhanden ist, das bedeutet es muss vorab abgefangen werden indem die For(); geclosed wird.
__________________
MfG Payne_of_Death

Manual(s): <-| PHP | MySQL | SELFHTML |->
Merke:
Du brauchst das Rad nicht neu erfinden ! <-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

Murphy`s Importanst LAWS
Jede Lösung bringt nur neue Probleme
Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
In jedem kleinen Problem steckt ein großes, das gern raus moechte.
Mit Zitat antworten
  #14 (permalink)  
Alt 18-08-2003, 21:57
Benji
 Senior Member
Links : Onlinestatus : Benji ist offline
Registriert seit: Jun 2003
Beiträge: 574
Benji ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich habe versucht die Beiträge von Happy auswendig zu machen. Leider ohne Erfolg. Könntest du mir bitte den Link geben? Wie meinst du das mit dem Abfangen der Schleife?
Mit Zitat antworten
  #15 (permalink)  
Alt 18-08-2003, 22:02
Payne_of_Death
 Master
Links : Onlinestatus : Payne_of_Death ist offline
Registriert seit: Dec 2002
Ort: Folterkeller Nr. 18
Beiträge: 2.953
Payne_of_Death ist zur Zeit noch ein unbeschriebenes Blatt
Payne_of_Death eine Nachricht über ICQ schicken Payne_of_Death eine Nachricht über AIM schicken Payne_of_Death eine Nachricht über Yahoo! schicken
Standard

Beitrag von mr.happyiness

break = kickt bzw. beendet eine Schleife
dazu noch eine Bedingung und es müsste klappen.

Ich denke das von Happy müsste hinhauen, ansonsten selber logisch drüber nachdenken.

Nachtrag: Funktioniert todsicher, gerade mal nachgehakt. Es würde sogar reichen das >= durch ein == zu ersetzen. Da letzterer Fall so eh nicht eintreten kan

Gruß
__________________
MfG Payne_of_Death

Manual(s): <-| PHP | MySQL | SELFHTML |->
Merke:
Du brauchst das Rad nicht neu erfinden ! <-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

Murphy`s Importanst LAWS
Jede Lösung bringt nur neue Probleme
Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
In jedem kleinen Problem steckt ein großes, das gern raus moechte.

Geändert von Payne_of_Death (18-08-2003 um 22:13 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

SMT

Server Monitoring & Management Tool Das SMT wurde von einem Administrator für Administratoren entwickelt, es vereinfacht den Alltag in der klassischen Administration und Verwaltung. Mit dem SMT kannst Du alle Deine Server & Dienste verwalten und überwach

04.09.2020 palle_1977 | Kategorie: PHP
numaeks Web-Farbmixer

Die RGB-Farben lassen sich hier auf unterschiedliche Weise mischen. Zur Einstellung werden auch die Dreh- und Schieberegler mit Canvas verwendet. Gespeichert werden die Farben in einem Cookie.

04.09.2020 numaek | Kategorie: JAVASCRIPT/ Tools
phplinX-Erotikportal 4 ansehen phplinX-Erotikportal 4

Erweiterbares Portal speziell für Erotik mit den Modulen Webkatalog, Bannermanagement und Kleinanzeigenmarkt. Sämtliche Module können über einen einzigen Adminbereich verwaltet werden.

18.06.2020 Cosinus14 | Kategorie: PHP/ Anzeigenmarkt
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:35 Uhr.