1 Rij wordt niet weergegeven bij zoekvraag.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Andy Kort

Andy Kort

08/06/2019 11:45:33
Quote Anchor link
Goedemorgen,

Vreemd genoeg loop ik tegen het volgende aan. Via een querie vraag ik een aantal rijen op uit een tabel. Het vreemde is dat als een resultaat 5 rijen moet zijn, er maar 4 worden weergegeven. De 1e wordt overgeslagen.
Selectiecriterium is bv een datum. Geen ingewikkelde zoekconstructies o.i.d. Iemand enig idee?

Groet
 
PHP hulp

PHP hulp

17/08/2019 13:44:12
 
- Ariën -
Beheerder

- Ariën -

08/06/2019 12:28:31
Quote Anchor link
Ik zie heel vaag in mijn glazen bol een JOIN. Maar het is te vaag om dat met zekerheid te kunnen zien.
 
Andy Kort

Andy Kort

08/06/2019 12:39:49
Quote Anchor link
JOIN n.v.t.

$sql = "SELECT * FROM ".$set['hfdtab']. " WHERE status='o' and date>='".$_GET["date"]."' and date<='".$_GET["dateend"]."' order by plaats, date, begin";

$available = mysqli_query($conn,$sql);

$showavailable = mysqli_fetch_array($available);

while ($showavailable = mysqli_fetch_array($available)) { --resultaat---}

zo zit het in elkaar. Werkt prima uitgezonderd rij 1 dus.
 
- SanThe -

- SanThe -

08/06/2019 12:43:56
Quote Anchor link
Logisch.

Je haalt zelf de eerste al weg.

$showavailable = mysqli_fetch_array($available);

Die regel gewoon weghalen dus.
 
- Ariën -
Beheerder

- Ariën -

08/06/2019 12:52:49
Quote Anchor link
Verder zie ik SQL-injection, omdat je $_GET niet escaped.

Die eerste regel met $showavailable = mysqli_fetch_array($available); gebruik je als je maar één record verwacht. Zo niet, dan pakt hij altijd de eerste die uit de query komt.

Gebruik je die in combinatie met een while() loop, dan leest hij alle bijbehorende records uit.
Gewijzigd op 08/06/2019 12:53:05 door - Ariën -
 
Andy Kort

Andy Kort

08/06/2019 12:54:21
Quote Anchor link
Is idd de oplossing. Ik had dit er echter ingezet om beschikbare opties te checken op de volgende manier.

//check of er nog plaats is op de gekozen datum.
if(empty($showavailable)) {
echo "<h2>Op de door u gekozen datum zijn op dit moment helaas geen plaatsen meer vrij. Kies een andere datum of probeer het later nog eens.</h2>";
}

while ($showavailable = mysqli_fetch_array($available)) {---resultaat---}

en dus niet verwacht dat dit statement verder iets zou doen.

Voorlopig ben ik geholpen bedankt weer voor het meedenken


Toevoeging op 08/06/2019 12:57:15:

SQL-injection klopt. Ik moet daar de hele applicatie nog op na gaan lopen.
 
Thomas van den Heuvel

Thomas van den Heuvel

08/06/2019 15:23:09
Quote Anchor link
> Ik moet daar de hele applicatie nog op na gaan lopen.
Bewustwording is hier het kernwoord. Beter is om direct een stramien in je werkwijze op te nemen die dit meteen helemaal uitsluit. Het zou onderdeel moeten uitmaken van alles wat je doet. Elke keer als je ergens externe data in betrekt (en dit betreft dus ook data die al in je database zit!) zou er een lampje moeten gaan branden.

Hierbij zou je eigenlijk altijd het credo filter input, escape output kunnen hanteren. Zo zou input altijd (mits van toepassing) gevalideerd moeten worden. Voldoet deze niet aan een voorgeschreven formaat dan gewoon afkeuren, probeer deze vooral niet te repareren. Ook zou dan de verdere uitvoering van wat je op dat moment dan ook aan het doen was gestaakt moeten worden.

Het escapen van output zou je (in queries, de SQL-context) in zijn simpelste vorm neer kunnen laten komen op het gebruik van quotes in combinatie met de escape-functie voor die specifieke context. Het een (quotes) is niet veilig zonder het ander (escape-functie), je hebt echt beide nodig.

Als je dit gewoon altijd toepast op de dynamische data-delen in je query dan heb je hier vrijwel compleet SQL-injectie mee uitgesloten.

En zo zijn er ook escape-functies voor andere contexten, dit blijft niet beperkt tot enkel SQL. Zo zou je alle dynamische informatie die in HTML wordt weergegeven maar niet als HTML geïnterpreteerd dient te worden door de daarvoor bestemde escape-functie voor de HTML-context moeten halen.

Maar je moet wel begrijpen wat je aan het doen bent.
Gewijzigd op 08/06/2019 15:24:19 door Thomas van den Heuvel
 
Andy Kort

Andy Kort

08/06/2019 21:55:09
Quote Anchor link
Bedankt voor het advies. Ik ga er mee aan de slag.
 



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.