Re: WHERE = '$ID2' veranderd? door registerglobals?
M@rcel wrote:
> "John Bokma" <postmaster@castleamber.com> schreef in bericht
>
>> M@rcel wrote:
>>
>>> Maar blijkbaar moet ik nog wat checken?
>>
>> Yup, wat is een ID? Als het een getal is tussen 1 en 1000 zou ik zelf
>> kijken of:
>>
>> is het gedefinieerd
>> is het 1 tot maximaal 4 getallen
>> valt het getal in het bereik 1-1000
>
> ja ID is inderdaad een getal met een onbeperkt bereik.
Weet je dat zeker? Hoe wordt het opgeslagen in de database?
>> Als het antwoord nee is, geef ik een fout (Undefined ID, Invalid ID,
>> ID out of range b.v.)
>
> Ok, maar hoe controleer ik zoiets: oftewel: helder leesvoer /
> voorbeelden / tips ?
http://mx2.php.net/manual/en/function.isset.php
http://mx2.php.net/manual/en/function.preg-match.php
> Is dit wat, onderstaand controleert toch of een bestand een getal is
> en zo niet dan geeft het voor ID2 de waarde 1? of heb ik het niet goed
> begrepen?
Niet goed begrepen, als het niet klopt, geef een fout, ga het niet
repareren.
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
Re: WHERE = '$ID2' veranderd? door registerglobals?
Wat John Bokma schreef, bleek het
begin van iets moois; kijk zelf maar:
> Dr.Ruud:
>> Ik zit meer aan zoiets te denken:
>>
>> ${_GET_ID2} = (int) trim(${_GET['ID2']});
>>
>> if ((${_GET_ID2} < 1) || (1e5 < ${_GET_ID2})) ${_GET_ID2} = 1;
> IMNSHO dus de meest foute methode (ok, op niks doen na dan)
De defaultwaarde 1 nam ik over van M@rcel, blijkbaar heeft dat
voor hem een Doel. Maar leg eens uit?
--
Affijn, Ruud ` - ?
+ ` ? *
? ` Jvr qvg yrrfg,
? = ` fgresg wbatre.
Re: WHERE = '$ID2' veranderd? door registerglobals?
"John Bokma" schreef in bericht
>
>> ja ID is inderdaad een getal met een onbeperkt bereik.
>
> Weet je dat zeker? Hoe wordt het opgeslagen in de database?
Als INT , primary key, auto_increment
>> Ok, maar hoe controleer ik zoiets: oftewel: helder leesvoer /
>> voorbeelden / tips ?
>
> http://mx2.php.net/manual/en/function.isset.php
> http://mx2.php.net/manual/en/function.preg-match.php
ga ik doornemen.
>> Is dit wat, onderstaand controleert toch of een bestand een getal is
>> en zo niet dan geeft het voor ID2 de waarde 1? of heb ik het niet goed
>> begrepen?
>
> Niet goed begrepen, als het niet klopt, geef een fout, ga het niet
> repareren.
Ok, maar als ik zeker weet dat waarde 1 altijd aanwezig is kan ik die code
dan ook niet toepassen?
Marcel
Trouwens: de berichten van dr. Ruud kan ik niet lezen, krijg de tekst:
Wat John Bokma schreef, bleek het en dan een bestand als bijlage.
(gebruik Outlook Express als nieuwslezer, zal daar wel aan liggen ;-)
Re: WHERE = '$ID2' veranderd? door registerglobals?
Dr.Ruud wrote:
>>> ${_GET_ID2} = (int) trim(${_GET['ID2']});
>>>
>>> if ((${_GET_ID2} < 1) || (1e5 < ${_GET_ID2})) ${_GET_ID2} = 1;
>
>>IMNSHO dus de meest foute methode (ok, op niks doen na dan)
Hoezo de meest foute?
> De defaultwaarde 1 nam ik over van M@rcel, blijkbaar heeft dat
> voor hem een Doel. Maar leg eens uit?
if (isset($_GET["foo"]) && ereg("^[0-9]+$", $_GET["foo"]))
{
...
}
--
Cheers,
Maarten Wierda
"Shit happens. Then you wipe."
Re: WHERE = '$ID2' veranderd? door registerglobals?
Wat Maarten Wierda schreef, bleek het
begin van iets moois; kijk zelf maar:
> Dr.Ruud:
>>>> ${_GET_ID2} = (int) trim(${_GET['ID2']});
>>>>
>>>> if ((${_GET_ID2} < 1) || (1e5 < ${_GET_ID2})) ${_GET_ID2} = 1;
>>> IMNSHO dus de meest foute methode (ok, op niks doen na dan)
> Hoezo de meest foute?
Ja, kom op John, leer ons!
>> De defaultwaarde 1 nam ik over van M@rcel, blijkbaar heeft dat
>> voor hem een Doel. Maar leg eens uit?
> if (isset($_GET["foo"]) && ereg("^[0-9]+$", $_GET["foo"]))
> {
> ...
> }
Wat voegt dat toe dan? En het vindt een praktische waarde
zoals '123 ' nog false ook.
--
Affijn, Ruud ` - ´
+ ` ´ *
´ ` Jvr qvg yrrfg,
´ = ` fgresg wbatre.
Re: WHERE = '$ID2' veranderd? door registerglobals?
Dr.Ruud wrote:
> Wat Maarten Wierda schreef, bleek het
> begin van iets moois; kijk zelf maar:
Ik kijk me suf, maar wat bedoel je nou?
<snip>
>>if (isset($_GET["foo"]) && ereg("^[0-9]+$", $_GET["foo"]))
>
> Wat voegt dat toe dan? En het vindt een praktische waarde
> zoals '123 ' nog false ook.
Wat is er praktisch aan '123 '? Dat is toch geen integer?
--
Cheers,
Maarten Wierda
"Shit happens. Then you wipe."
Re: WHERE = '$ID2' veranderd? door registerglobals?
Maarten Wierda <moart3nAT@chellodot.nl> wrote:
>>
>> Wat voegt dat toe dan? En het vindt een praktische waarde
>> zoals '123 ' nog false ook.
>
> Wat is er praktisch aan '123 '? Dat is toch geen integer?
Een vaak voorkomende typo, een goede reden om vrijwel altijd trim te
gebruiken.
Re: WHERE = '$ID2' veranderd? door registerglobals?
Daniel Tryba wrote:
> Maarten Wierda <moart3nAT@chellodot.nl> wrote:
>>>
>>> Wat voegt dat toe dan? En het vindt een praktische waarde
>>> zoals '123 ' nog false ook.
>>
>> Wat is er praktisch aan '123 '? Dat is toch geen integer?
>
> Een vaak voorkomende typo, een goede reden om vrijwel altijd trim te
> gebruiken.
Nee.
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
Re: WHERE = '$ID2' veranderd? door registerglobals?
M@rcel wrote:
> "John Bokma" schreef in bericht
>
>>> ja ID is inderdaad een getal met een onbeperkt bereik.
>>
>> Weet je dat zeker? Hoe wordt het opgeslagen in de database?
>
> Als INT , primary key, auto_increment
Dus het bereik is beperkt, zie de MySQL documentatie. En wellicht wil je
het zelf verder inperken.
> Trouwens: de berichten van dr. Ruud kan ik niet lezen, krijg de tekst:
Yup, ff Ctrl+F3 indrukken (view source). Als je veel op Usenet rondhangt
kan je beter iets als Xnews, Thunderbird, o.i.d. gaan gebruiken.
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
Re: WHERE = '$ID2' veranderd? door registerglobals?
John Bokma wrote:
>>> Wat is er praktisch aan '123 '? Dat is toch geen
>>> integer?
>>
>> Een vaak voorkomende typo, een goede reden om vrijwel
>> altijd trim te gebruiken.
Normaliter worden dit soort GET-variabelen toch niet
handmatig ingetypt?
> Nee.
Verklaar je eens nader...
--
Cheers,
Maarten Wierda
"Shit happens. Then you wipe."
Re: WHERE = '$ID2' veranderd? door registerglobals?
Dr.Ruud wrote:
> Wat Maarten Wierda schreef, bleek het
> begin van iets moois; kijk zelf maar:
>> Dr.Ruud:
>
>>>>> ${_GET_ID2} = (int) trim(${_GET['ID2']});
>>>>>
>>>>> if ((${_GET_ID2} < 1) || (1e5 < ${_GET_ID2})) ${_GET_ID2} = 1;
>
>>>> IMNSHO dus de meest foute methode (ok, op niks doen na dan)
>
>> Hoezo de meest foute?
>
> Ja, kom op John, leer ons!
Ik wil het binnenkort wat uitgebreider op mijn site zetten, maar in het
kort:
[a] *specificeer* wat een ID is
[b] alles wat *niet* aan de specificatie voldoet -> error
en dus: *niet* repareren, trimmen, casten, etc.
Soms kan er een speciaal geval zijn, geen ID, en dan kan een default
gebruikt worden.
Dus voor de OP:
[1] heeft ID een waarde? Indien niet, wil je een default gebruiken?
(b.v. omdat je programma index.php heet), -> zet default waarde
en klaar. Indien die situatie er niet is, dan is het *altijd* fout.
[2] is het ID volledig een integer (dus geen gekke tekens wissen, etc.)
*en* valt het binnen de minimale en maximale *lengte*?
In Perl regexp lingo: ~ /^[1-9]\d{0,5}$/ (echter, zie onder) dus
minimaal 1 cijfer, maximaal 6 cijfers, geen voorloop nullen.
Indien nee -> geef fout
[3] valt het id binnen het gespecificeerde bereik ( dus [ min .. max ] )
Indien nee -> geef fout.
Kortom: als een ID niet voldoet is dat per definitie een fout. Ga nooit
zitten repareren, want zo zie je mogelijke fouten in je HTML of
programma over het hoofd...
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
Re: WHERE = '$ID2' veranderd? door registerglobals?
Maarten Wierda wrote:
> John Bokma wrote:
>
>>>> Wat is er praktisch aan '123 '? Dat is toch geen
>>>> integer?
>>>
>>> Een vaak voorkomende typo, een goede reden om vrijwel
>>> altijd trim te gebruiken.
>
> Normaliter worden dit soort GET-variabelen toch niet
> handmatig ingetypt?
Precies!
>> Nee.
>
> Verklaar je eens nader...
Hoezo, je hebt het al door :-D
--
John Voorbeeldscripts in Perl: http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html
Re: WHERE = '$ID2' veranderd? door registerglobals?
Maarten Wierda <moart3nAT@chellodot.nl> wrote:
>>>> Wat is er praktisch aan '123 '? Dat is toch geen
>>>> integer?
>>>
>>> Een vaak voorkomende typo, een goede reden om vrijwel
>>> altijd trim te gebruiken.
>
> Normaliter worden dit soort GET-variabelen toch niet
> handmatig ingetypt?
Wellicht voor IDs, maar niet voor form data in een get.
Maar voor een query waar ID een int is doet de database zelf nog wel een
sanity check op de invoer.
Zowel bv MySQL als MSSQL retouneren het zelfde voor
select id from event where id=1;
of
select id from event where id='1';
en
select id from event where id='1 ';
mysql maakt het nog het nog bonter door ook id 1 terug te geven bij
select id from event where id='1z';
mssql weet te melden dat '1z' een varchar is en dat een int wordt
verwacht. Geen idee wat de sql specs hierover zeggen.