Hoe $_GET gebruiken als string
deze $_Get code werkt.
Code (php)
1
2
3
4
2
3
4
if(isset(
{$season_name = $_GET[id];}
else
{$season_name=show_season_name($as_present_season_id);}
{$season_name = $_GET[id];}
else
{$season_name=show_season_name($as_present_season_id);}
De input komt uit een Varchar (9) veld
Daar in staan de waardes
2024-2025
2023-2024
2022-2023
etc
Deze waardes worden echter niet al string behandeld maar als numeriek
Hoe kan ik er voor zorgen dat $_Get en verderop in het script de input niet als numerieke waardes worden behandeld?
Gewijzigd op 20/09/2024 08:46:23 door - Ariën -
Dat lijkt mij simpeler en logischer.
Verder zie ik niet echt wat het probleem is? In GET wordt alles altijd als een string behandelt.
wat er verderop in het script gebeurd is dat 2023-2024 klaarblijk als som wordt gezien.
Als $season_name de waarde 2024-2025 heeft (of welke ander seizoen dan ook) is het resultaat 1 dus groter dan 0
dit is overigens de aangeroepen function
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function show_season_id($season_name)
{
global $dbconnection_as;
$sql_season_id = mysqli_query
($dbconnection_as ,"SELECT
s.as_season_id AS seasonid
FROM as_seasons s
WHERE s.as_season_name='".$season_name."'");
print("FOUT!: ".mysqli_error($dbconnection_as)."\n");
while($record = mysqli_fetch_array($sql_season_id))
{
$season_id = $record['seasonid'];
return $season_id;
}
}
{
global $dbconnection_as;
$sql_season_id = mysqli_query
($dbconnection_as ,"SELECT
s.as_season_id AS seasonid
FROM as_seasons s
WHERE s.as_season_name='".$season_name."'");
print("FOUT!: ".mysqli_error($dbconnection_as)."\n");
while($record = mysqli_fetch_array($sql_season_id))
{
$season_id = $record['seasonid'];
return $season_id;
}
}
Wat meldt een echo van je query?
hier staat:
( show_season_id($season_name) > 0 )
Vergelijk de uitkomst van de functie show_season_id met het getal 0.
Wel, als die uitkomst luidt: "2025-2026", dan wordt daarvan een getal gemaakt: 2024
Dat vergelijk jij met 0 en je vraagt of 2024 groter is dan 0 (ja)
Dus TRUE.
TRUE en 1 zijn uitwisselbaar in veel gevallen in PHP, dus daar zou je 1 vandaan kunnen komen.
----
prev_season_id:
dat is niet per se het id van de huidige - 1.
Als je ze niet op volgorde invoert, dan kan dat een random id zijn, misschien wel groter dan de huidige.
Vergelijk dus op waarde, datum of een volgordenummer. Maar nooit op ID.
as_season id | season_name
120 | 2024-2025
119 | 2023-2024
118 | 2022-2023
117 | 2021-2022
de $_get krijg dus een waarde 2024-2025 binnen. En daar ga ik mee aan de slag
als ik het script start met een $_Get
krijg ik:
2024-2025
120
1
Alles werkt dus perfect.
behalve dat in
wat ik als resultaten zou willen zien is
De waarde '2024-2025' als berekening wordt gezien.
een 2024-2025 = 1
net zoals alle ander season_name's
Als season_name niet uit getallen had bestaan dan ging het volgen mij wel goed.
Gewijzigd op 20/09/2024 10:07:24 door mar kla
in jouw logica zou er dan 75 - 1 = 74 uit moeten komen.
Maar volgens mij is jouw "1" een true.
Hoe dan ook: ik vind dat jouw "prev_season_id" moet komen uit.
Code (php)
1
2
3
4
5
2
3
4
5
SELECT s.as_season_id AS seasonid
FROM as_seasons s
WHERE s.as_season_name < '".$season_name."'"
ORDER BY s.as_season_name DESC
LIMIT 1
FROM as_seasons s
WHERE s.as_season_name < '".$season_name."'"
ORDER BY s.as_season_name DESC
LIMIT 1
Als jij nu namelijk ook nog een seizoen 2020-2021 invoert, krijgt die id = 121 en gaat alles onderuit.
Een ID heeft geen numerieke betekenis.
"Toevallig" zijn dit opvolgende getallen, maar het had net zo goed moeten werken met een reeks:
begin = 1
+4 = 5
-1 = 4
+4 = 8
-1 = 7
+4 = 12
-1 = 11
Dat zijn allemaal unieke aanduidingen.
Net als jouw BSN: geen enkele volgorde aan te bekennen of een relatie met je familie of geboortejaar.
net even de tabel met seasons aangepast naar
120 | 2020-2025
119 | 2019-2030
en dan ook krijg ik een 1
Thanks!
maar zou dit werken?
Code (php)
1
2
3
4
5
2
3
4
5
SELECT s.as_season_id AS seasonid
FROM as_seasons s
WHERE 2021-2022 < 2022-2023
ORDER BY s.as_season_name DESC
LIMIT 1
FROM as_seasons s
WHERE 2021-2022 < 2022-2023
ORDER BY s.as_season_name DESC
LIMIT 1
Weet je wat ik ga het gewoon ff proberen
NB
de table seasons is over nagedacht, en id en name zijn altijd opvolgend
1905-1906 id = 1
1906-1907 id = 2
1907-1908 id = 3
..
..
2024-2025 id = 120
Toevoeging op 20/09/2024 12:55:05:
Helaas
werkt niet
as_seasonname is tekst een je kan dus niet testen of waarde-1 > dan waarde-2
Toevoeging op 20/09/2024 14:03:35:
alle op een aanmerking hebben geholpen!!
Ik heb het nu zoals ik wil
Allemaal bedankt voor de PHPhulp
Gewijzigd op 20/09/2024 12:21:37 door mar kla
deze worden dan alfabetisch vergeleken
Mar kla op 20/09/2024 12:05:00:
WHERE 2021-2022 < 2022-2023
Geinig.
Dit wordt:
WHERE -1 < -1 geeft altijd FALSE