Gå til innhold

PHP - finne neste ID


Anbefalte innlegg

Føler jeg har postet en del tråder her i det siste, men det får bare være. Jeg har så langt dette av koding.

 

        if (isset($_GET['id'])) {
           $id = intval($_GET['id']);
           $result = mysql_query("SELECT * FROM people WHERE side_id='1' AND id=$id LIMIT 5") or die ("Kunne ikke koble til databasen. " . mysql_error());

           if(mysql_num_rows($result)==0) {
	echo '<META HTTP-EQUIV="Refresh" Content="0; URL=index.php">';    
	exit;
           } else {
               while ($row = mysql_fetch_assoc($result)) {
                   echo "<div class=\"picture\">";
                   echo "<p>";

                   // Link
	    $id = $_GET["id"];
	    echo "<a href='".($id+1)."'>";
                   echo "<img src=\"../uploads/" . $row['filename'] . "\" alt=\"\" />";
	    echo "</a>";
                   echo "</p>";
                   echo "</div>";
               }
           }
       }

 

Hvis du ser på delen som jeg har listet nedenfor så ser du at det er en link som legger til 1 "ID" når man trykker på den. Det jeg da ønsker er at den skal finne neste ID av seg selv, siden jeg får store hopp som f. eks fra 4 til 9. Grunnen til dette er at jeg viser kun innholdet for de "entriene" i databasen som har side ID 1.

 

		    $id = $_GET["id"];
	    echo "<a href='".($id+1)."'>";
                   echo "<img src=\"../uploads/" . $row['filename'] . "\" alt=\"\" />";
	    echo "</a>";

Endret av Rigo
Lenke til kommentar
Videoannonse
Annonse

Altså, jeg har bildes navn lagret i en database, og hvert bilde har sin egen ID. Et par av disse bildene vil få en "side ID", som f. eks iPhone=1, og iPad=2. Dette har egentlig ikke mye med saken å gjøre, for spørsmålet mitt er egentlig hvordan jeg kan finne neste ID automatisk. Fordi akkurat nå har bilde 4, altså ID 4, side ID 1 og bilde 9, altså ID 9, side ID 1.

 

Jeg ønsker å finne en måte å lage en link som finner ut av seg selv at neste ID er 9 når du er på 4.

Lenke til kommentar

