Avatar billede den-evil Nybegynder
13. februar 2006 - 13:33 Der er 11 kommentarer og
1 løsning

mysql_fetch_assoc ødelægger funktion?

hey alle...

har disse funktioner:
<?

function findTopPageID($thisPage) {
   
    $continue = true;
   
    while ($continue == true) {
        $SQL = "SELECT * FROM artikel WHERE idartikel = $thisPage";
        $mq_check = mysql_query($SQL);
        $thisRow = mysql_fetch_assoc($mq_check);
        $parent = $thisRow['parent_page'];
        if (is_null($parent)) {
            $continue = false;
        }
        else {
            $thisPage = $parent;
        }
   
    }
   
    return $thisPage;
}

function subPagesMenu($pageid, $level,$oldopen,$open = ""){
if ($pageid == "NULL") {
$SQL = "SELECT * FROM artikel WHERE parent_page IS NULL";
$mq = mysql_query($SQL) or die(mysql_error());

#echo $SQL;
} else {
$SQL = "SELECT * FROM artikel WHERE parent_page = '$pageid' AND aktiv = '1'";
$mq = mysql_query($SQL) or die (mysql_error());

}
?>
<?
    if(mysql_num_rows($mq) > 0){
    while($page = mysql_fetch_assoc($mq)){
    ++$count;
    if ($baggrundsfarve == "#f4f5f5"){
        $baggrundsfarve = "#FFFFFF";
    }else{
        $baggrundsfarve = "#f4f5f5";
    }
    if ($open == "") {
        $myopen = $page['idartikel'];
    }
    else {
        $myopen = $open . "," . $page['idartikel'];   
    }
   
?>
    <tr style="background-color:<?=$baggrundsfarve;?>; height:25px;"><td>
    <img src="images/spacer.gif" width="<?=$level * 10?>" height="1" border="0">
    &nbsp;&nbsp;
    <img src="images/dot.png" alt="" title="" align="middle" /><a href="index.php?pageid=<?=$page['idartikel'];?>&open=<?=$myopen?>">
    <?=$page['navn'];?>
    <?   
        $ooArr = split(",",$oldopen);
        array_search($page['idartikel'],$ooArr);
        if (in_array($page['idartikel'],$ooArr)) {           
            subPagesMenu($page['idartikel'],$level + 1,$oldopen,$myopen);
        }
       
    ?>
    </a>
    </td></tr>
<?
   
    }
}

?>
<?
}
?>

-------------
Hvis jeg så smider dette:
$hit = mysql_fetch_assoc($mq);
$hits = $hit['hits'] +1;
$id = $hit['id'];
$UPD = "UPDATE artikel SET hits = '$hits' WHERE id = '$id'";
$mq_upd = mysql_query($UPD);

ind efter :
$mq = mysql_query($SQL) or die(mysql_error());

Så udskriver den ikke hele min menu???
Avatar billede phliplip Nybegynder
13. februar 2006 - 13:39 #1
Sæt

mysql_data_seek($mq,0);

ind foran

if(mysql_num_rows($mq) > 0){
    while($page = mysql_fetch_assoc($mq)){
Avatar billede den-evil Nybegynder
13. februar 2006 - 13:41 #2
får denne advarsel så:

Warning: mysql_data_seek() [function.mysql-data-seek]: Offset 0 is invalid for MySQL result index 9 (or the query data is unbuffered) in c:\websteder\worldcafe\includes\functions.php on line 175
Avatar billede den-evil Nybegynder
13. februar 2006 - 13:57 #3
hvis jeg nu skriver @mysql_data_seek forsvinder advarslen? - Men advarslen må vel betyde et eller andet ?
Avatar billede phliplip Nybegynder
13. februar 2006 - 13:59 #4
Nå for søren ;) Men virker det hvis du sætter @ foran ?
Avatar billede den-evil Nybegynder
13. februar 2006 - 14:03 #5
Jep, så virker det fint nok ser det ud til...
Avatar billede den-evil Nybegynder
13. februar 2006 - 14:07 #6
nej, hov... gjorde det sq ik alligevel :(
Avatar billede den-evil Nybegynder
13. februar 2006 - 14:22 #7
hmm, nogle alternativer evt?
Avatar billede phliplip Nybegynder
13. februar 2006 - 14:38 #8
Problemet er at du prøver at lave din funktion rekursiv!

Og i første kald får $mq et resultset fra mysql og så looper du det med while, og så kører du samme funktion igen inde i loopen som så giver $mq et nyt resultset.. og når så det kald er gennemført og den vender tilbage til første kald af funktionen og den vil lave næste loop så er det ikke samme resultset som den startede med!
Avatar billede phliplip Nybegynder
14. februar 2006 - 07:26 #9
Ved ikke lige hvordan du skal løse den der... men har tænkt over en idé!

Noget i den her stil:

$rc = 0;
$mq = array();
function subPagesMenu($pageid, $level,$oldopen,$open = ""){
  GLOBAL $rc, $mq;
  $rc++;

  if($pageid == "NULL") {
    $SQL = "SELECT * FROM artikel WHERE parent_page IS NULL";
    $mq[$rc] = mysql_query($SQL) or die(mysql_error());
  } else {
    $SQL = "SELECT * FROM artikel WHERE parent_page = '$pageid' AND aktiv = '1'";
    $mq[$rc] = mysql_query($SQL) or die (mysql_error());
  }

  if(mysql_num_rows($mq[$rc]) > 0) {
    while($page = mysql_fetch_assoc($mq[$rc])) {
      ++$count;
      if($baggrundsfarve == "#f4f5f5") {
        $baggrundsfarve = "#FFFFFF";
      } else {
        $baggrundsfarve = "#f4f5f5";
      }
      if($open == "") {
        $myopen = $page['idartikel'];
      } else {
        $myopen = $open . "," . $page['idartikel'];   
      }

      echo("    <tr style=\"background-color:".$baggrundsfarve."; height:25px;\"><td>\n");
      echo("    <img src=\"images/spacer.gif\" width=\"".($level * 10)."\" height=\"1\" border=\"0\">\n");
      echo("    &nbsp;&nbsp;\n");
      echo("    <img src=\"images/dot.png\" alt=\"\" title=\"\" align=\"middle\" /><a href=\"index.php?pageid=".$page['idartikel']."&open=".$myopen."\">".page['navn']);
      $ooArr = split(",",$oldopen);
      array_search($page['idartikel'],$ooArr);
      if (in_array($page['idartikel'],$ooArr)) {           
          subPagesMenu($page['idartikel'],$level + 1,$oldopen,$myopen);
      }
      echo("    </a>\n");
      echo("    </td></tr>\n");
    }
  }
  $rc--;
}

Har også lige rydtet lidt op i din kode.. alt det batch programmering er jo ikke til at holde ud at se på :P Der tænker jeg på din ekstreme brug af <? ?> og <?= ?>
Avatar billede phliplip Nybegynder
14. februar 2006 - 07:26 #10
Ved ikke om der findes noget smartere :P
Avatar billede den-evil Nybegynder
14. februar 2006 - 08:19 #11
jeg fik det til at fungere :) - ligger du et svar?
Avatar billede phliplip Nybegynder
14. februar 2006 - 11:13 #12
Brugte du mit?
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester