Bjonski Skrevet 12. april 2011 Del Skrevet 12. april 2011 Jeg har laget et script som skal hente ut informasjon fra en database og linke dette på en side. Linkene skal være klikkbare for å hente ut enda mer informasjon angående ønsket tema. Jeg har, med hjelp, lokalisert feilen. Feilen ligger i den ene "if'en" min: if ($Filnavn == $row[id]) Problemet mitt er at etter denne "IF'en" kommer det en else som skal printe ut en 404-side, men pga. $row[id] så blir 404-siden printet uansett: Noen som har en løsning uten å rote alt for mye med koden? Jeg holder fortsatt på å lære meg PHP, så jeg prøver å lage det enkelt og forståelig for meg selv. Hele koden: <?php include "config/sql_config.php"; $Filnavn = $_GET["id"]; $result = mysql_query("SELECT * FROM guide order by ID") or die(mysql_error()); while ($row = mysql_fetch_array($result)) { if (!$Filnavn) { echo "<div class='content'><a href='?page=classic&id=$row[id]'>$row[title]</a></div>"; } else { if ($Filnavn == $row[id]) { echo "<div class='content'><b>$row[title]</b></a></div>"; echo "<div class='content'>$row[text]</div>"; echo "debug"; } else { include "include/404.php"; echo "debug2"; } } } ?> Lenke til kommentar
Nickless Skrevet 12. april 2011 Del Skrevet 12. april 2011 (endret) Altså, problemet er at den slår til på både if og else? else { if ($Filnavn == $row[id]) { echo "<div class='content'><b>$row[title]</b></a></div> "; echo "<div class='content'>$row[text]</div>"; echo "debug"; } else { include "include/404.php"; echo "debug2"; } } } EDIT: Er det bare en verdi i databasen forresten? Endret 12. april 2011 av Nickless Lenke til kommentar
Terrasque Skrevet 12. april 2011 Del Skrevet 12. april 2011 jeg tror du vil ha row["id"] istedet.. Eller definere id 1 Lenke til kommentar
Bjonski Skrevet 12. april 2011 Forfatter Del Skrevet 12. april 2011 Altså, problemet er at den slår til på både if og else? Ja, den printer ut både if og else. jeg tror du vil ha row["id"] istedet.. Eller definere id Hjelper ikke. Får samme problem. Lenke til kommentar
Nickless Skrevet 12. april 2011 Del Skrevet 12. april 2011 (endret) jeg tror du vil ha row["id"] istedet.. Eller definere id Som nevnt: while ($row = mysql_fetch_array($result)) { if (!$Filnavn) { echo "<div class='content'><a href='?page=classic&id=$row[id]'>$row[title]</a> </div>"; } else { $value = $row['id']; if ($Filnavn == $value) { echo "<div class='content'><b>$row[title]</b></a></div> "; echo "<div class='content'>$row[text]</div>"; echo "debug"; } else { include "include/404.php"; echo "debug2"; } } } Hmm, hva er Filnavn hvis du printer den ut, og hva er row[id]? Endret 12. april 2011 av Nickless Lenke til kommentar
Nickless Skrevet 12. april 2011 Del Skrevet 12. april 2011 Altså, problemet er at den slår til på både if og else? Ja, den printer ut både if og else. jeg tror du vil ha row["id"] istedet.. Eller definere id Hjelper ikke. Får samme problem. Databasen inneholder bare 1 verdi, eller flere? Lenke til kommentar
Bjonski Skrevet 12. april 2011 Forfatter Del Skrevet 12. april 2011 Hmm, hva er Filnavn hvis du printer den ut, og hva er row[id]? Begge er lik hverandre, de henter ut samme verdi. Databasen inneholder bare 1 verdi, eller flere? Den inneholder to verdier. Den første verdien har id 1, neste har id 20020. Lenke til kommentar
Nickless Skrevet 12. april 2011 Del Skrevet 12. april 2011 Ehm, Men da vil det si at den går gjennom loopen 2 ganger siden du har 2 verdier i databasen? Og er row[id] lik Filnavn begge gangene? Lenke til kommentar
Bjonski Skrevet 12. april 2011 Forfatter Del Skrevet 12. april 2011 Kanskje det hjelper om jeg viser hvordan siden er bygd opp: Dette er den første IFen, her printer den ut alle verdiene i databasen og gjør dem klikkbare ved hjelp av $filnavn = $_GET["id"]; Trykker jeg på verdi 1 så kommer jeg hit: Her printer den ut if og else. Ja, $row[id] er lik filnavn begge gangene. Lenke til kommentar
Terrasque Skrevet 12. april 2011 Del Skrevet 12. april 2011 Den første verdien har id 1, neste har id 20020. Ja, $row[id] er lik filnavn begge gangene. DOES NOT COMPUTE Lenke til kommentar
Bjonski Skrevet 12. april 2011 Forfatter Del Skrevet 12. april 2011 (endret) Den første verdien har id 1, neste har id 20020. Ja, $row[id] er lik filnavn begge gangene. DOES NOT COMPUTE Jeg skjønner at feilen ligger der, jeg skrev det i den første posten. Det jeg ikke skjønner er hvordan jeg kan fikse problemet. Jeg trenger filnavn = $_GET["id"] for å lage lenkene og jeg trenger $row[id] for å hente ut innholdet som skal ligge under lenkene. Hvis $_GET["id"] er lik $row[id] så henter den ut $row[text], hvis ikke skal den gå til 404. Endret 12. april 2011 av Bjohansen Lenke til kommentar
Bjonski Skrevet 12. april 2011 Forfatter Del Skrevet 12. april 2011 For å legge til litt ekstra så printer den ut else før if på verdi 2: Lenke til kommentar
Terrasque Skrevet 12. april 2011 Del Skrevet 12. april 2011 (endret) $value = $row['id']; echo "<p style='border: 2px dotted #f00;float: left; margin: 5px;'><b>DEBUG!</b><br/>Filnavn er : $Filnavn<br/>ID er : $value</p>"; if ($Filnavn == $value) Hva er debug value der? Hvis jeg har forstått koden riktig, vil DEBUG komme opp to ganger, ene med filnavn og id likt, andre med filnavn og id ulikt. Edit: Hvis min forståelse er riktig: Siden det er to verdier i databasen, vil if logikken kjøre to ganger, med to forskjellige row's. Ene gangen vil filnavn variablen ha samme verdi som row id'en, andre gangen ikke. Så at både if og else koden kjører er helt logisk. Det jeg tror du bør tenke på er hva som skal skje når de ikke passer. Siden det er forventet at det er rows den ikke passer med, så tror jeg ikke 404 er riktig respons. Endret 12. april 2011 av Terrasque Lenke til kommentar
Bjonski Skrevet 12. april 2011 Forfatter Del Skrevet 12. april 2011 DEBUG! Filnavn er : 20020 ID er : 1 DEBUG! Filnavn er : 20020 ID er : 20020 Så problemet oppstår når den kjører gjennom looper flere ganger og ser at filnavn både er lik og ulik. Lenke til kommentar
Terrasque Skrevet 12. april 2011 Del Skrevet 12. april 2011 Du bør tenke på hva som skjer i else delen, og om den er nødvendig å ha. Du kan også endre SQL queryen til å bare få raden du trenger, hvis du ikke skal bruke de andre: $escapedid = mysql_real_escape_string($Filnavn); $result = mysql_query("SELECT * FROM guide WHERE id = $escapedid") Lenke til kommentar
Bjonski Skrevet 12. april 2011 Forfatter Del Skrevet 12. april 2011 (endret) Du bør tenke på hva som skjer i else delen, og om den er nødvendig å ha. Du kan også endre SQL queryen til å bare få raden du trenger, hvis du ikke skal bruke de andre: $escapedid = mysql_real_escape_string($Filnavn); $result = mysql_query("SELECT * FROM guide WHERE id = $escapedid") Jeg vet at else ikke er nødvendig, men den er kjekk å ha dersom man prøver å gå til en id som ikke finnes. Jeg henter ut mer enn bare ID. if1: echo "<div class='content'><a href='?page=classic&id=$row[id]'>$row[title]</a></div>"; if2: echo "<div class='content'><b>$row[title]</b></a></div>"; echo "<div class='content'>$row[text]</div>"; echo "debug <br />"; echo "Filnavn: $Filnavn ... Row id:$row[id]"; Jeg henter ut all info i tabellen, men printer det ut i forskjellig if. Endret 12. april 2011 av Bjohansen Lenke til kommentar
Milktea Skrevet 12. april 2011 Del Skrevet 12. april 2011 Dersom $Filnavn er satt ønsker du kun at data fra en rad i databasetabellen skal skrives, hvis ikke skal alle radene listes opp? I så fall må du restrukturere litt. Prøv å bytte ut $result slik som dette, se om det da fungerer 'as intented', så kan vi heller eventuelt ta det derfra. $result = mysql_query("SELECT * FROM `guide` ".(($Filnavn)?' WHERE `id`=' . intval($Filnavn) . ' ':'') . "ORDER BY `id`;") or die(mysql_error()); Lenke til kommentar
Bjonski Skrevet 13. april 2011 Forfatter Del Skrevet 13. april 2011 (endret) Prøv å bytte ut $result slik som dette, se om det da fungerer 'as intented', så kan vi heller eventuelt ta det derfra. $result = mysql_query("SELECT * FROM `guide` ".(($Filnavn)?' WHERE `id`=' . intval($Filnavn) . ' ':'') . "ORDER BY `id`;") or die(mysql_error()); Den koden gjør akkurat samme nytten som å fjerne: else { include "include/404.php"; echo "debug"; } 404-siden vises ikke ved bruk av den koden. Edit: Men den kjører ikke gjennom loopen to ganger, så det er positivt. Endret 13. april 2011 av Bjohansen Lenke til kommentar
Milktea Skrevet 13. april 2011 Del Skrevet 13. april 2011 Den skal fremdeles vise 404-siden din dersom du kjører en ID som ikke finnes i databasen. Det den derimot ikke gjør er å vise en instans av 404-siden din for hver rad i databasen som for øyeblikket ikke har $Filnavn som ID. Det trodde jeg også var nettopp det du ville oppnå? Lenke til kommentar
Bjonski Skrevet 13. april 2011 Forfatter Del Skrevet 13. april 2011 Den skal fremdeles vise 404-siden din dersom du kjører en ID som ikke finnes i databasen. Det den derimot ikke gjør er å vise en instans av 404-siden din for hver rad i databasen som for øyeblikket ikke har $Filnavn som ID. Det trodde jeg også var nettopp det du ville oppnå? Du har forstått det riktig. Det den derimot ikke gjør akkurat nå er å vise 404-siden dersom jeg kjører en ID som ikke finnes i databasen. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå