Gå til innhold

problem med mysql_fetch_array


Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet (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 av simenss
Skrevet (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 av mikaelandre
Skrevet

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
}
}
?>

Skrevet

while( $news = $db->getArray($result))
{
     masse rart

     if($news['bilde'] != null)
     {
           masse rart
     }

}

har prøvd det..

Skrevet
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)

Skrevet

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.

Skrevet (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 av simenss
Skrevet

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"?

Skrevet

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! :thumbup:

Skrevet (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 av Tha_Zaynt
Skrevet (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 av dostojevski
Skrevet

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.

Skrevet

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. :whistle:

Skrevet

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!

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...