vorige volgende rij selecteren in tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 4 volgende »

Pierre Web

Pierre Web

06/01/2017 13:25:24
Quote Anchor link
@Arien Bedankt maar kan het ff niet meer volgen.



@Eddy E

SELECT * FROM nieuws WHERE id > 7 LIMIT 0, 1 ORDER id ASC
die geeft overigens weer een fout zoals in post van 10:59:51 bij Order id
 
PHP hulp

PHP hulp

04/05/2024 22:46:01
 
Eddy E

Eddy E

06/01/2017 13:30:10
Quote Anchor link
Yep, het is ORDER BY en niet ORDER
Mijn fout.
Let wel dat je nog 'foutafhandeling' moet invoeren. Want bij de hoogste is er geen hogere en geeft dus een fout.
De query van Arien is daar beter, maar iets 'moeilijker'... (het is nu CTRL + C / CTRL + V)
 
- Ariën  -
Beheerder

- Ariën -

06/01/2017 13:32:03
Quote Anchor link
Wat volg je er nou niet aan mijn script? En waar loop je nou op vast?
En de volgorde is WHERE, ORDER, LIMIT.
 
Pierre Web

Pierre Web

06/01/2017 13:39:32
Quote Anchor link
- Ariën - op 06/01/2017 13:32:03:
Wat volg je er nou niet aan mijn script? En waar loop je nou op vast?
En de volgorde is WHERE, ORDER, LIMIT.


Ik weet niet hoe de vorige/volgende a tag te plaatsen
 
- Ariën  -
Beheerder

- Ariën -

06/01/2017 13:41:38
Quote Anchor link
In je whileloop kijk je met een if-statement of $row['id'] kleiner is dan $_GET['id'], in dat geval is het 'vorige'. En als $row['id'] groter is dan $_GET['id'] dan is het 'volgende'.
Gewijzigd op 06/01/2017 13:43:01 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

06/01/2017 14:26:43
Quote Anchor link
Quote:
Maar nu komt het ook voor dat een id er niet meer is bijv. id 1 , 2 , 4 (id 3 bestaat niet meer),

De oplossing voor dit probleem lijkt mij niet een (of meer) ingewikkelde query maar de introductie van een extra kolom waarin je een volgorde van je items vastlegt. Daar koppel je dan je navigatie aan, en niet aan je item-id's.
 
- Ariën  -
Beheerder

- Ariën -

06/01/2017 14:28:29
Quote Anchor link
Met gaten in de nummering houdt mijn query gewoon rekening mee.
Gewijzigd op 06/01/2017 14:29:04 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

06/01/2017 14:39:02
Quote Anchor link
Met een aparte (sluitende) nummering ga je dit probleem in het geheel uit de weg.

(toegegeven, om deze nummering sluitend te houden moet je wel op een andere plek wat meer werk verzetten, het is een tradeoff)
Gewijzigd op 06/01/2017 14:39:59 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

06/01/2017 14:49:47
Quote Anchor link
Ik ben wel benieuwd of dat de intenties van de topic starter zijn. Voor een overzicht van het volgende of vorige artikel heb je geen extra sortering nodig.
 
Thomas van den Heuvel

Thomas van den Heuvel

06/01/2017 15:12:21
Quote Anchor link
Hangt er vanaf of de volgorde van toevoegen gelijk is aan de volgorde van weergave. Op het moment dat je items anders wilt rangschikken is de introductie van een extra kolom voor dit doel praktischer.
 
Pierre Web

Pierre Web

06/01/2017 15:26:09
Quote Anchor link
Ik heb nu
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  
   $result = $mysqli->query($query_nieuws);
   while ($row = $result->fetch_assoc() ) {
   $id = $row['id'];
      $title = $row['title'];
             $id_get= mysqli_real_escape_string($mysqli, $_GET['id']);
if ($id_get < "$id") {
    echo '<a href="nieuws-test2.php?id='.$id.'">Volgende</a>';
}
else if ($id_get > "$id") {
    echo '<a href="nieuws-test2.php?id='.$id.'">Vorige</a>';
}
     }
 


ik heb een id van 1 t/m 23 , id 11 heb ik niet


Ik kom met Vorige tot id 1 (GET) en inhoud id 2 van tabel wordt weergegeven.(1 dus niet)
met Volgende kom ik tot id 23 (GET) en inhoud id 22 van tabel word weergegeven. (23 dus niet)
 
- Ariën  -
Beheerder

- Ariën -

06/01/2017 15:41:02
Quote Anchor link
Je kan in je loop gewoon $_GET['id'] gebruiken zonder real_escape_string.

En wil je dus 1 vorige en 1 volgende zien?
Gewijzigd op 06/01/2017 16:08:09 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

06/01/2017 15:47:57
Quote Anchor link
- Ariën - op 06/01/2017 15:41:02:
Je kan in je loop gewoon $_GET['id'] gebruiken zonder escaping.

Dat lijkt mij niet verstandig. Escape altijd output. Maar dan wel op de goede manier. real_escape_string() doet niet zoveel in HTML hé. Gebruik in HTML htmlspecialchars(). En in URLs mogelijk ook urlencode(). Of wellicht eenvoudiger (en meer van toepassing in deze situatie): filter je input. Controleer allereerst of $_GET['id'] een numerieke waarde heeft.

