Query geeft binnen php script geen resultaat meer

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas van de Ven

Bas van de Ven

28/08/2021 19:46:29
Quote Anchor link
Nu heb ik toch iets raars. O.b.v. de Bearer code in de authorization header wordt betreffende gebruiker niet meer gevonden. Dit heeft het altijd wel gedaan afgelopen 1,5 jaar. Het volledige php script heb ik recentelijk niet gewijzigd. Zie hieronder het relevante gedeelte uit dit script. Zowel in mijn C# applicatie als in Postman verschijnt de melding : via authorization header wordt de gebruiker niet gevonden. (zie code hieronder). De query blijkt geen resultaat meer te geven. Niet met de variabele $authorization[1] als met een vaste waarde als string. Dit laatste geeft wel een resultaat in mysql. De opbouw van de query klopt dus. Pas als ik de query wijzig in
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php SELECT lidId FROM tblLeden WHERE readerkey is not null ?>
levert de query een resultaat binnen het php script. Niet het juiste resultaat maar $result is tenminste niet leeg.
Ter volledigheid de string van 64 karakters die in mysql een resultaat geeft heb ik exact gekopieerd en geplakt in Postman.
Ik weet niet meer waar ik het in moet zoeken. Iemand enig idee?
Hierbij de relevante code uit mijn php script

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
<?php
$headers
= getallheaders();
    

if (!isset($headers['Authorization'])) {
    http_response_code(401);
    Echo 'authorization header bestaat niet.';
    exit;
}
else
{

    $authorization = explode ( " ", $headers['Authorization'] );
 
     if (count($authorization) == 2 && trim($authorization[0]) == "Bearer" && strlen(trim($authorization[1])) == 64) {

        $zoek_lidId = mysqli_query($db, "SELECT lidId FROM tblLeden WHERE readerkey = '" . mysqli_real_escape_string($db,$authorization[1]) . "' ") or die (mysqli_error($db));

        $result = mysqli_fetch_array($zoek_lidId);

        if($result){
           $lidid = $result['lidId'];
        }
else {
            http_response_code(401);
            echo 'via authorization header wordt de gebruiker niet gevonden.';
            exit;
        }

    }
else {
        http_response_code(401);
        echo 'authorization header heeft niet de juiste opmaak.';
        exit;
    }
}

?>
Gewijzigd op 28/08/2021 21:40:01 door Bas van de Ven
 
PHP hulp

PHP hulp

22/12/2024 07:43:47
 
- Ariën  -
Beheerder

- Ariën -

28/08/2021 23:33:00
Quote Anchor link
Echo je query eens?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$sql
= "SELECT lidId FROM tblLeden WHERE readerkey = '" . mysqli_real_escape_string($db,$authorization[1]) . "'";
echo "SQL-query is: ".$sql;
$zoek_lidId = mysqli_query($db, $sql) or die (mysqli_error($db));
?>


Daarnaast verwijst $result normaliter naar een query-functie, en niet naar een fetch_assoc/array.
 
Bas van de Ven

Bas van de Ven

29/08/2021 08:47:51
Quote Anchor link
Me de echo krijg ik de query uitgeschreven. Een gewenst resultaat dus. Daarnaast ook nog steeds de melding: via authorization header wordt de gebruiker niet gevonden.
Met een While loop gaat het ook niet goed. Had ik al getest.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
while( $row = mysqli_fetch_assoc($zoek_lidId)) {  $lidid = $row['lidId']; }
?>
Gewijzigd op 29/08/2021 08:48:57 door Bas van de Ven
 

29/08/2021 09:10:44
Quote Anchor link
Wil de code werken dan moet de readerkey een string zijn (anders volgt een impliciete cast in MySQL), en moet er iets zinnigs staan in de variabele $authorization[1], wat afhangt van $headers, waarvan we hier niet kunnen zien wat er in zit omdat die gevuld zou moeten worden vanuit de webserver.
Je heb checks ingebouwd, waaruit we kunnen afleiden dat de header moet voldoen aan het format:
Authorization: Bearer <string van 64 tekens>
Dit voldoet aan het format zoals aangegeven op MDN.

Een andere afhankelijkheid is wat er in $db staat, het moet een geldige database resource zijn, met dezelfde credentials als die je in postman gebruikt, die op dezelfde manier verbindt (denk aan IP versus socket) en hetzelfde schema in dezelfde database selecteert. De kans bestaat dat je ergens helemaal overheen kijkt, dus helpt debuggen, stap voor stap kijken of alle variabelen de verwachte waarden bevatten. Je kunt ook proberen de query om te schrijven in een prepared statement, het zou niet uit moeten mogen maken maar je weet niet wat je dan nog op gaat vallen.

Een andere tussenstap is nog om te kijken wat de resultaten zijn als je via de CLI de mysql client start, en het daar op probeert, dan heb je al meer een idee waar het aan kan liggen.

De check if($result) geeft false als de query lukt en er geen resultaten zijn, dus misschien kan je ook testen door zelf de waarde van $autorization[1] te vullen met een readerkey waarvan je hebt gecontroleerd dat die in de database bestaat.
Gewijzigd op 29/08/2021 09:18:28 door
 
Bas van de Ven

Bas van de Ven

29/08/2021 13:38:45
Quote Anchor link
Ik ben er achter en het probleem is opgelost. Het script met de connectie naar de database bleek onjuist. Een paar dagen geleden heb ik een backup teruggezet van +100 bestanden om een ander probleem uit te sluiten. Helemaal niet meer gerealiseerd dat het bestand met de connectie naar de database wel eens fout kon zijn. Stom, stom. Ik baal dat ik jullie hiermee heb lastig gevallen en dit forum op deze manier vervuil. Kan deze topic worden verwijderd?
 
- Ariën  -
Beheerder

- Ariën -

29/08/2021 13:45:06
Quote Anchor link
Fijn dat het het opgelost is.

En nee, ik zie geen reden om dit topic te verwijderen. Het zal wel omlaag zakken. :-)

Als je een gegronde reden daarover denkt te hebben, dan kan je mij daarover contacteren.
Gewijzigd op 29/08/2021 13:46:14 door - Ariën -
 
Bas van de Ven

Bas van de Ven

29/08/2021 16:17:34
Quote Anchor link
Het is meer dat mensen die zoeken op dit onderwerp hier hun antwoord niet zullen vinden.
Voor mij mag deze topic verder best blijven bestaan.
Bedankt, overigens voor jullie reacties
Gewijzigd op 29/08/2021 16:18:52 door Bas van de Ven
 



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.