Gå til innhold

problem med mysql_fetch_array


Anbefalte innlegg

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
Videoannonse
Annonse

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
Lenke til kommentar

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
Lenke til kommentar

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

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:

Lenke til kommentar

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
Lenke til kommentar

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

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:

Lenke til kommentar

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