Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „PHP: immer nach 4 Spalten eine neue Zeile einfügen“

Stefan

Administrator

Teammitglied
Ich möchte in einer Tabelle immer nach 4 Spalten eine neue Zeile einfügen, wie kann ich das per While-Schleife am besten machen?

[php:1:7228942a15]
echo "<table border=\"0\" cellpadding=\"5\" width=\"100%\">";

$anzahl =1;
while ($row_programme = $db->sql_fetchrow($programme)) {

if ($anzahl == 4 or $anzahl == 8 or $anzahl == 12)
{$umbruch = "<tr>";
$umbruchende = "</tr>";
} else
{$umbruch = "";
$umbruchende = "";}

$programmname = $row_programme['topicname'.$sprache];
echo "$umbruch<td>
$anzahl<a href=\"modules.php?name=$module_name&topicid=$row_programme[topicid]&programmname=$programmname\"> $row_programme[topicname]
<img src=\"images/topics/$row_programme[topicimage]\" border=\"0\"></td><td>$row_programme[topictext]</td>$umbruchende";
$anzahl++;
}
echo "</table>";
[/php:1:7228942a15]

irgendwie geht das aber nicht richtig, weil er immer schon nach der 3 spalte eine neue zeile einfügt und dann wieder eine neue zeile und dann wieder 3 neue spalten usw...?

wo ist mein denkfehler????
 

Christian

verpeilt & verschallert

dein denkfehler ist hier:
du hast als startwert 1 angegeben. der muss aber null sein. denn 1+4 = 5
und 0+4=4

also wenn der startwert 1 ist, dann braucht er nur 3 reihen, bis es voll ist!
 
W

webdesign

Guest

Hi Stefan,

schau dir das mal an:

Code:
<?
			$anzahl = 0;
			$rest = $topic_count - 4;
			if ($anzahl == $start)
			{
				echo "Seite: [[b]<font color='#000000' size='1'> 1 </font>[/b]]";
			}
			else
			{
				echo "Seite: [";
				while ($rest > 0)
				{
					$rest-=4;
					$anzahl++;
					if ($anzahl * 4 == $start)
					{
						echo "[b]<font color='#000000' size='1'> ";
						echo $anzahl + 1;
						echo " </font>[/b]]";
						$anzahl++;
					}
					else
					{
						echo "";
					}
				}
			}
			?>

Grüße webdesign :wink:
 

Christian

verpeilt & verschallert

webdesign schrieb:
Hi Stefan,

schau dir das mal an:

Code:
<?
			$anzahl = 0;
			$rest = $topic_count - 4;
			if ($anzahl == $start)
			{
				echo "Seite: [[b]<font color='#000000' size='1'> 1 </font>[/b]]";
			}
			else
			{
				echo "Seite: [";
				while ($rest > 0)
				{
					$rest-=4;
					$anzahl++;
					if ($anzahl * 4 == $start)
					{
						echo "[b]<font color='#000000' size='1'> ";
						echo $anzahl + 1;
						echo " </font>[/b]]";
						$anzahl++;
					}
					else
					{
						echo "";
					}
				}
			}
			?>

Grüße webdesign :wink:
Ich will ja net zu aufdringlich sein, aber das isn bissl kompliziert, was Du da gerade machst, oder? Man muss ja aus einer Mücke net unbedingt nen Elefanten machen^^
Er muss einfach nur die Variable $anzahl gleich 0 setzen. gut ist.
 

saboger

Nicht mehr ganz neu hier

Fang mit $anzahl bei 1 zu zählen an in fussgesteuerter Schleife, frage im Code nach Ausgabe der Zeilen den 4-er-Modulo-Wert ab (Modulo = ganzzahliger Rest bei Division durch 4) und wenn der 0 ergibt, dann lass die Leerzeile ausgeben. Ich kenn den php-Operator für Modulo nicht, aber das ist, was Du brauchst.

In ASP sähe das so aus:
Code:
<%
FOR i = 1 TO maxAnzahlDatensätze
	Response.Write("<tr><td>" & meinInhalt & "</td></tr>")
	IF i MOD 4 = 0 THEN
		Response.Write("<tr><td>&</td></tr>")
	END IF
NEXT
%>

Das funzt im Test...

Grüße,

-Gernot
 

Stefan

Administrator

Teammitglied
so jetzt habe ich es:

[php:1:a715292626]echo "<div valign=center><table border=\"0\" cellpadding=\"5\" width=\"100%\">";

