![]() |
"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 |
Kod:
while($products as $product) { |
Lämpligen så räknar du antalet rader och kontrollerar om du är på rad X varvid du infogar annonsen.
|
Skulle gjort precis som Jine föreslog.
Fast utan else satsen då så att den inte hoppar över 5an? |
Citat:
|
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. :) |
Kod:
<?php |
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++; } |
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. |
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. |
Själv brukar jag använda modulus istället när jag vill skriva ut något vid givna intervall.
Så jag bidrar med mitt exempel. Eftersom modulus (% i PHP) svarar med resten från en division så blir det 0 (false) när det är jämnt delbart. (6/2=3 0 i rest, 7/2=3 och 1 i rest) En division med 0 ger alltid en rest på 0 så därför startar jag med $i=1 istället. Mitt exempel blir då: Kod:
$i=1; |
Bara du inte kör DIV istället för LI bara. Då blir markup-gudarna arga på dig.
|
Citat:
$products är snarare iteratorn, $i är ju bara en siffra och den kan du väl knappast iterera över. Snyggare kod borde dessutom vara: foreach($products as $counter => $product) { //Do stuff } |
Citat:
|
Kul att se så många olika lösningar på ett så pass relativt enkelt problem. =D
|
Jag tror jag förstår faktiskt! Tack så jätte mycket allihop!
För er som är intresserad av att se hur min while loop ser ut nu (utan att ha testat er teori), så ligger den här: http://pastebin.com/HFKVS9FS Återkommer om jag får några problem! Tack ännu en gång för er hjälp! |
PHP-kod:
(Har inte inkluderat alla sorters sorteringar ännu dock...) |
Finns nog lita att ändra kanske.. Såg detta lite snabbt.
Kod:
if (isset($race_sort)) { Kod:
if (isset($race_sort)) { |
Kod:
if (isset($race_sort)) { |
Sant.
Kör mysql_real_escape_string($race_sort) istället då. Ville mest pointera hans onödiga if satser.. |
Absolut. Jag skulle föreslå följande:
PHP-kod:
|
Läste lite på php.net om mysql_real_escape_string, men förstod inte speciellt mycket om det.
Känner någon att hen vill berätta för mig varför man skall använda den funktionen i denna? |
Låt oss säga att du har en sökfunktion och du hanterar den såhär:
PHP-kod:
Kod:
'; DROP TABLE search; Kod:
SELECT * FROM search WHERE text=''; DROP TABLE search; ' Om du använder PHP-kod:
Kod:
SELECT * FROM search WHERE text='\'; DROP TABLE search; ' (Ber om ursäkt för min försvenskning av de engelska orden). |
Det captaindoe skrev fungerar dock inte i praktiken (iom att du inte kan köra dubbla queries i en mysql_query())
MEN!!!! Det är vääldigt viktigt att ALDRIG lita på NÅGOT användaren skriver, escape:a och rensa alltid, allt! Enklaste sättet är att göra såhär: $minvariabel = mysql_real_escape_string($_GET['var']); På... allt :) |
Jag förstår!
Det är med andra ord, väldigt dumt att inte använda mysql_real_escape! :P |
Ger man en normal klient rättigheter att köra "DROP TABLE" så är man nog fel ute på annat håll..
Använder man 'prepared statements' så är det säkert mot denna typen av injektioner i.a.f. |
Jake, du förstår det att jag har hållit på med php i drygt 5 dagar nu, 3 dagar när jag först la ut tråden.
Så jag hoppas du förstår att mina kunskaper om hur allt fungerar, och vad som kan hända pga vissa saker, inte riktigt har trängt in i min hjärta ännu :P Men de kommer! |
jonssondesign, du kan vara lugn. De flesta nybörjare gör det där misstaget och även många som sysslat med php betydligt längre än dig. En del anser uppenbarligen att man ska kunna allting redan innan man börjar koda :) Det är inte mycket att bry sig om, det är bra att du tar till dig saker och ting och försöker lära dig ordentligt.
|
Om du ska lära dig koda så börja leka med MYSQLI Prepare statements http://www.php.net/manual/en/mysqli.prepare.php
|
Citat:
|
Eller kör PDO om servern har det installerat, vilket de flesta har..
Så detta är tex säkert mot sql injection: $dbh = new PDO(..); $stmt = $dbh->prepare('SELECT * FROM users where username = :username'); $stmt->execute( array(':username' => $_POST['username']) ); |
Så fort jag ser dessa " => " fattar jag, negativt 1000... Du läste rätt, inte noll, utan negativt 1000! >.< :D
Jag tror jag får kolla runt på lite fler tutorials och kolla lite mer på php.net, sen kan jag nog lite till :) De är faktiskt roligt att koda! Jag har tidigare bara gjort design och front-end kodning i typ 10 år. Kände att jag ville avancera lite och erbjuda mina kunder lite mer :) Det är egentligen därför som jag försöker lära mig php och mysql nu. Får tacka er alla för den hjälp ni har gett mig. Just nu sitter jag och kodar på ett nytt (enkelt) projekt som jag tänkte att ni skulle få kommentera senare. Säger till när det börjar på att bli dags för lite feedback :D |
Citat:
|
Förstår fortfarande inte >.<
Vet att en array används när man vill lagra flera saker. typ, olika variablar? eller? Typ: $a = "Hejsan "; $b = "Mitt efternamn "; $c = "är "; $x = array($a, $b, $c, jonsson); Det där är väl en fungerande array? Or isn't it? Ska man då kunna göra såhär: echo $x -> 4; Det betyder att den skriver ut "är " i ren html ? *EDIT! Antar att den börjar från 0? Alltså är $a = 0, $b = 1, $c = 2 och jonsson = 3? |
Kod:
Du verkar dock blanda ihop arrayer och objekt tror jag, lite osäker på vad du menar med "->" iaf, det är inget giltigt syntax. Inte heller har HTML något med arrayens innehåll eller så att göra, den skriver ut det den har i sig, oavsett om det är binärdata eller text. Du kan t.ex. använda echo för att printa värdet av variabeln på "plats" 4 genom: echo $array[3]; // Och ja, mycket riktigt början den räkna på 0, så 0 = 1, 1 = 2, 2 = 3, 3 = 4 osv. Läs mer om arrayer här: http://archive.64bits.se/guider/php-skola/index2.php |
Okej, tror jag börjar på att förstår array lite faktiskt. Dock det här med objekt har jag inte fått kläm på riktigt än..
Kom och tänka på en sak som tas upp på sidan du länkade Jine. Hen som skriver skriver sina array'er såhär: $namn[0] = "Fredrik Jonsson"; $namn[1] = "Jessica hildenborg"; $namn[2] = "Rickard jonsson"; och sen om man vill visa "Rickard jonsson" som en text på en hemsida, så skriver man: echo $namn[2]; Eller hur? Men om man vill komprimera ovanstående kod, kan man lika gärna skriva: $namn = array("Fredrik JOnsson", "Jessica hildenborg", "Rickard jonsson"); echo $namn[2]; Men om man vill namnge "facken" då? Såg att hen tog upp detta: $array['namn'] = "Fredrik Jonsson"; $array['alder'] = 22; $array['stad'] = "Strängnäs"; kan man skriva såhär istället?: $array = array('namn' -> "Fredrik Jonsson", 'alder' -> 2, 'stad' -> "Strängnäs"); och sen om man vill skriva ut Strängnäs, så skriver man: echo $array[2]; echo $array['stad']; Antar att båda går lika bra? Detta var nämligen inget personen bakom 64bits skrev om.. |
Kod:
$array = array('namn' => "Fredrik Jonsson", 'alder' => 2, 'stad' => "Strängnäs"); Objekt tycker jag du kan strunta i atm, det är lite överkurs innan man lärt sig hantera array:er helt, iom att det är så mycket mer än en array. |
Okej, så ett "lika med"-täcken alltså.. Ajaa, jag tar problemen när dom kommer ;)
De är ganska många elektroner som flyger runt i min hjärna och försöker spara så mycket information som möjligt just nu :P Tack till er alla för all hjälp, återkommer om jag behöver mer hjälp! Ska läsa vidare på sidan du länkade Jine. Tack! :) |
Jag tycker man ska börja med objekt så tidigt som möjligt. I synnerhet om man har komplexa strukturer med information som ett personobjekt som i detta fall. Jag kör inte PHP så just det språket kan jag inte hjälpa till med.
Varje element i en array bör helt enkelt vara ett komplett objekt så hela arrayen hanterar samma typ av objekt. Det blir enklare att hantera mentalt. Objektorientering kan med fördel användas för att dölja komplexitet, dvs göra det enklare för den mänskliga hjärnan att hantera komplexa frågor. |
Får ta och läsa på hur man utvecklar objekt helt enkelt :) Vill så klart lära mig så mycket som möjligt.
Jag anser att jag kan html och css nästan fullt ut nu, med tanke på att jag har jobbat med det i drygt 10 år (endast html och css).. Dags att vidareutveckla sig känner jag :P Försöker lära mig php och mysql just nu, men sneglar en hel del på jquery också. |
Alla tider är GMT +2. Klockan är nu 05:45. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson