output sql query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Marina janssen

marina janssen

27/12/2015 17:31:00
Quote Anchor link
Als de output van een sql query honderden resultaten geeft, hoe kan ik dan zorgen
dat er bijv. max 25 per blz worden weergegeven?
 
PHP hulp

PHP hulp

28/11/2021 03:27:52
 
Marthijn Buijs

Marthijn Buijs

27/12/2015 18:09:52
Quote Anchor link
Jammer dat je niet eerst op Google hebt gekeken en je vraag gewoon hier stelde..
 
Bo Ter Ham

Bo Ter Ham

27/12/2015 18:15:02
Quote Anchor link
Dit noemt men een pagination, als je op google zoekt op PHP pagination o.i.d. dan zul je zeker goede voorbeelden tegenkomen. Meestal krijg je dan de volgende constructie:

1. Je hebt in de URL een paginanummer (bijv: www.mijnwebsite.nl/artikelen.php?page=1). Dit paginanummer kun je d.m.v. GET uit de URL halen.
2. Vervolgens moet je bepalen welke data er bij dit pagina nummer hoort. Bij 1 wil je de eerste 25 records ophalen, dit kun je met een LIMIT in je query voor elkaar krijgen. Bij 2 haal je 25 t/m 50 op etc.
3. Als laatste wil je knoppen laten zien naar de vorige/volgende pagina. Hier kom je denk ik wel uit.
Gewijzigd op 27/12/2015 19:46:05 door Bo Ter Ham
 
Ivo P

Ivo P

28/12/2015 10:55:13
Quote Anchor link
en om een standaard fout vast af te vangen:

als de eerste pagina LIMIT 0,25 bevat, dan bevat de tweede niet LIMIT 25, 50
maar 25, 25
 
Marina janssen

marina janssen

17/01/2016 23:55:53
Quote Anchor link
Hier loop ik ook vast.
Ik heb mooi voorbeeld gevonden, bladzijde 1 werkt, de rest niet. Ik heb me suf gegoogled
want ik dacht eerst dat het aan m'n voorbeeld lag, dat er ene fout inzat, was ik helemaal opnieuw begonnen met ander voorbeeld, die had zelfde probleem (blond ja) het is iets met GET maar wat PRECIES en hoe ik het op moet lossen dat begrijp ik dan weer niet want er staat gewoon GET, iets anders kan ik er niet van maken. Hij onthoudt de invoer niet, ofzo...
 
- SanThe -

- SanThe -

17/01/2016 23:58:37
Quote Anchor link
Stukje relevante code posten misschien?
Nu moeten we de glazen bol weer uit de kast halen.
 
Ozzie PHP

Ozzie PHP

18/01/2016 02:03:40
Quote Anchor link
PHP Maarten op 27/12/2015 18:09:52:
Jammer dat je niet eerst op Google hebt gekeken en je vraag gewoon hier stelde..

Beetje kort door de bocht. Iedereen is gewoon vrij om hier een vraag te stellen. Daar is dit forum voor bedoeld.
 
Marina janssen

marina janssen

25/01/2016 18:52:38
Quote Anchor link
- SanThe - op 17/01/2016 23:58:37:

Nu moeten we de glazen bol weer uit de kast halen.


:)
ik ga eerst alles vermysqli-en, eerder durf ik hier niks meer te posten
en aangezien ik daarin ook vastloop (whaa het zal niet) ben ik nog wel ff bezig, vrees ik

dus even geduld aub, wordt vervolgd
 
Marina janssen

marina janssen

02/02/2016 22:44:43
Quote Anchor link
Quote:
1. Je hebt in de URL een paginanummer (bijv: www.mijnwebsite.nl/artikelen.php?page=1). Dit paginanummer kun je d.m.v. GET uit de URL halen.


Ik snap nu waarom GET steeds niet werkt, ik heb geen paginanummer in de url, het eindigt gewoon op .php
 
- Ariën -
Beheerder

- Ariën -

02/02/2016 22:47:39
Quote Anchor link
In het geval dat er geen pagina nummer is opgegeven, of verwezen wordt naar het script zelf zonder enige GET-parameters, loont het om in dit geval de eerste aantal items te tonen.
 
Marina janssen

marina janssen

10/02/2016 00:18:37
Quote Anchor link
Ok, ik heb alles nu omgezet naar mysqli. Maar de paginatie wil niet lukken.
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
28
29
30
31
32
33
34
35
36
37
38
39
<?php
    require_once "config.php";
    $reclimit = 3;
    
    if(isset($_GET['page'])){
        $page = $_GET['page'];
    }
else {
        $page = 1;
    }


    $start = (($page-1) * $reclimit);
//  if(isset($_POST['Kleur'])){  $Kleur = $_POST['Kleur'];
//  $Kleur= "wit";

//  if(isset($_GET['Kleur'])){  $Kleur = $_GET['Kleur'];
//  } else {echo "Geen geldige invoer";
// }

      $sql = "SELECT * FROM katten WHERE Kleur = '$Kleur'";
    $records = $conn->query($sql);
    $total = $records->num_rows;
    $tpages = ceil($total / $reclimit);
    $rec = "SELECT * FROM katten WHERE Kleur = '$Kleur' ORDER BY Nummer DESC LIMIT $start, $reclimit";
    $records = $conn->query($rec);
                        while($row = $records->fetch_array()) {
        echo "<tr>";
        echo "<td>".$row['Nummer']."</td>";
        echo "<td>".$row['Naam']."</td>";
        echo "<td>".$row['Kleur']."</td>";
        echo "<td>".$row['Url']."</td>";
        echo "</tr>";
    }


mysqli_close($conn);

    
                        for($i=1;$i<=$tpages;$i++) {
                            echo "<li><a href=kleur.php?page=".$i.">".$i."</a></li>";
                        }

                    ?>

Als ik $Kleur invul gaat het goed, maar zowel met met $_POST als $_GET "vergeet" hij de Kleur als ik verder blader dan de 1e pagina. Wat doe ik nou verkeerd?
(nb op de eerste blz staat in de url: kleur.php?page=wit
en de tweede: kleur.php?page=2)
Gewijzigd op 10/02/2016 00:29:58 door marina janssen
 
Thomas van den Heuvel

Thomas van den Heuvel

10/02/2016 00:57:55
Quote Anchor link
Je zult de kleur (en eventuele andere argumenten) ook moeten onthouden.

