mikaelandre Skrevet 7. august 2004 Del Skrevet 7. august 2004 Når jeg henter ut nyheter fra en database så kjører jeg: while( $news = $db->getArray($result)) { masse rart if($news['bilde'] != null) { masse rart } } Problemet er den bilde biten. Hvis den aktuelle nyheten ikke har et bilde lagt inn, så får den verdien null. men det som da skjer er at den tar bildet fra forrige nyhet, og legger til det. Har prøvd å skrive isset($news['bilde']) også, og jeg har prøvd å slette arrayet på enden av if løkka, og jeg har prøvd å sette $news['bilde'] = "tull"; på slutten av løkka, men uansett, om bilde ikke er satt, så henter den bildet til forrige post i tabellen. Noen som kan forklare meg hvorfor? og hva jeg må gjøre for at det skal funke? Lenke til kommentar
simenss Skrevet 7. august 2004 Del Skrevet 7. august 2004 (endret) Kan du ikke bare kjøre spørringen mot databasen omtrent slik: SELECT * FROM tabell WHERE bilde!='' EDIT: Eller missforstod jeg? Skal du vise nyheten, bare uten bildet? Endret 7. august 2004 av simenss Lenke til kommentar
mikaelandre Skrevet 7. august 2004 Forfatter Del Skrevet 7. august 2004 (endret) jeg kjører spørringen select * from tabell order by dato desc poenget er at noen av nyhetene har bilde, og noen ikke. De som ikke har bilde får automatisk bildet til forrige post i tabellen, noe de ikke skal... Endret 7. august 2004 av mikaelandre Lenke til kommentar
simenss Skrevet 7. august 2004 Del Skrevet 7. august 2004 Prøv: <?php // Koble til database $sql = mysql_query("SELECT * FROM tabell ORDER BY dato DESC"); while($array = mysql_fetch_array($sql)) { // Skriver nyhet if($array['bilde']!==NULL) { // Skriver ut bildet } } ?> Lenke til kommentar
mikaelandre Skrevet 7. august 2004 Forfatter Del Skrevet 7. august 2004 while( $news = $db->getArray($result)) { masse rart if($news['bilde'] != null) { masse rart } } har prøvd det.. Lenke til kommentar
simenss Skrevet 7. august 2004 Del Skrevet 7. august 2004 while( $news = $db->getArray($result)) { masse rart if($news['bilde'] != null) { masse rart } } Ser ut som du har glemt et = i koden: if($news['bilde'] != null) Prøv: if($news['bilde'] !== null) Lenke til kommentar
mikaelandre Skrevet 7. august 2004 Forfatter Del Skrevet 7. august 2004 != funker like bra som !==. men jeg prøvde begge for sikkerhets skyld, og ingen forskjell Lenke til kommentar
simenss Skrevet 7. august 2004 Del Skrevet 7. august 2004 Det visste jeg faktisk ikke Hvordan er databasen din da? Er 'bilde' en url, eller? Lenke til kommentar
mikaelandre Skrevet 7. august 2004 Forfatter Del Skrevet 7. august 2004 bilde er en url ja. funker akkurat som det skal til det kommer til en post uten bilde. i stedet for å ikke gjøre noe så henter den av en eller annen gtrunn fram bildet fra forrige post. Lenke til kommentar
simenss Skrevet 7. august 2004 Del Skrevet 7. august 2004 (endret) Vet ikke om dette er mulig med PHP, men du kan jo prøve: <?php // Koble til database $sql = mysql_query("SELECT * FROM tabell ORDER BY dato DESC"); while($array = mysql_fetch_array($sql)) { // Skriver nyhet if($array['bilde']!=NULL) { // Skriver ut bildet } // Setter $array['bilde'] til NULL (går nok ikke) $array['bilde']==NULL; } ?> EDIT: Men tror dette går bedre: <?php // Koble til database $sql = mysql_query("SELECT * FROM tabell ORDER BY dato DESC"); while($array = mysql_fetch_array($sql)) { // Skriver nyhet $bilde = $array['bilde']; if($bilde!=NULL) { // Skriver ut bildet } $bilde = NULL; } ?> Endret 7. august 2004 av simenss Lenke til kommentar
mikaelandre Skrevet 7. august 2004 Forfatter Del Skrevet 7. august 2004 funka ikke det heller Lenke til kommentar
simenss Skrevet 7. august 2004 Del Skrevet 7. august 2004 Hvis du prøver: <?php // Koble til database $sql = mysql_query("SELECT * FROM tabell ORDER BY dato DESC"); while($array = mysql_fetch_array($sql)) { // Skriver nyhet $bilde = $array['bilde']; if($bilde!=NULL) { print("Bildet er ikke NULL"); } } ?> Får du da teksten "Bildet er ikke NULL"? Lenke til kommentar
simenss Skrevet 7. august 2004 Del Skrevet 7. august 2004 Går og legger meg nå, men her har du noen du kan prøve: <?php // Koble til database $sql = mysql_query("SELECT * FROM tabell ORDER BY dato DESC"); while($array = mysql_fetch_array($sql)) { // Skriver nyhet $bilde = $array['bilde']; if($bilde!=NULL) { // Skriver bildet $bilde = ""; } } ?> <?php // Koble til database $sql = mysql_query("SELECT * FROM tabell ORDER BY dato DESC"); while($array = mysql_fetch_array($sql)) { // Skriver nyhet $bilde = $array['bilde']; if($bilde==NULL) { } else { // Skriver bildet $bilde = ""; } } ?> Lykke til i natt! Lenke til kommentar
mikaelandre Skrevet 8. august 2004 Forfatter Del Skrevet 8. august 2004 det hjalp ikke det heller Lenke til kommentar
Tha_Zaynt Skrevet 8. august 2004 Del Skrevet 8. august 2004 (endret) Kan du ikke gjøre det slik at det hentes opp et standardbilde som det står no image eller noe lignende på når ($bilde==NULL) ? if($bilde==NULL) { echo"http://url/til/ditt/foto"; } Endret 8. august 2004 av Tha_Zaynt Lenke til kommentar
dostojevski Skrevet 8. august 2004 Del Skrevet 8. august 2004 (endret) Hva slags objekt er $db? Kan det være at feilen ligger i denne klassen? (Eller et helt annet sted?) Prøv å kjøre en var_dump() av $news øverst i while-blokka, og sjekk at bildet faktisk ER null (og ikke "", 0 eller noe annet gøy). Jeg tror også vi må se hva den koden du kaller "masse rart" er. Endret 8. august 2004 av dostojevski Lenke til kommentar
mikaelandre Skrevet 8. august 2004 Forfatter Del Skrevet 8. august 2004 ok, her kommer det: <?php $t = new Template("templates"); $t->set_file("side", "newsInc.tpl"); $t->set_block("side", "newsBlock", "nBlock"); // Henter nyheter fra databaen. $query = "select * from unbadweb_news order by 'dato' desc limit 5"; $result = $db->makeQuery($query); while($news = $db->getArray($result)) { $mer = "http://www.unbad.no/nyside/news.php?id=".$news['id']; $t->set_var("nDato", date("j.m", $news['dato'])); $t->set_var("nTittel", $news['tittel']); if($news['logobilde'] != NULL ) { $bilde = $news['logobilde']; $src = "images/$bilde"; // henter bilde info list($width, $height, $type, $attr) = getImageSize("images/$bilde"); if($height / $width > 1 ) { $k = 100 / $height; $height = 100; $width = $width * $k; } else { $k = 100 / $width; $width = 100; $height = $height * $k; } $link = "<a href=\"$mer\"><img src=\"$src\" width=\"$width\" height=\"$height\" alt=\"$bilde\" /></a>"; $t->set_var("nBilde", $link); } $t->set_var("nInnledning", $news['innledning']); $t->set_var("nMer", $mer); $t->parse("nBlock", "newsBlock", true); } $t->pparse("output", "side"); ?> og her er db klassen: <?php class db { function conn() { global $dbinfo; @mysql_connect($dbinfo["host"], $dbinfo["user"], $dbinfo["pass"]) or die("Ikke kontakt med mysql og user = $db_user"); @mysql_select_db($dbinfo["navn"]) or die ("Ikke kontakt med databasen"); } function makeQuery($query) { return @mysql_query($query); } function getNumRows($arg) { return @mysql_num_rows($arg); } function getArray($arg) { return @mysql_fetch_array($arg); } function close() { return @mysql_close(); } } ?> Jeg tror problemet er her: while($news = $db->getArray($result)) det som skjer når den lager et nytt $news array er at den fyller alle tomme element med verdien fra forrige post i tabellen, men jeg vet ikke hvorfor og hvordan jeg hindrer det. Lenke til kommentar
dostojevski Skrevet 8. august 2004 Del Skrevet 8. august 2004 Hvordan funker Template-klassen? Unsetter den alle variabler etter at du har kallt parse()? Hvis ikke vil jo den gamle verdien av nBilde fremdeles være lagret, og bli spyttet ut også neste gang du kaller parse(). Hvis dette er tilfellet må du legge til følgende før if-setningen din: $t->set_var("nBilde", null); Tror jeg setter en femmer på at dette er problemet. Lenke til kommentar
mikaelandre Skrevet 8. august 2004 Forfatter Del Skrevet 8. august 2004 JA! nå gikk det! tenkte ikke på at det kunne være problemet... takk! Lenke til kommentar
dostojevski Skrevet 9. august 2004 Del Skrevet 9. august 2004 Hehe... Tenkte meg det var en ugle i mosen her et sted ja. Så alle barn: Moralen her er at en bør sjekke hva variablene FAKTISK inneholder før en trekker konklusjoner om hva problemet er; var_dump() er din venn! 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å