Avatar billede bertelsenbo Nybegynder
27. juni 2004 - 18:20 Der er 16 kommentarer og
1 løsning

Automatisk sortering af resultater, "Næste 9" osv.

Titlen er vel lidt forvirrende, men lad mig uddybe det her.

Vi har en php-side (lad os kalde den vis.php) med 1 tabbeller, 9 celler (3*3) og en masse data i vores mysql database. Det jeg skal have hjælp til er: Sæt alle resultaterne ind (nyest først, sorteret efter id), og når alle 9 pladser er brugt op skal den linke til de næste 9 (tænkte på noget i stil med vis.php?side=2 ). udover det skal den vise hvor mange sider der er. ( Side 1 2 3 4 5 ).

Burde ikke være så svært, men jeg er klaphat. Håber i forstår mig, hvis ikke finder jeg lige et link som eksempel.
Avatar billede jaw Nybegynder
27. juni 2004 - 18:27 #1
Yes, forstår :)

Definer en
$prside = 9;

I den query der udhenter, sætter du LIMIT $start, $prside så vil den udhente 9 ad gangen...

Paste lidt kode, hvis du vil have jeg skal vise hvor det skal indsættes...
Avatar billede jaw Nybegynder
27. juni 2004 - 18:32 #2
altså, $start kan have en værdi på 0 (første side), 9 (anden side), 18 (tredje side) og så vil din LIMIT omskrevet se sådan ud:

første side:
LIMIT 0, 9
anden side:
LIMIT 9, 9
tredje side:
LIMIT 18, 9

Det er princippet bag
Avatar billede jaw Nybegynder
27. juni 2004 - 19:01 #3
Nærlæste lige hele dit spørgsmål, og hvis det er hele scriptet du faktisk er ude efter, så skulle det her vist kunne klare det mere eller mindre:

$prside = 9;

if(isset($_GET['s'])) {
  $s = $_GET['s'];
  $start = $s;
} else {
  $s = 0;
  $start = 0;
}

$q = mysql_query("SELECT * FROM tabelnavn ORDER BY id DESC LIMIT $start, $prside") or die(mysql_error());
while ($row = mysql_fetch_array($q)) {
  //hvad det nu end er du vil echo'e eller på anden måde behandle
}


//variabler til næste/tilbage-knapper samt side-antal-knapper
  $antal = mysql_num_rows(mysql_query("SELECT * FROM tabelnavn"));
  $PHP_SELF = $_SERVER['PHP_SELF'];
  $naeste = $s + $prside;
  $tilbage = $s - $prside;
    $antal_sider = ceil($antal / $prside);
     
//næste-knappen
  if($naeste < $antal) {
    echo "<a href='$PHP_SELF?s=$naeste'>Næste</a>";
  } else {
      echo "Næste";
  }

//side 1, 2, 3 etc.
  for($i = 1; $i <= $antal_sider; $i++) {
      $page = ($i * $prside) - $prside;
      if($page != $s) {
        echo " <a href='" . $_SERVER['PHP_SELF'] . "?s=$page'>" .  $i . "</a> ";
      } else {
          echo " <b>$i</b> ";
    }
  }

// tilbage-knappen 
  if($tilbage >= 0) {
    echo "<a href='$PHP_SELF?s=$tilbage'>Tilbage</a>";
  } else {
      echo "Tilbage";
  }
Avatar billede bertelsenbo Nybegynder
27. juni 2004 - 19:52 #4
Har ikke lige fået det testet endnu, men ser fint ud.
En ting som jeg heller ikke lige kan finde ud af (en ret let ting, men jeg er jo en klaphat) er selve det den skal echo´e.

--------------------------------------

  <table width="100%" height="100%">
    <tr>
      <td width="33%" height="33%"> input </td>
      <td width="33%" height="33%"> input </td>
      <td width="33%" height="33%"> input </td>
    </tr>
    <tr>
      <td width="33%" height="33%"> input </td>
      <td width="33%" height="33%"> input </td>
      <td width="33%" height="33%"> input </td>
    </tr>
    <tr>
      <td width="33%" height="33%"> input </td>
      <td width="33%" height="33%"> input </td>
      <td width="33%" height="33%"> input </td>
    </tr>
  </table>

--------------------------------------

Hvordan skal den så echoes? Det har jeg for lidt små grå til at finde ud af.
Avatar billede jaw Nybegynder
27. juni 2004 - 19:55 #5
Du kan bruge:

echo"
  <table width='100%' height='100%'>
    <tr>
      <td width='33%' height='33%'> input </td>
      <td width='33%' height='33%'> input </td>
      <td width='33%' height='33%'> input </td>
    </tr>
    <tr>
      <td width='33%' height='33%'> input </td>
      <td width='33%' height='33%'> input </td>
      <td width='33%' height='33%'> input </td>
    </tr>
    <tr>
      <td width='33%' height='33%'> input </td>
      <td width='33%' height='33%'> input </td>
      <td width='33%' height='33%'> input </td>
    </tr>
  </table>";


har skiftet alle dine " ud med '
Avatar billede bertelsenbo Nybegynder
27. juni 2004 - 20:01 #6
Vidste jeg faktisk godt. Men jeg tænkte på $input! Hvis man bare gør sådan her:

