vorige volgende rij selecteren in tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 4 volgende »

- Ariën  -
Beheerder

- Ariën -

07/01/2017 11:10:43
Quote Anchor link
Dit toont alleen de vorige en/of volgende content, en NIET de content van je huidige ID uit je URL.

En het record van ID 1 zie je dan toch vanuit id 2? Die 0 lijkt me niet van belang?
Gewijzigd op 07/01/2017 11:16:02 door - Ariën -
 
PHP hulp

PHP hulp

16/11/2024 02:53:19
 
Pierre Web

Pierre Web

07/01/2017 14:01:48
Quote Anchor link
Ik geef alleen aan zoals het nu is nul is als voorbeeld

Vanuit id 1 (GET) zie ik de inhoud van het record van id 2. (tabel) dus een id meer

Maar ik kom niet aan record 1(eerste) en record 23 (laatste)


Bij nieuws-test2.php?id=1 wordt record 2 getoond en alleen VOLGENDE , hoe kom ik nou aan de inhoud van record EEN.
Voor het laatste record hetzelfde maar dan omgekeerd, ik kom niet aan record 23.
 
- Ariën  -
Beheerder

- Ariën -

07/01/2017 14:10:11
Quote Anchor link
Waar gebruik je het script precies voor? Leg dat eens duidelijk uit?
Want het klinkt alsof je onder een nieuwsbericht wilt tonen wat het voorgaande en het opvolgende nieuwsbericht is, als die bestaat? Klopt dat?

