Avatar billede syswatch Novice
16. marts 2004 - 09:36 Der er 9 kommentarer og
1 løsning

Skriver uendeligt mange celler ud men hvor er fejlen

Hejsa.
Jeg er ved at kode et medlems oversigt, men har en fejl der gør at der kommer uendeligt mange celler ud.

  $query = "select * FROM users WHERE ((art = 'member') AND (kon = 'male')) ORDER BY id";
  $result = mysql_query($query) or die(mysql_error());

$row = mysql_fetch_row( $result );
if ( $row ) {
    echo "<table width=570 border=1>";
    while( $row ) {
        echo "<tr>";
        for ( $i=0; $i<3; $i++ ) {
            echo "<td width=190>";
            if ( $row ) {
                    $test = $row["nick"];
                    echo "$test";



            } else {

            }
            echo "</td>\n";
        }
        echo "</tr>\n";
    }
    echo "</table>\n";
}
Avatar billede limemedia Nybegynder
16. marts 2004 - 09:51 #1
prøv med

$query = "
    SELECT *
    FROM users
    WHERE art='member' && kon='male'
    ORDER BY id
";
$result = mysql_query($query) or die(mysql_error());

$row = 1;
if (mysql_num_rows($result)) {
    echo '<table width="570" border="1">';
    while ($foo = mysql_fetch_assoc($result)) {
        if ($row == 1) echo '<tr>';
        echo '<td width="190">'.$foo['nick'].'</td>';
        if ($row == 3) echo '</tr>';

        $row++;

        if ($row == 4) $row = 1;
    }

    if ($row == 2) echo '<td>&nbsp;</td><td>&nbsp;</td></tr>';
    else if ($row == 3) echo '<td>&nbsp;</td></tr>';

    echo '</table>';
}
Avatar billede Slettet bruger
16. marts 2004 - 09:51 #2
Prøv at skifte disse liner:

$row = mysql_fetch_row( $result );
if ( $row ) {
    echo "<table width=570 border=1>";
    while( $row ) {

ud med:

if (mysql_num_rows($result)>0) {
    echo "<table width=570 border=1>";
    while( $row=mysql_fetch_assoc($result) ) {
Avatar billede syswatch Novice
16. marts 2004 - 10:17 #3
Jeg ville gerne at vi kunne finde fejlen i den kode jeg selv have lavet, for ellers lærer jeg ikke rigtigt hvad jeg havde lavet forkert.

Sandbox: det hjælper ikke...
Avatar billede Slettet bruger
16. marts 2004 - 10:22 #4
Skriver den stadig et uendeligt antal rækker ud med mine rettelser? Det burde den virkelig ikke. Der kan stadig være ting, der ikke virker helt efter hensigtn, men den skulle ikke udskrive mere end det, der står i databasen.
Avatar billede syswatch Novice
16. marts 2004 - 10:24 #5
Eller nej, det gør den ikke, men den skriver samme navn på hele rækken.
Se evt lige her http://www.noddepatruljen.dk, under nødder....
Avatar billede Slettet bruger
16. marts 2004 - 10:38 #6
Jeps. Så kommer vi til næste ændring. Den er lidt større.

if (mysql_num_rows($result)>0) {
    echo "<table width=570 border=1>";
    $nummer=0
    while( $row=mysql_fetch_assoc($result) ) {
        if ($nummer==0) {
          echo "<tr>";
        }

        echo "<td width=190>";
        echo $row["nick"];
        echo "</td>\n";

        if ($nummer==2){
          echo "</tr>\n";
          $nummer=0;
        } else {
          $nummer++;
        }
    }
    switch ($nummer) {
      case 1: echo "<td></td>\n";
      case 2: echo "<td></td>\n</tr>\n";
    }
    echo "</table>\n";
}
Avatar billede syswatch Novice
16. marts 2004 - 10:45 #7
Jamen jeg forstår det simplethen bare ikke...
Jeg vil jo gerne ah det sådan at man bare skal ændre et tal for at ændre hvor mange kolonner man gerne vil ha, og sådan som jeg ser det, kan man ikke det i dit eksempel.
Avatar billede Slettet bruger
16. marts 2004 - 10:59 #8
Det kan også sagtens fixes:

$antalkolonner=3;

if (mysql_num_rows($result)>0) {
    echo "<table width=570 border=1>";
    $nummer=1;
    while( $row=mysql_fetch_assoc($result) ) {
        if ($nummer==1) {
          echo "<tr>";
        }

        echo "<td width=190>";
        echo $row["nick"];
        echo "</td>\n";

        if ($nummer==$antalkolonner){
          echo "</tr>\n";
          $nummer=1;
        } else {
          $nummer++;
        }
    }
    if ($nummer!=1) {
      do {
        echo "<td></td>\n";
        $nummer++;
      } while ($nummer!=$antalkolonner);
      echo "</tr>\n";
    }
    echo "</table>\n";
}


Den switch i mit tidligere forslag og if-do-while blokken her er for at sikre, at hvis antallet af rækker i databasen ikke går op i 3, så skal html-koden stadig være gyldig og der skal være det rigtige antal celler på alle rækker.
Avatar billede syswatch Novice
16. marts 2004 - 11:12 #9
Så fandt vi da frem til en løsning der virkede...
Jeg forstår desværre ikke helt hvordan og hvorledes, men jeg vil kigge lidt nærmere på det, og se om jeg kan lære at forstå systemet. :-)
Takker..
Avatar billede Slettet bruger
16. marts 2004 - 11:30 #10
Så kommer der en lidt mere kommenteret udgave her. Den gør nøjagtig det samme som lige før. Hvis du stadig er i tvivl om noget, så bare spørg.

$antalkolonner=3;

// Fik vi nogle rækker overhovedet?
if (mysql_num_rows($result)>0) {
    echo "<table width=570 border=1>";
    $nummer=1; //Når løkken starter er vi i kolonne nummer 1
    while( $row=mysql_fetch_assoc($result) ) {  // hent en række fra databasen.

// Hvis vi er i første kolonne, skal vi starte med en <tr>-tag
        if ($nummer==1) {
          echo "<tr>";
        }

// Alle kolonner skal have en <td> med et nick i.
        echo "<td width=190>";
        echo $row["nick"];
        echo "</td>\n";

// hvis vi er i sidste kolonne, skal vi slutte med en </tr>
        if ($nummer==$antalkolonner){
          echo "</tr>\n";

// og så klargør vi kolonnenummeret til næste gang.
          $nummer=1;
        } else {
// Her kunne jeg lige så godt have skrevet $nummer=$nummer+1; Det betyder det samme.
          $nummer++;
        }
    } // Her slutter while-løkken

// Nu er vi færdige med at hente fra databasen. Hvis nummer er 1, så
// har vi lige afsluttet en række oppe i while-løkken, og så skal der ikke ekstra celler på.
// Hvis nummer er noget andet end 1, så skal der fyldes ud med tomme celler, så tabellen ikke
// bliver deform.
    if ($nummer!=1) {

// en do {} while-løkke bliver kørt igennem mindst en gang.
// Hver gang den køres, laves der en tom celle, og kolonnenummeret forhøjes.
      do {
        echo "<td></td>\n";
        $nummer++;

// Hvis kolonnenummeret endnu ikke er oppe på det ønskede antal, så køres løkken igen.
      } while ($nummer!=$antalkolonner);
      echo "</tr>\n";
    }
    echo "</table>\n";
} // her slutter den if, der så efter om der var et resultat.
// Måske en ide med en else her til at skrive "Ingen resultater matchede din søgning."
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