echo"
  <table width='100%' height='100%'>
    <tr>
      <td width='33%' height='33%'> " . $input " </td>
      <td width='33%' height='33%'> " . $input " </td>
      <td width='33%' height='33%'> " . $input " </td>
    </tr>
    <tr>
      <td width='33%' height='33%'> " . $input " </td>
      <td width='33%' height='33%'> " . $input " </td>
      <td width='33%' height='33%'> " . $input " </td>
    </tr>
    <tr>
      <td width='33%' height='33%'> " . $input " </td>
      <td width='33%' height='33%'> " . $input " </td>
      <td width='33%' height='33%'> " . $input " </td>
    </tr>
  </table>";

Er det så ikke kun input fra den første id der bliver vist 9 gange? Og så bliver tabbellen vist 9 gange? Mener ikke den holder i praksis hvis man gør sådan som jeg lige har gjort.
Avatar billede bertelsenbo Nybegynder
27. juni 2004 - 20:02 #7
Hov, fiks lige selv et ekstra " . " efter $input
Avatar billede jaw Nybegynder
27. juni 2004 - 20:03 #8
Her er jeg lidt i tvivl om hvad du mener... Hvor kommer $input fra? Fra databasen? Kan du så ikke lige smide din query?
Avatar billede bertelsenbo Nybegynder
27. juni 2004 - 20:13 #9
Puha, jeg bliver sq også lige forvirret. Skal lige bruge lidt tid.
Avatar billede bertelsenbo Nybegynder
27. juni 2004 - 20:24 #10
Jeg bliver lige nødt til at komme med en længere søforklaring:
Jeg har prøvet at skrive (der hvor du har skrevet "//hvad det nu end er du vil echo'e eller på anden måde behandle")

--------------

extract($row);
print "Nemlig ja: " . $navn . "<br>";

--------------

Og der virker jo fint! Men nu skal jeg have den her 3*3 tabel ind!

--------------

extract($row);

echo "
<table width='100%' height='100%'>
    <tr>
      <td width='33%' height='33%'> " . $navn . " </td>
      <td width='33%' height='33%'> " . $navn . " </td>
      <td width='33%' height='33%'> " . $navn . " </td>
    </tr>
    <tr>
      <td width='33%' height='33%'> " . $navn . " </td>
      <td width='33%' height='33%'> " . $navn . " </td>
      <td width='33%' height='33%'> " . $navn . " </td>
    </tr>
    <tr>
      <td width='33%' height='33%'> " . $navn . " </td>
      <td width='33%' height='33%'> " . $navn . " </td>
      <td width='33%' height='33%'> " . $navn . " </td>
    </tr>
  </table>";

--------------

Så laver den jo en 3*3 tabel med det SAMME $navn for hvert $navn (dvs 9 gange 3*3 tabbeller). Den skal jo kun lave én 3*3 tabel, med et forskelligt navn i hver celle! Hvordan gør jeg det? Hvis du ikke forstår mig kan du jo prøve scriptet og se hvad jeg mener.
Avatar billede jaw Nybegynder
27. juni 2004 - 20:42 #11
Tjah, tjoh... Men kan du ikke paste den kode hvor du også udhenter det fra databasen?
Avatar billede jaw Nybegynder
27. juni 2004 - 20:50 #12
Tror nok jeg forstår, og tror du skal ud i noget a'la:

//din SELECT-query
$i = 1;
echo "<table width='100%' height='100%'><tr>";

while($row = mysql_fetch_array(din-query)) {
  if($i = 3) {
    echo"</tr><tr>";
    $i = 1";
  }
  echo"<td width='33%' height='33%'> " . $navn . " </td>";
  $i++;
}
echo"<tr></table>";

...skal lige spise, så kan jeg også lige få det testet - den her er utestet...
Avatar billede bertelsenbo Nybegynder
27. juni 2004 - 20:58 #13
Netop det jeg mente, kan ikke lige få den til at virke. Og min query er den du har lavet!

---------------------------------

$q = mysql_query("SELECT * FROM s_msg ORDER BY id DESC LIMIT $start, $prside") or die(mysql_error());
echo "<table width='100%' height='100%'><tr>";
$i = 1;
while ($row = mysql_fetch_array($q)) {
extract($row);

if($i = 3) {
    echo"</tr><tr>";
    $i = 1";
  }
  echo"<td width='33%' height='33%'> " . $navn . " </td>";
  $i++;
}
echo"<tr></table>";

---------------------------------


Så langt er jeg nået.
Avatar billede bertelsenbo Nybegynder
27. juni 2004 - 21:08 #14
Hold da kæft det virker sq.

---------------------------------

$q = mysql_query("SELECT * FROM s_msg ORDER BY id DESC LIMIT $start, $prside") or die(mysql_error());
echo "<table width='100%' height='100%'><tr>";
$i = 0;
while ($row = mysql_fetch_array($q)) {
extract($row);

if($i == 3) {
    echo"</tr><tr>";
  }

if($i == 6) {
    echo"</tr><tr>";
  }

echo"<td width='33%' height='33%'> " . $navn . " </td>";
$i++;
}
echo"<tr></table>";

---------------------------------

Nu virker det med (dobbelt = ).

Medmindre du har noget at tilføje så lav lige et svar, så får du point.
Avatar billede jaw Nybegynder
27. juni 2004 - 21:44 #15
Naah, det skulle være ==, det var direkte en fejl fra min side :)

Og på forhånd tak :)
Avatar billede jaw Nybegynder
27. juni 2004 - 21:53 #16
Den her:
if($i == 3) {
    echo"</tr><tr>";
  }

if($i == 6) {
    echo"</tr><tr>";
  }

kan du omskrive til:
if(!($i%3)) {
  echo"</tr><tr>";
}
...hvis du vil...
Avatar billede bertelsenbo Nybegynder
27. juni 2004 - 21:53 #17
tak for hjæplen
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