Ik heb dit script uitgetest op de database van mijn site, en daar werkt hij prima op.
Als je de inhoud van je $_GET['id'] op wilt halen, moet je een aparte query draaien.

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
19
20
21
22
23
24
25
26
27
<?php
if(isset($_GET['id'])) {
    $id = $mysqli->real_escape_string($_GET['id']); // Escapen is BELANGRIJK
    $query_prefnext = "SELECT * FROM `news`
         WHERE ( id = IFNULL((SELECT MIN(id) FROM `news` WHERE id > '"
.$id."'),0)
            OR id = IFNULL((SELECT MAX(id) FROM `news` WHERE id < '"
.$id."'),0))
    "
;
       $query_news = "SELECT title FROM news WHERE id = '".$id."'";
       $result =  $mysqli->query($query_news);
       $data = $result->fetch_assoc();
       echo "<h1>".$data['title']."</h1>";
      
       /* SHOW prev-next links*/
       $result = $mysqli->query($query_prefnext);
       while ($row = $result->fetch_assoc() ) {
        if ($row['id'] < $id) {
        echo '&lt; <a href="prefnext.php?id='.$row['id'].'">Vorige: '.$row['title'].'</a> ';
        }


        if ($row['id'] > $id) {
           echo ' <a href="prefnext.php?id='.$row['id'].'">Volgende: '.$row['title'].'</a> &gt;';
        }
    }
}
else {
    echo "Geef een ID mee!";
}

?>

Zo heb ik hem werkend op mijn site.
Gewijzigd op 07/01/2017 16:03:40 door - Ariën -
 
Pierre Web

Pierre Web

07/01/2017 14:42:40
Quote Anchor link
Klopt, ik heb een nieuws-overzicht.html pagina ,bevat een lijst met overzicht van nieuws:

1-nieuws1 kies ik hiervoor kom ik op pagina nieuws.php met betreffend nieuws met inhoud van record 1 met
id 1 nieuws.php?id=1
2-nieuws2 kies ik hiervoor komt pagina met nieuws van id 2 nieuws.php?id=2
..
..
23-nieuws23.

ik wil dus op deze nieuws.php pagina door het vorige en volgende nieuws `bladeren`

Jou nieuwe code moet ik nog testen.
Gewijzigd op 07/01/2017 14:43:36 door Pierre Web
 
- Ariën  -
Beheerder

- Ariën -

07/01/2017 14:46:20
Quote Anchor link
Zonder interpuncties kan ik weinig touw vastknopen aan je voorbeeld, maar ik denk dat mijn script precies is wat je wilt, en dus twee dingen:

- Huidige nieuwsbericht tonen aan de hand van het ID in de URL
- Een linkje geven van het vorige en/of het volgende bericht, mits die bestaat.

Dus dan krijg je twee queries.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/01/2017 15:01:30
Quote Anchor link
Twee queries is niet eens nodig, je mag queries die één waarde teruggeven ook opnemen in de select:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT
    n.*,
    (SELECT IFNULL(MAX(id), 0) FROM nieuws WHERE id < n.id) prev_id,
    (SELECT IFNULL(MIN(id), 0) FROM nieuws WHERE id > n.id) next_id
FROM
    nieuws n
WHERE
    n.id = 1234
Gewijzigd op 07/01/2017 15:03:06 door Ger van Steenderen
 
Pierre Web

Pierre Web

07/01/2017 15:12:06
Quote Anchor link
- Ariën - op 07/01/2017 14:46:20:
Zonder interpuncties kan ik weinig touw vastknopen aan je voorbeeld, maar ik denk dat mijn script precies is wat je wilt, en dus twee dingen:

- Huidige nieuwsbericht tonen aan de hand van het ID in de URL
- Een linkje geven van het vorige en/of het volgende bericht, mits die bestaat.

Dus dan krijg je twee queries.



Bedank dat schijnt goed te gaan , ook als er een id is die niet meer bestaat.

Kijken hoe ik de vorige volgende ook BOVEN het content kan krijgen (lijkt me handig maar is een optie)
 
- Ariën  -
Beheerder

- Ariën -

07/01/2017 15:16:49
Quote Anchor link
Kwestie van de echo's en de bijbehorende functionaliteit omwisselen.

@Ger: Die query is ook tof, alleen kan je daarmee geloof ik niet de data van die vorige/volgende records ophalen, en alleen het ID ermee ophalen.
 
Thomas van den Heuvel

Thomas van den Heuvel

07/01/2017 16:01:45
Quote Anchor link
Escapen is inderdaad belangrijk... Maar dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$id
= $mysqli->real_escape_string($_GET['id']); // Escapen is BELANGRIJK
$query_prefnext = "SELECT * FROM `news`
    WHERE ( id = IFNULL((SELECT MIN(id) FROM `news` WHERE id > $id),0)
    OR id = IFNULL((SELECT MAX(id) FROM `news` WHERE id < $id),0))"
;
?>

Is *niet* veilig omdat $id niet tussen quotes staat. Hier is nog steeds SQL-injectie mogelijk.

real_escape_string() escaped niets als er niets te escapen valt.

Als je voor $_GET['id'] het volgende invult:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
5 OR 1=1

Dan werkt dit gewoon.

Daarom is het zaak dat je de delen die je escaped ook voorziet van quotes. Het een is niet veilig zonder het ander.

Daarnaast zou je natuurlijk ook kunnen overwegen om je input te filteren (door te kijken of $_GET['id'] een numerieke waarde heeft).
Gewijzigd op 07/01/2017 16:02:07 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

07/01/2017 16:34:17
Quote Anchor link
Over het hoofd gezien, en gefixt. Zelf pas ik het altijd toe.
 
Pierre Web

Pierre Web

07/01/2017 17:09:07
Quote Anchor link
Waar moeten die quote precies komen, leren over veiligheid is altijd meegenomen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
  $id = $mysqli->real_escape_string($_GET['id']);
 
- Ariën  -
Beheerder

- Ariën -

07/01/2017 17:34:02
Quote Anchor link
Zo hoort het dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$query_prefnext = "SELECT * FROM `news`
         WHERE ( id = IFNULL((SELECT MIN(id) FROM `news` WHERE id > '".$id."'),0)
            OR id = IFNULL((SELECT MAX(id) FROM `news` WHERE id < '".$id."'),0))
    ";
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/01/2017 21:19:50
Quote Anchor link
- Ariën - op 07/01/2017 15:16:49:
@Ger: Die query is ook tof, alleen kan je daarmee geloof ik niet de data van die vorige/volgende records ophalen, en alleen het ID ermee ophalen.

Dat klopt, de query geeft alleen de id's van het vorige en volgende record, maar dat is volgens mij ook voldoende.
 
- Ariën  -
Beheerder

- Ariën -

07/01/2017 21:23:32
Quote Anchor link
Voor de topicstarter wel, tenzij je een titel wilt gebruiken.
 
Pierre Web

Pierre Web

08/01/2017 11:09:52
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
  $query_news = "SELECT * ,
       DATE_FORMAT(datum,'%d-%M-%Y') as datum_eu
        FROM ..


PHP v7

Ik krijg nu als maand january (Engels)
kan ik in de query iets meegeven zodat de maand in Nederlands wordt geprint?(soort van Set locale)
nu zet ik ze alle 12 met en conditie om naar Nederlands.

Wat de titel betreft , was oorspronkelijk niet de bedoeling , maar is wel een leuke optie.
Ik heb die in een <span class="hidden-xs"> gezet , op kleine schermen laat ik die weg en gebruik alleen < >


Bedankt voor jullie reacties.
Gewijzigd op 08/01/2017 11:11:40 door Pierre Web
 
- Ariën  -
Beheerder

- Ariën -

08/01/2017 11:30:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$mysqli->query("SET lc_time_names = 'NL_nl'");
setlocale(LC_ALL, 'NL_nl');


Dit gebruik ik om voor MySQL de juiste locale te gebruiken, en de andere voor PHP (bijv. strftime()). Ik geloof dat Windows er niet mee kan omgaan, althans, dat merk ik.
Gewijzigd op 08/01/2017 11:35:37 door - Ariën -
 
Ben van Velzen

Ben van Velzen

08/01/2017 13:06:50
Quote Anchor link
Bij mijn weten is het nl_NL, niet NL_nl.
Overigens kan Windows er wel mee omgaan, maar de naamgeving is anders. Iets als nld_nld zou moeten werken.
 
Pierre Web

Pierre Web

08/01/2017 16:20:11
Quote Anchor link
Klopt moet zijn

$mysqli->query("SET lc_time_names = 'nl_NL'");

Ik had het al gezien in een andere post , maar werkte dus niet omdat NL verkeerd stond
 
- Ariën  -
Beheerder

- Ariën -

08/01/2017 16:49:36
Quote Anchor link
Hmmm.... Ik zal eens kijken hoe dit zit. Naar mijn weten heeft het ook zo gewerkt. Toch eens controleren zo. ;-)
En die 'nld_nld' wist ik nog niet.
Bedankt!
 
Pierre Web

Pierre Web

09/01/2017 18:56:02
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
    $content1 = substr($row['content'], 0, 200); // 1e print 1e 200tekens
    $content2 = $content1; //2e (test regel)
    $content3 = preg_replace("/<img[^>]+\>/i", " ", $content2);  //3e Haal img tag uit content.

echo $content3:


de 1e haalt alleen de 1e 200 tekens uit content.
de 3e verwijder de IMG tag
Solo werkt het wel , maar zoals code hierboven alleen de 1e 200 tekens , de IMG wordt er niet uitgehaald.
iemand een idee hoe deze te combineren , zodat de 1e 200 tekens worden geprint EN de img tag verwijderd.
 

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.