1 Rij wordt niet weergegeven bij zoekvraag.
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
Ik zie heel vaag in mijn glazen bol een JOIN. Maar het is te vaag om dat met zekerheid te kunnen zien.
$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.
Je haalt zelf de eerste al weg.
$showavailable = mysqli_fetch_array($available);
Die regel gewoon weghalen dus.
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 -
//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.
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
Bedankt voor het advies. Ik ga er mee aan de slag.