Query geeft binnen php script geen resultaat meer
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
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 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)
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
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;
}
}
?>
$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
Code (php)
Daarnaast verwijst $result normaliter naar een query-functie, en niet naar een fetch_assoc/array.
Met een While loop gaat het ook niet goed. Had ik al getest.
Gewijzigd op 29/08/2021 08:48:57 door Bas van de Ven
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.
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?
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 -
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