Los hiervan, dit alles lijkt nogal veel op pagineringsfunctionaliteit (ook al toon je maar één item per keer). Misschien kan de oplossing meer in die hoek gezocht worden. Of je maakt gebruik van een volgorde kolom :p.
Gewijzigd op 06/01/2017 15:50:22 door Thomas van den Heuvel
 
Pierre Web

Pierre Web

06/01/2017 15:54:54
Quote Anchor link
url ... /nieuws-test2.php?id=1

dan verschijnt de inhoud van tabel id 2 (ik kom dus niet tot de inhoud van id 1 .


url ... /nieuws-test2.php?id=23

dan verschijnt de inhoud van tabel id 22 (ik kom niet tot de inhoud van id 23.


Vorige en Volgende werkt wel goed , als er geen volgende is verschijnt die ook niet en andersom,
of ze verschijnen beiden indien van toepassing.
Gewijzigd op 06/01/2017 15:57:59 door Pierre Web
 
- Ariën  -
Beheerder

- Ariën -

06/01/2017 16:12:03
Quote Anchor link
Ik zou dan geen elseif gebruiken, maar twee if-jes.
Gewijzigd op 06/01/2017 16:18:21 door - Ariën -
 
Pierre Web

Pierre Web

06/01/2017 16:24:06
Quote Anchor link
Dan krijg ik bij de laatste Volgende en als ik die kies ga ik weer een terug naar 22

nieuws-test2.php?id=22

Van de $id zal EEN moeten worden afgetrokken ...? maar in test word dan telkens EEN id overgeslagen.
Gewijzigd op 06/01/2017 16:25:31 door Pierre Web
 
- Ariën  -
Beheerder

- Ariën -

06/01/2017 16:46:38
Quote Anchor link
Wat heb je nu allemaal aan code?
 
Pierre Web

Pierre Web

06/01/2017 17:11:46
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  
$query_nieuws = ("SELECT
   * FROM `nieuws` WHERE ( id = IFNULL((SELECT MIN(id) FROM `nieuws` WHERE id > $id),0)
        OR id = IFNULL((SELECT MAX(id) FROM `nieuws` WHERE id < $id),0))
   ");
   $result = $mysqli->query($query_nieuws);
   while ($row = $result->fetch_assoc() ) {
   $id = $row['id'];
      $title = $row['title'];
             $id_get= mysqli_real_escape_string($mysqli, $_GET['id']);
if ($id_get < "$id") {
    echo '<a href="nieuws-test2.php?id='.$id.'">Volgende</a>';
}
else if ($id_get > "$id") {
    echo '<a href="nieuws-test2.php?id='.$id.'">Vorige</a>';
}
     }
 


twee ifjes zorgde dus voor ander probleempje.
Gewijzigd op 06/01/2017 17:13:08 door Pierre Web
 
- Ariën  -
Beheerder

- Ariën -

06/01/2017 20:38:03
Quote Anchor link
Wat voor probleem dan? Je wilt toch volgende en/of volgende tonen?

Dan zou dit moeten werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$id
= $mysqli->real_escape_string($_GET['id']); // Escapen is BELANGRIJK
$query_nieuws = "SELECT * FROM `nieuws`
         WHERE ( id = IFNULL((SELECT MIN(id) FROM `nieuws` WHERE id > $id),0)
                OR id = IFNULL((SELECT MAX(id) FROM `nieuws` WHERE id < $id),0))
"
;
   $result = $mysqli->query($query_nieuws);
   while ($row = $result->fetch_assoc() ) {
    if ($row['id'] < $id) {
            echo '<a href="nieuws-test2.php?id='.$row['id'].'">Vorige</a>';
    }


    if ($row['id'] > $id) {
           echo '<a href="nieuws-test2.php?id='.$row['id'].'">Volgende</a>';
    }
     }

?>


Edit: Volgorde was fout, aangepast.
Gewijzigd op 07/01/2017 10:37:09 door - Ariën -
 
Pierre Web

Pierre Web

07/01/2017 10:56:11
Quote Anchor link
Ik heb rij 1 t/m 23 met id 1 t/m 23 ( er was geen id 11 maar die heb ik ff toegevoegd voor test
kijken of dit onderstaande oploste maar maakt niks uit.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
Deze moet andersom ff terzijde (Vorige/Volgende).
// Vorige eerst
 if ($id < $row['id']) {
            echo '<a href="nieuws-test2.php?id='.$row['id'].'">Vorige</a>';
    }

    if ($id > $row['id']) {
           echo '<a href="nieuws-test2.php?id='.$row['id'].'">Volgende</a>';
    }



Url is: nieuws-test2.php?id=1 , dan komt het content VAN id 2. (kom niet verder terug, er is geen VORIGE meer )
het content van id 1 blijf dus buiten bereik

Om het content van id 1 weer te geven heb ik nieuws-test2.php?id=0 nodig (NUL), maar er is geen ID NUL

Url is nieuws-test2.php?id=23 , dan komt het content VAN id 22. (kom niet verder vooruit er is geen VOLGENDE meer)
het content van id 23 blijf dus buiten bereik.

Om het content VAN id 23 weer te geven heb ik nieuws-test2.php?id=24 nodig (24) maar er is geen ID 24
Gewijzigd op 07/01/2017 10:58:51 door Pierre Web
 

Pagina: « vorige 1 2 3 4 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.