$anzahl =0;
while ($row_programme = $db->sql_fetchrow($programme)) {

if ($anzahl == 3 or $anzahl == 6 or $anzahl == 9 or $anzahl == 12 or $anzahl == 15 or $anzahl == 18 or $anzahl == 21 or $anzahl == 24 or $anzahl == 27 or $anzahl == 30)
{$umbruch = "<tr><td></td><td></td><td></td></tr>";
} else
{$umbruch = "";
}

$programmname = $row_programme['topicname'.$sprache];
echo "$umbruch<td>
<a href=\"modules.php?name=$module_name&topicid=$row_programme[topicid]&programmname=$programmname\"> $row_programme[topicname]
<img src=\"images/topics/$row_programme[topicimage]\" border=\"0\"></td><td>$row_programme[topictext]</td>";
$anzahl++;
}
echo "</table></div>";[/php:1:a715292626]

der fehler war, das ich ja gleich <tr> und zum schuß in einer zeile wieder </tr> gemacht habe, das geht so nicht.

vielen dank für eure hilfe!!!!!!!!!
 

saboger

Nicht mehr ganz neu hier

mefisto schrieb:
ich will nicht oberklug tun aber
if ($anzahl == 3 or $anzahl == 6 or $anzahl == 9 or $anzahl == 12 or $anzahl == 15 or $anzahl == 18 or $anzahl == 21 or $anzahl == 24 or $anzahl == 27 or $anzahl == 30)

wuerde ich an deiner stelle auf jeden fall mit einem
if($anzahl%3=0)
ersetzen
schon allein wenn deine zaehlervar mal groeßer wird als 30....
..und es ist 1000 mal schneller als deine if-konstruktion :wink:

Volle Zustimmung!

-Gernot
 

saboger

Nicht mehr ganz neu hier

Stefan schrieb:
funktioniert super. könntest du mir trotzdem genau erklären was der code macht, verstehe deine obere anleitung nicht so ganz.

Modulo:

Allgemein: Der Modulo Operator (ich schreib ihn hier mal MOD) liefert den ganzzahligen Rest einer Division. So, wie wir alle das Dividieren in der Grundschule gelernt hatten... Zahl geteilt durch Zahl ist Zahl + Rest

In Deinem Fall:

Zeile 1: 1 MOD 4 = 0 Rest 1 (lies: 1 geteilt durch 4 gleich 0, Rest 1)
Zeile 2: 2 MOD 4 = 0 Rest 2
Zeile 3: 3 MOD 4 = 0 Rest 3
Zeile 4: 4 MOD 4 = 1 Rest 0 (lies: 4 geteilt durch 4 gleich 1, Rest 0)
Zeile 5: 5 MOD 4 = 1 Rest 1 (lies: 5 geteilt durch 4 gleich 1, Rest 1)
Zeile 6: 6 MOD 4 = 1 Rest 2
Zeile 7: 7 MOD 4 = 1 Rest 3
Zeile 8: 8 MOD 4 = 2 Rest 0
Zeile 9: 9 MOD 4 = 2 Rest 1
Zeile 10: 10 MOD 4 = 2 Rest 2
Zeile 11: 11 MOD 4 = 2 Rest 3
Zeile 12: 12 MOD 4 = 3 Rest 0
Zeile 13: 13 MOD 4 = 3 Rest 1
Zeile 14: 14 MOD 4 = 3 Rest 2
Zeile 15: 15 MOD 4 = 3 Rest 3
Zeile 16: 16 MOD 4 = 4 Rest 0
Zeile 17: 17 MOD 4 = 4 Rest 1
Zeile 18: 18 MOD 4 = 4 Rest 2
Zeile 19: 19 MOD 4 = 4 Rest 3
Zeile 20: 20 MOD 4 = 5 Rest 0
Zeile 21: 21 MOD 4 = 5 Rest 1
Zeile 22: 22 MOD 4 = 5 Rest 2
Zeile 23: 23 MOD 4 = 5 Rest 3
Zeile 24: 24 MOD 4 = 6 Rest 0
Zeile 25: 25 MOD 4 = 6 Rest 1
Zeile 26: 26 MOD 4 = 6 Rest 2
Zeile 27: 27 MOD 4 = 6 Rest 3
Zeile 28: 28 MOD 4 = 7 Rest 0
...
Schema ist jetzt klar, oder?


Du siehst also, daß in jeder vierten Zeile das Ergebnis der Modulo-Operation 0 ergibt - damit hast Du Dein Kiriterium, um dann eine Leerzeile zu setzen.

Ähnlich kannst Du vorgehen, wenn Du in einer Liste alternierend jede zweite Zeile mit einer anderen Farbe hinterlegen möchtest - einfach i MOD 2 auf 0 oder 1 prüfen und entsprechend die Farbe setzen. i MOD 2 liefert übrigens auch die Aussage, ob eine Zahl gerade oder ungerade ist (i MOD 2 = 0 --> gerade).

HTH,

-Gernot
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.158
Beiträge
2.581.869
Mitglieder
67.224
Neuestes Mitglied
Aliyah79
Oben