22. august 2006 - 18:47Der er
34 kommentarer og 1 løsning
Hvorfor virker min if og else ikke
Hej eksperter... Jeg har siddet og rodet med det her script jeg har skrevet, og jeg kan simpelthen ikke finde ud af, hvorfor det ikke virker.
Jeg har en anelse om det er fordi jeg har 2 while-tags inde i hinanden, men håber I kan hjælpe. Hvis det bliver nødvendigt kan I også få de andre filer.
Din SELECT * FROM votespics WHERE user='$user' skal vel have en vis relation til det billede der vises. Gælder der så i din tabel votepics, at der kun er en række, hvis der er stemt?
"fordi den er inde i en while" ... nej, der er noget du har misforstået. Komputere gør ikke hvad du synes, de skal gøre, men hvad du be'r dem om. ;) De der {...} er helt ok i den sammenhæng. Prøv bare.
Ja, det var helt med vilje, at de klammer var der. Jeg satte dem, fordi jeg foretrækker at bruge '' om feltnavne i arrays alle steder.
Man kunne også have skrevet: link='$aRow[url]' men så skal man jo lige pludseligt skrive forskelligt alt efter om det er indenfor eller udenfor en streng. Derudover er der andre sjove ting, man kan gøre med variabler, som ikke kan lade sig gøre uden klammerne.
Jeg fandt ud af det... Det er den der while, så I har advaret mod, jeg har glemt at slette...
Nu virker det...
Tak for hjælpen og smid et svar...
Synes godt om
Slettet bruger
22. august 2006 - 22:17#26
Ok, jeg prøver lige forfra - og med en metode, som din database nok bliver gladere for.
<?php
$user = $_SESSION["user"];
echo '<table>'; connect();
$query = mysql_query("SELECT r.*, v.vote AS vote FROM rating AS r LEFT OUTER JOIN votespics AS v ON v.user = '{$user}' AND r.url = v.link WHERE medie='p'") OR die(mysql_error()); while($aRow = mysql_fetch_array($query)){ echo '<tr><td><img src="'.$aRow["url"].'" style="width: 250px; border: 1px #000000 solid;" /></td>'; echo '<td style="vertical-align: bottom;">'.$aRow["picText"].'</td>'; echo '</tr><tr>';
Ingen point til mig, tak. Problemet med den dobbelte while skal ikke bare være en advarsel, men gerne noget du lærer af. Så på med hatten, slå tommelfingrene ud.
Du havde i princippet
while (....gennemløb af skal vi sige 2 items/billede....) {
while (....gennemløb af skal vi sige 10 items/stemmer....) { if (noget) { gør 1 } else { gør 2 } } }
Stillet op på den her måde, håber jeg du kan se at for hvert af de 2 billeder vil der i den indre while-løkke ske 10 ting, som 9 af gangene er "gør 2", og een af gangene er "gør 1". I virkeligheden vil du kun have enten een "gør 1" eller een "gør 2"
Alt kan lade sig gøre, naturligvis, men det bliver en kende besværligt i PHP. Derfor træder programmeringsregel 367 i kraft: "Lad databasen gøre så meget arbejde som muligt" - her betydende at den kun skal hente præcis de relevante data ud. Det er også det databaser er bedst til.
;)
Synes godt om
Slettet bruger
22. august 2006 - 22:21#28
Billedets id er vel et tal, så der er inegn grund til at urlencode det.
Til gengæld var det en fejl at jeg kom til at fjerne urlencodingen af $aRow['url']
Og sandbox har så yderligere brugt regel 367 een gang til.
Synes godt om
Slettet bruger
22. august 2006 - 22:27#30
I modsætning til Erik, boycotter jeg ikke pointsystemet, så her er et svar fra mig.
Og jeg vil anbefale, at du går over til noget, som er baseret på eller minder om mit sidste forslag. Det vil jeg tro, at du bliver glad for, når der kommer mange stemmer i systemet.
Og så opdagede jeg en fejl mere i mit forslag, så her er en tilrettet udgave:
<?php
$user = $_SESSION["user"];
echo '<table>'; connect();
$query = mysql_query("SELECT r.*, v.vote AS vote FROM rating AS r LEFT OUTER JOIN votespics AS v ON v.user = '{$user}' AND r.url = v.link WHERE medie='p'") OR die(mysql_error()); while($aRow = mysql_fetch_array($query)){ echo '<tr><td><img src="'.$aRow["url"].'" style="width: 250px; border: 1px #000000 solid;" /></td>'; echo '<td style="vertical-align: bottom;">'.$aRow["picText"].'</td>'; echo '</tr><tr>';
Argh. Det var netop den fejl, jeg opdagede yderligere, at der nu slet ikke er en variabel ved navn $voteRow, da det hele ligger i $aRow, så derfor skulle der checkes på om $aRow['vote'] var tom. Jeg glemte bare, at den også bruges til udskriften af afgivne stemmer.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.