Hvis du legger dette etter

} else {

i koden din så får du ut neste id.

 

// Neste Bilde
$result = mysql_query("SELECT id FROM people WHERE side_id='1' AND id>$id ORDER BY id ASC LIMIT 1") or die ("Kunne ikke koble til databasen. " . mysql_error());

// Denne linja trenger du ikke men den kan være fin senere til å finne siste bilde osv.
$num = mysql_num_rows($result);

$row = mysql_fetch_array($result);
echo "ID for neste bilde: ".$row['id'];	

 

Håper det hjelper deg litt på vei :cool:

Lenke til kommentar

Nei, beklageligvis ikke. Kom meg ikke noe videre med det der, for problemet mitt er å finne neste ID automatisk. Akkurat nå så linker den kun til neste ID som er listet, noe som ikke funker fordi jeg har store hopp mellom ID'ene.

Lenke til kommentar

Tom_ har rett.. jeg har prøvd å sette sammen koden til deg...

 

       if (isset($_GET['id'])) {
           //Nåværende bildeID
           $id = intval($_GET['id']);

// Neste Bilde
$result = mysql_query("SELECT id FROM people WHERE side_id=1 AND id > $id ORDER BY id LIMIT 1") or die ("Kunne ikke koble til databasen. " . mysql_error());

// Denne linja trenger du ikke men den kan være fin senere til å finne siste bilde osv.
$num = mysql_num_rows($result);

$row = mysql_fetch_array($result);
$nesteID = intval($row['id']); 


           $result = mysql_query("SELECT * FROM people WHERE side_id = 1 AND id = $id LIMIT 5") or die ("Kunne ikke koble til databasen. " . mysql_error());

           if(mysql_num_rows($result)==0) {
               echo '<META HTTP-EQUIV="Refresh" Content="0; URL=index.php">';    
               exit;
           } else {
               while ($row = mysql_fetch_assoc($result)) {
                   echo "<div class=\"picture\">";
                   echo "<p>";

                   // Link
                   echo "<a href='".($nesteID)."'>";
                   echo "<img src=\"../uploads/" . $row['filename'] . "\" alt=\"\" />";
                   echo "</a>";
                   echo "</p>";
                   echo "</div>";
               }
           }
       }

Lenke til kommentar

En enkel sql-spørring burde gjør nok susen.. Hvor du da går frem simpelthen noe ala:

>>> WHERE `id`>'{$id}'

>>> ORDER BY `id`

 

Da vil du hente ut nermeste, som er større en nåverende id.. Evt mindre <.

 

Fungerer kansje:

		while ($row = mysql_fetch_assoc($result)) {
                   echo "<div class=\"picture\">";
                   echo "<p>";

                   // Link
                   $id = mysql_real_escape_string($row["id"]);
	    $next = mysql_fetch_array(mysql_query("SELECT * FROM people WHERE `side_id`=1 AND `id`>'$id' ORDER BY `id` LIMIT 1"));
                   echo "<a href='". $next['id'] ."'>";
                   echo "<img src=\"../uploads/" . $row['filename'] . "\" alt=\"\" />";
                   echo "</a>";
                   echo "</p>";
                   echo "</div>";
               }

 

Edit: Nå ser jeg at xibrix postet noe ligenende, har ikke hele lest koden hans. Men fremgangsmåten SKAL fungere.

Endret av warpie
  • Liker 1
Lenke til kommentar

Det kan være en ide og bytte dette feltet fra ENUM til INT,

da det kan gjøre ting lettere i fremtiden når du får lyst til å utvide kategoriene dine.

 

ENUM feltet krever pre-definerte verdier

mens INT feltet kan du utvide nesten ubegrenset.

 

:new_woot:

Lenke til kommentar

Hvorfor har du tatt META-koding med refresh for å gå tilbake til index ved tomt resultat? Er det ikke bedre å gjøre dette ved hjelp av header?

 

            if(mysql_num_rows($result)==0) {
               echo '<META HTTP-EQUIV="Refresh" Content="0; URL=index.php">';    
               exit;            } else {

 

med

 

if(mysql_num_rows($result)==0)  
{ header('Location: index.php');
exit;
} else {

Endret av Icetears
Lenke til kommentar

Er da ingen problemer ved å bruke META REFRESH, sett bort i fra at det er en tregere funksjon...

Men, som personen over meg nevner, så er header et bedre alternativ. Om du får en error alà "Header is already sent.." så er løsningen å bruke ob_start(); ob_end_flush(); om jeg husker rett. Se PHP.net for vidre info om disse.

 

Evt. så kan du bruke js:

<script type='text/javascript'>
   document.location.href='index.php'
</script>


Men, som nevnt META REFRESH fungerer bare fint for de fleste :)

Endret av warpie
Lenke til kommentar

Tenkte selv på å bruke header, men ender opp med en error så fort jeg legger den inn. Det er grunnen til at jeg bruker Meta. Er selv ikke fornøyd med hastigheten, ettersom siden først laster inn, og så redirigerer deg.

 

Som sagt, koden nedenfor gir meg en feilmelding.

if(mysql_num_rows($result)==0)  
{ header('Location: index.php');
exit;
} else {

 

Koden nedenfor her funker fint, men skulle ønske at det var en måte å få header til å funke, siden det er ikke alle som har javascript på, og du vil da ikke bli redirigert. Fikk heller ikke noe ut av ob_start(); ob_end_flush().

<script type='text/javascript'>
   document.location.href='index.php'
</script>

Lenke til kommentar

Warning: Cannot modify header information - headers already sent by (output started at /..massetekst../header.php:9) in /..massetekst../index.php on line 11. Inkluderer 3 filer før jeg skal "outpute" headeren. Vet ikke om dette har noen betydning, men dette er linje 11 i index.php filen: header('Location: index.php');

Endret av Rigo
Lenke til kommentar

Vel, jeg "krever" en config fil, så hvor kan jeg da legge header koden? Jeg krever først config filen, så inkluderer jeg en header fil, så kommer koden dere har sett tidligere, så inkluderer jeg en footer. Hvordan kan jeg legge inn en header redirigering da?

Lenke til kommentar

Løsningen fo headermodifisering er skrevet i en tidligere post.. Videre så annbefaler jeg deg igjen å ta en titt på php.net

 

Du kan også bruke javascript (viser til tidligere post). Da slipper du å start/stoppe output buffering.

 

ob_start(); 

/*
ALL HTML (og annet etter behag) KODE MÅ INNENFOR HER, INK. HEADER (<head>) ETC..
*/

ob_end_flush();

Endret av warpie
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...