WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   "pausa" en while-loop, och sen låta den fortsätta (https://www.wn.se/forum/showthread.php?t=1052732)

jonssondesign 2012-03-21 01:09

"pausa" en while-loop, och sen låta den fortsätta
 
Hejsan, jag sitter just nu och kodar min första sida i php och mysql, och har kommit en bit på vägen.

Jag har lärt mig allt på nätet, och kollat in en del tutorials, så mina kunskaper är inte de bästa..
Men jag ville göra en sida on my own, så jag lättare kan lära mig.

Jag tänkte jag skulle försöka mig på att skapa en webbshop (kanske lite överkurs, men det går bra hitils i alla fall.

Jag skulle dock vilja veta om det på något sätt går att lägga in en annons efter ett x antal rader.

exempel:


<ul>
<li>produkt 1</li>
<li>produkt 2</li>
<li>produkt 3</li>
<li>produkt 4</li>
<div>Annons</div>
<li>produkt 5</li>
<li>produkt 6</li>
<li>produkt 7</li>
<li>produkt 8</li>
</ul>

Förstår ni hur jag menar?

Jag använder mig av en vanlig while-loop för att lista produkterna.
Jag tänker mig att man på något sätt ska kunna stoppa loopen, utföra en kod (lägga in annonsen), och sen sätta igång loopen igen.

Eller om man kanske kan på något sätt kan räkna antalet <li>?

Kanske kan man använda sig av något annat?

Hoppas ni kan hjälpa mig, och om ni behöver veta mer så är det bara att säga till så fixar jag fram det begärda! :)

mvh,
Fredrik Jonsson

Jine 2012-03-21 01:32

Kod:

while($products as $product) {
  if($i == 5) {
      echo 'Annons!';
  } else {
      echo '<li>'.$product.'</li>';
  }
}

Alternativt kan du experimentera med modulus för att t.ex. visa en annons var N produkt.

jonny 2012-03-21 07:41

Lämpligen så räknar du antalet rader och kontrollerar om du är på rad X varvid du infogar annonsen.

Monkboll 2012-03-21 09:29

Skulle gjort precis som Jine föreslog.
Fast utan else satsen då så att den inte hoppar över 5an?

foks 2012-03-21 09:42

Citat:

Ursprungligen postat av Jine (Inlägg 20435525)
Kod:

while($products as $product) {
  if($i == 5) {
      echo 'Annons!';
  } else {
      echo '<li>'.$product.'</li>';
  }
}

Alternativt kan du experimentera med modulus för att t.ex. visa en annons var N produkt.

Glöm inte att lägga in $i++ någonstans. :)

jonssondesign 2012-03-21 10:08

Skulle någon vänlig själ vilja berätta för mig hur Jines kod fungerar? Vad ska variabeln "i" innehålla?

Jag kan skicka en pastebin kopia på min kod när jag kommer hem sen, så kan ni enklare bedömma om
Jine's kod är det bästa sättet. :)

Kekke 2012-03-21 10:32

Kod:

<?php
$i = 0;
while($row = mysql_fetch_array($result)) {
    if($i == 5) //Kolla om $i är 5 t.ex. i sådant fall skriv ut annons, $i är antal gånger loopen körts
        echo '<li>Annons</li>';
    //Skriv alltid ut varan
    echo '<li>' . $row['vara'] . '</li>';
   
    //Öka variabeln $i så att vi ser hur många gånger loopen har körts
    $i++;
}
?>


Monkboll 2012-03-21 10:33

Kör den så här borde den funka.
Eller hur ser din while loop ut?

$i = 0;
while($products as $product) {
if($i == 5) {
echo "<div>Annons</div>";
}
echo "<li>$product</li>";
$i++;
}

Fredrik-s 2012-03-21 11:50

Kan dra mitt strå till stacken i och förklara Monkboll's kod:

// Innan du påbörjar while-loopen definierar du en variabel till 0
$i = 0;
// Så länge det finns produkter att hämta ut så kör vi while satsen nedanför
while($products as $product) {
// Om variabel $i är lika med 5 så kör vi ut annonsen annars skippas denna if-sats eftersom uttrycket inte är sant
if($i == 5) {
echo "<div>Annons</div>";
}
// Vi skiver ut produkten
echo "<li>$product</li>";
// Nedan ökar vi $i variabeln med ett (++ betyder öka med ett) du skulle lika gärna kunna skriva $i = $i + 1; Men det blir mindre kod att skriva det som nedanför.
$i++;
}

Varje gång vi har kört ett varv i whilesatsen så kommer $i att öka med ett. Första varvet är $i 0, nästa varv är $i 1, därefter är $i 2 osv. När $i till slut kommer att bli 5 så blir det uttrycket vi har skrivit i if-satsen sant (eftersom $i == 5)och då kommer "<div>Annons</div>" skrivas ut.

tartareandesire 2012-03-21 12:18

Den överdrivna kommenteringen Fredrik-s använde ovan är då endast menad för din skull och inte lämpad till "riktig kod", bara så du vet :)

Variabeln $i kallas för iterator vilket är en variabel som används endast för att traversera genom någon form av behållare. Därav att du oftast ser bokstaven 'i' användas till detta. Du stoppar aldrig upp loopen utan gör bara olika saker inne i den beroende på olika villkor, i detta fall beroende på iteratorns värde.


Alla tider är GMT +2. Klockan är nu 19:39.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson