Avatar billede majbom Novice
25. februar 2004 - 10:25 Der er 14 kommentarer og
1 løsning

problem i kode

hej eksperten...

jeg har følgende kode-stump på min side:

if($table == "comments"){
  $arr_count = array();
  while($counts = mysql_fetch_array($res)){
      if(!in_array($counts['postid'], $arr_count)){
        $arr_count[] = $counts['postid'];
      }
  }
  $antalres = count($arr_count);
  if($antalres > "1" OR $antalres == "0"){
      $antalres = $antalres." poster";
  }else{
      $antalres = $antalres." post";
  }
?>
  <table>
      <tr>
        <td class='4'><div class='punkt'>der er blevet søgt på:<b><?echo $_REQUEST['sog'];?></b></td><td class='4' colspan='2'><div class='punkt'>der blev fundet <?echo $antalres;?></td>
      </tr>
<?
  db_tilslut();
  $style=1;
  $arr_postid = array();
  while($comm = mysql_fetch_array($res)){
      if($style==3){
        $style=1;
      }
      if(in_array($comm['postid'], $arr_postid)){
      }else{
        $arr_postid[] = $comm['postid'];
        $sql2 = "SELECT postid AS id, brugerid, navn, emne, dato FROM posts WHERE postid='$comm[postid]'";
        $res2 = mysql_query($sql2) or die(mysql_error);
        while($search = mysql_fetch_array($res){
?>
        <tr><td class='<?echo $style;?>' width='400'><div class='<?echo $style;?>'><?echo $search['emne'];?></td><td class='<?echo $style;?>' width='100'><div class='<?echo $style;?>'><?echo $search['navn'];?></td><td class='<?echo $style;?>' width='100'><div class='<?echo $style;?>'><?echo $search['dato'];?></td></tr>
<?
        }
        $style++;
      }
  }
  db_afslut();
}

den når til hvor den skriver hvad der er blevet søgt på, og så skriver den ikke mere... hvis jeg undlader den første while-lække i denne kodestump, vil den gerne fortsætte og udføre hele kodestumpen... synes det lyder mærkeligt!
nogen der har en ide til hvad der er galt?

pft
Avatar billede chries Nybegynder
25. februar 2004 - 10:33 #1
her er hvad jeg tror der sker :)

søger $res til enden
...
while($counts = mysql_fetch_array($res)){
...

da den allerede er ved enden, løber den ikke igennem while
while($comm = mysql_fetch_array($res)){

...
Avatar billede majbom Novice
25. februar 2004 - 10:41 #2
har jeg osse tænkt på... og jeg har derfor prøvet at smide res over i en variabel kaldet "rescomm" og så bruge den i den første while-løkke, og bruger "res" i den sidste... samme resultat! :(
Avatar billede chries Nybegynder
25. februar 2004 - 10:50 #3
Det kan du ikke, da det den returner er en identifier ikke data.

Du skal enten læse query'en over i den struktur og behandle den i dine while. Eller lave en mysql_data_seek($res, 0) imellem dine while.
Avatar billede chries Nybegynder
25. februar 2004 - 10:50 #4
..en struktur..
Avatar billede majbom Novice
25. februar 2004 - 10:52 #5
hmm... det forstår jeg ikke lige hvad det er du mener der..
gider du prøve at forklare? :)
Avatar billede chries Nybegynder
25. februar 2004 - 11:07 #6
prøv

if($table == "comments"){
  $arr_count = array();
  while($counts = mysql_fetch_array($res)){
      if(!in_array($counts['postid'], $arr_count)){
        $arr_count[] = $counts['postid'];
      }
  }
  $antalres = count($arr_count);
  if($antalres > "1" OR $antalres == "0"){
      $antalres = $antalres." poster";
  }else{
      $antalres = $antalres." post";
  }
?>
  <table>
      <tr>
        <td class='4'><div class='punkt'>der er blevet søgt på:<b><?echo $_REQUEST['sog'];?></b></td><td class='4' colspan='2'><div class='punkt'>der blev fundet <?echo $antalres;?></td>
      </tr>
<?
  db_tilslut();
  $style=1;
  $arr_postid = array();
mysql_data_seek($res, 0);
  while($comm = mysql_fetch_array($res)){
      if($style==3){
        $style=1;
      }
      if(in_array($comm['postid'], $arr_postid)){
      }else{
        $arr_postid[] = $comm['postid'];
        $sql2 = "SELECT postid AS id, brugerid, navn, emne, dato FROM posts WHERE postid='$comm[postid]'";
        $res2 = mysql_query($sql2) or die(mysql_error);
        while($search = mysql_fetch_array($res){
?>
        <tr><td class='<?echo $style;?>' width='400'><div class='<?echo $style;?>'><?echo $search['emne'];?></td><td class='<?echo $style;?>' width='100'><div class='<?echo $style;?>'><?echo $search['navn'];?></td><td class='<?echo $style;?>' width='100'><div class='<?echo $style;?>'><?echo $search['dato'];?></td></tr>
<?
        }
        $style++;
      }
  }
  db_afslut();
}
Avatar billede chries Nybegynder
25. februar 2004 - 11:08 #7
while($search = mysql_fetch_array($res){
->
while($search = mysql_fetch_array($res2){
Avatar billede majbom Novice
25. februar 2004 - 11:11 #8
og det eneste der skal tilføjes er den linje hvor der står: "mysql_data_seek($res, 0);"?
Avatar billede majbom Novice
25. februar 2004 - 11:12 #9
og ja.. der står osse res2, der hvor du mener... det var bare en fejl da jeg pastede det over..
Avatar billede chries Nybegynder
25. februar 2004 - 11:17 #10
ja. Hvis det virker =)

http://dk2.php.net/mysql_data_seek
Avatar billede majbom Novice
25. februar 2004 - 11:26 #11
det virker... hvad gør den?

men du må heller lige komme med et svar, så du kan få point!

tak for hjælpen!
Avatar billede chries Nybegynder
25. februar 2004 - 11:28 #12
den resetter den interne søge pointer.

while før #1
  data, data, data, data
    ^- intern pointer
while efter #1
  data, data, data, data
                      ^- intern pointer

while efter seek
  data, data, data, data
  ^- intern pointer
Avatar billede chries Nybegynder
25. februar 2004 - 11:29 #13
ved while efter #1, peger den på det sidste element... :)
Avatar billede chries Nybegynder
25. februar 2004 - 11:30 #14
ascii grafik er ikke så nemt når det ikke er monospace =)
Avatar billede majbom Novice
25. februar 2004 - 11:34 #15
nej... men jeg forstår pointen.. dvs at den resetter pointeren (eller hvad man skal sige)..
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