Lige eller ulige

Tags:    php

Hej,

jeg har et problem med et nyhedssystem som jeg er ved at lave, det skal gå ud på at der skal printes et billede ud til højre og venstre for hver af nyhederne.

Så hver anden skal være venstrestillet og hver anden skal være højrestillet.

Jeg har fået lavet nyhedssystemet og det eneste jeg mangler er at der skal være disse billeder på.

Jeg har nyhederne i en MySQL database og jeg har lavet en variabel til hver nyhed som fortæller om det skal være left eller right som billedet skal være på.

Dette er dog et problem når jeg skal gemme det, og jeg tænkte på om man kunne gøre så hvis ID på nyheden var et ulige tal så var billedet venstrestillet og omvendt.

Er der en anden måde at gøre dette på ?


Jeg tænkte også på at tælle alle nyhedspostene og så give left eller right derefter.

Her er hvad jeg har prøvet på, men det virker ikke helt:

$pic = mysql_query("SELECT id FROM news");
$countPic = count($pic);
echo $countPic;

Hvorfor bliver $countPic = 1 ?


Hvad kan jeg gøre ?



Hyperman



5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Hejsa.

Du spörger om to ting så vidt jeg kan se.

1) Hvordan du veksler imellem venstre og höjre i en række billeder
og
2) Hvordan du læser antallet af resultater fra et mySQL query (og sikkert löber igennem data i et loop osv)

Jeg vil starte med at fortælle hvorfor count giver dig 1. (altså med spörgsmål nr 2 :))

count er en function i PHP som returnerer antallet af elementer i en variabel .. dvs hvis du fx har et array med 10 elementer i så giver den 10.
For en dimentionelle variabler og object handles så som fx et mySQL resultatsæt vil den altid give 1, uanset om indeholdet på en eller anden måde kan lede til flere sekventielle læsbare rækker eller ej.
Eneste undtagelse er hvis variabelen er tom (null), så leverer count 0 tilbage.

Din förste linie er

$pic = mysql_query("SELECT id FROM news");

Men mysql_query giver dig ikke et array tilbage .. den afleverer en resource .. dvs et handle til at læse med (en pointer, resource id eller hvad ved jeg) ... som du altså ikke kan behandle som et array ..
Se her: http://www.php.net/manual/en/function.mysql-query.php

Det du vil göre er nok at bruge mysql_fetch_array med dit resource handle ($pic) og det vil give dig
et array. Dog indeholder det array kun en enkelt resultat række, hvilket er fint nok til at lave et loop med der gennemgår alle resultaterne .. men hvis du absolut skal vide hvor mange rækker dit query gav (altså hvor mange nyheder der blev fundet) så kan du bruge mysql_num_rows .. igen kaldes den, ligesom mysql_fetch_array, med dit resource handle ($pic) som parameter.
Derfor kan det være godt at kalde sit resource handle for $result (istedet for $pic) da du vil have nemmere med at se på andres eksempler og overföre det på din egen kode.

mysql_fetch_array:

http://www.php.net/manual/en/function.mysql-fetch-array.php

mysql_num_rows:

http://www.php.net/manual/en/function.mysql-num-rows.php

Alle mySQL functionerne i PHP med små eksempler:

http://www.php.net/manual/en/ref.mysql.php

Kort fortalt:

$countPic = count($pic);
bliver til
$countPic = mysql_num_rows($pic);

Nr 1)

Omkring det med at veksle er det ret simpelt, men nu er min dreng træt så jeg må svare senere.
Brug det Frank Bille vidste, men hvorfor han får noget så simpelt til at se så kompakt og grimt ud (set med en begynders öjne) fatter jeg ikke, men han skal måske lige blære sig med sin c teknik ;).
Det han gör er at lave modulus 2 på en tæller og på den måde se om tallet er lige eller ej.
Hvis den ikke er (dvs modulus 2 giver 0 som er true) bruges teksten "right" .. ellers "left".
Selv om if else i ? : format kan se presset ud er det jo egentligt ret egnet til netop denne opgave, da du ellers nok ville lave en function for at få det til at være læsbart.

Nå .. nu faldt ungen i sövn ;) .. der rög den undskyldning.

Istedet for hans for lökke, (for( $i = 0; $i < 10; $i++ )), bruger du bare den lökke du finder til at gå gennem sql resultater på den side jeg linkede til ovenfor.
$count++ er det samme som $count = $count+1. Igen kortere og mere naturligt .. når man kender sproget.

Ja ja ... hvis det ikke dækker så se eksemplerne her på udvikleren .. eller bedre, lær at bruge php.net .. der er rigtig god og nem sögning og god oversigt syntes jeg.

Og til Frank: Jeg er ikke ude på at provokere .. ikke til andet end at man lige skriver bare 5 ord om hvad man laver når man "hjælper" en der er så meget begynder at han ikke ved hvordan man slår mysql functionerne i php op. At smide en kompakt linie er vel ikke rigtig andet end en opfordring til at bruge gode gamle copy paste metoden, fordi man ikke fatter en brik og det er for namt bare at klippe istedet for at stille spörgsmål til svaret på ens spörgsmål.
Din kode var selvfölgelig hverken for kompakt eller grim .. du gjorde det som man gör det bedst.
Det hjælper bare ikke en begynder meget uden en kommentar, vil jeg da tro.[Redigeret d. 11/03-03 22:48:41 af Jonatan Hertel]



Et kort svar er:

<?php

for( $i = 0; $i < 10; $i++ )
{
echo "<img src=\\"images/minroev.gif\\" align=\\"".( $count++%2 ? "right" : "left" )."\\" />";
}

?>

Et langt svar får du først fra mig, når du har prøvet min kode af og kan se om det løser dit problem. Og ja... jeg ved godt at databasen ikke er på, men det her er svaret på det centrale i dit spørgsmål...



Jeg har fundet ud af at få talt resultatet af min mysql-forespørgsel, nu mangler jeg bare den funktion som skal bestemme om jeg skal sætte mit billede til venstre eller højre.

<?

$countPic = 10;
if ($countPic == ET LIGE TAL) {
$picAlign = "left";
} elseif ($coutPic == ET ULIGE TAL) {
$picAlign = "right";
}

?>

Kan det gøre på denne måde, fordi jeg forstod ikke meget af svar nummer to.



<?

$countPic = 10;
if ($countPic%2 == 0) { // er countpic et lige tal ?
$picAlign = "left";
} else { // ellers må det jo være ulige
$picAlign = "right";
}

?>





Som jo var det jeg sagde til at starte med :)

Jonathan: Jeg lærte da selv at programmere ud fra sådanne eksempler... Når jeg selv spørger om hjælp, bliver jeg mere glad for korte kontane svar end lange svar (det er som regel de korte jeg kan bruge til noget. Giver mig noget at tænke over)...

Men det er ikke for at starte en krig :)[Redigeret d. 12/03-03 20:36:34 af Frank Bille Jensen]



t