Daarnaast... Je haalt alle data op om uit te rekenen hoeveel resultaten er zijn? :(

Je zou ook een COUNT(*) of COUNT(id) kunnen doen (waarbij "id" de kolom is die je records uniek identificeert, ik neem aan / hoop dat je deze hebt?).

Of nog beter (maar hier verschillen de meningen over), gebruik de SQL_CALC_FOUND_ROWS flag in je LIMIT query.
Daarmee geef je aan dat je ook geinteresseerd bent in het totaal aantal resultaten wat je zou krijgen als je dezelfde query met dezelfde argumenten zou uitvoeren, maar dan zonder het LIMIT statement.

Het totaal aantal resultaten kun je ophalen door direct na je LIMIT query nog een query uit te voeren met als enige inhoud:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT FOUND_ROWS()

Oftewel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
// resultaten van huidige pagina
$res = $conn->query('SELECT SQL_CALC_FOUND_ROWS ... FROM ... WHERE ... LIMIT ...');
/*
de volgende constructie met [0] is bruikbaar vanaf PHP 5.4,
anders doe je eerst een fetch_row() en lees je daarna de eerste kolom uit
*/
// totaal aantal resultaten

$totaal = $conn->query('SELECT FOUND_ROWS()')->fetch_row()[0];
?>

(zo gauw niet kunnen testen)

Iets waar je wel op moet letten is dat je informatie die je in je query stopt ofwel filtert of wel escaped (en het beste is nog allebei) anders zijn deze mogelijk vatbaar voor SQL injectie.
 
Marina janssen

marina janssen

10/02/2016 01:38:51
Quote Anchor link
Thomas van den Heuvel op 10/02/2016 00:57:55:
Je zult de kleur (en eventuele andere argumenten) ook moeten onthouden.

Hoe dan?
 
- Ariën -
Beheerder

- Ariën -

10/02/2016 09:20:29
Quote Anchor link
Die staan toch in je result? Dan hoeft je die toch niet te onthouden. Het enige wat je moet onthouden is op welke pagina je zit, aan de hand van het aantal items.
 
Marina janssen

marina janssen

10/02/2016 12:52:10
Quote Anchor link
Dat doet
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php if(isset($_GET['page'])){
        $page = $_GET['page'];
    }
else {
        $page = 1;
    }

?>
toch? Hij onthoudt wel de pagina maar niet de ingevoerde kleur.
 
Obelix Idefix

Obelix Idefix

10/02/2016 14:34:20
Quote Anchor link
Geef de kleur mee in de url, net als page
 
Marina janssen

marina janssen

10/02/2016 15:28:07
Quote Anchor link
Dat doe ik toch hiermee of mis ik iets?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if(isset($_GET['Kleur'])){  $Kleur = $_GET['Kleur']; ?>
 
Thomas van den Heuvel

Thomas van den Heuvel

10/02/2016 15:37:48
Quote Anchor link
... en die moet je vervolgens ook weer in je pagina-navigatie stoppen ;).

Dan is de cirkel rond.

Daarna zou je eens kunnen gaan kijken naar het filteren van je input...
Gewijzigd op 10/02/2016 15:40:23 door Thomas van den Heuvel
 
Marina janssen

marina janssen

10/02/2016 17:10:03
Quote Anchor link
even terzijde: een cirkel is altijd rond (anders was het wel een vierkant of een driehoek ofzo :)

maar bedoel je dat ik dat ik dat hier ergens tussen moet proppen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
for($i=1;$i<=$tpages;$i++) {
                            echo "<li><a href=kleur.php?page=".$i.">".$i."</a></li>";
                        }  [
code]<?>[/code]
 
Thomas van den Heuvel

Thomas van den Heuvel

10/02/2016 17:20:50
Quote Anchor link
-_-
Don't get fresh now.

'kleur.php?kleur='.$Kleur.'&amp;page='.$i
o.i.d.?

Waarbij $Kleur nog "veilig" gemaakt dient te worden.

Je kunt ook misschien beter een kleurcode (1,2,3,4) gebruiken.

Daarnaast, als je het oorspronkelijke zoekformulier de methode GET geeft in plaats van POST, wordt het zoekveld "kleur" en de daarbij ingevulde/geselecteerde waarde direct opgenomen in de URL bij het verzenden van het formulier.

Bij zoekformulieren werkt GET doorgaans een stuk fijner dan POST.
Gewijzigd op 10/02/2016 17:21:20 door Thomas van den Heuvel
 
Marina janssen

marina janssen

10/02/2016 23:07:51
Quote Anchor link
Wow, ik heb me hier weken op suf gestaard, het werkt eindelijk!
Mijn dank is groot.
Wat betreft de veiligheid, de echte code is dit (ik had ff alle overbodige tekst eruit gegooid en alleen de kern gebruikt om die paginatie werkend te krijgen)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$aValid
= ('/');
 if (isset($_POST['Kleur']) and (ctype_alpha(str_replace($aValid, '', $_POST['Kleur']))))
  {
$Kleur = $_POST['Kleur'];
 else {echo "<section>Vul een geldige kleur in.</section>";
}
  [
code]<?>[/code] Dat is toch wel veilig?
 

Pagina: 1 2 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.