[php]rare fout met strcasecmp

Pagina: 1
Acties:
  • 47 views sinds 30-01-2008

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
Hallo allemaal,

Ik heb voor een site een if statement met strcasecmp, om te kijken of de user die ingeolgd is, dezelfde is als de persoon die een bericht geplaatst heeft. Omdat de username niet hoofdlettergevoelig is bij inloggen, kan het zijn dat je de eerste keer inlogd met Roa, en de volgende keer met roa. Vandaar dat ik strcasecmp gebruik, ipv ==.

Nu komt het volgende probleem, hij deed precies het tegenovergestelde en ik ben er nu ook achter dat:

PHP:
1
2
3
4
5
if(!strcasecmp($cookie_user, $username)){ 
echo "laat iets zien";
}else{
echo "laat iets niet zien";
}


precies verkeerd om is, omdat hij true geeft bij een ongelijke string. Vandaar dat dat script niet werkt, maar, in een ander script, waarbij ik ongeveer dezelfde vergelijking gebruik, doet hij het juist wel! Daar geeft hij true als ze gelijk zijn:


PHP:
1
2
3
4
5
if(!strcasecmp($auteur, $username)){ 
echo "laat iets zien als gelijk is";
}else{
echo "laat iets niet zijn, omdat niet gelijk is";
}


Als $auteur = Roa en $username = roa, dan laat hij het zien, terwijl als ze niet gelijk zijn, hij niets laat zien. Ik snap niet waarom en wil hier wel graag achter komen, om bugs te voorkomen.

[ Voor 20% gewijzigd door Roa op 03-02-2003 11:07 ]

Research is what I'm doing when I don't know what I'm doing.


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

if(!strcasecmp($auteur, $username))

als niet gelijk laat zien dat ze wel gelijk zijn


else

als wel gelijk laat zien dat ze niet gelijk zijn


hmmz wat zou daar nou foutgaan? :+


heej :(
dat returnt geen TRUE als ze gelijk zijn maar een false?

[ Voor 18% gewijzigd door D2k op 03-02-2003 11:08 ]

Doet iets met Cloud (MS/IBM)


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
De PHP manual zegt het volgende:

Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.

Example 732. strcasecmp() example
PHP:
1
2
3
4
5
$var1 = "Hello";
$var2 = "hello";
if (!strcasecmp($var1, $var2)) {
   echo '$var1 is equal to $var2 in a case-insensitive string comparison';
}


Value 0 zou dus een equal moeten betekenen en enkele andere waarde dat de strings niet gelijk zijn. Misschien kan je daarom beter doen:

PHP:
1
2
3
if(strcasecmp($auteur, $username) == 0){  
// Strings zijn gelijk aan elkaar
}

It’s nice to be important but it’s more important to be nice


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

D2k:
if(!strcasecmp($auteur, $username))
als niet gelijk laat zien dat ze wel gelijk zijn
else
als wel gelijk laat zien dat ze niet gelijk zijn
hmmz wat zou daar nou foutgaan? :+

* drm slaat D2k gloeiend hard met de manual om de oren :P
PHP:
1
2
3
4
5
if ( strcasecmp ( $a, $b ) == 0 ) {
   echo 'er verschillen 0 characters in deze strings';
} else {
   echo 'De strings zijn verschillend';
}

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Beetje gaar. Probeer eens gewoon te testen met strcasecmp(..) != 0 ?

[ Voor 40% gewijzigd door SWfreak op 03-02-2003 11:13 ]


  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
Hmm, ik heb wat nieuws ontdekt, het word steeds gekker hier, ik heb hem omgedraait:

PHP:
1
2
3
4
5
if(!strcasecmp($cookie_user, $username)){ 
echo "laat het niet zien";
}else{
echo "laat het zien";
}


Maar, nu laat hij het nooit meer zien, ik vat er geen fuck meer van....

Research is what I'm doing when I don't know what I'm doing.


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

hmmz doe er eens trim() omheen zetten om je vars
misschien heb je last van trailing spaces oid

Doet iets met Cloud (MS/IBM)


  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
AAAAAAAAAGH, ik weet het al, ik heb in die pagina include's zitten en in 1 van die bestanden word de variabele $username al gebruikt

*schaamt zich diep*

Research is what I'm doing when I don't know what I'm doing.


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

mooie aanleiding om je variabelen beter te benoemen naar hun functies ;)

Doet iets met Cloud (MS/IBM)


  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
Goed, het probleem is dus nog niet opgelost.....vaaaaaaaag....

Ik vat het echt niet meer....Het heeft wel iets met de login te maken....Daarin word $username nl gebruikt, maaaaaar, ik heb hem daar nu $username333 genoemd, alleen doet hij het nog steeds niet...?

Misschien moet ik toch weer terug naar 2 bestanden voor mijn login script....1 form tabel en 1 verwerkings script...

[ Voor 19% gewijzigd door Roa op 03-02-2003 11:29 ]

Research is what I'm doing when I don't know what I'm doing.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

offtopic:
!strcasecmp( .. ) is imho een verkeerde notatie en verkeerd gebruik van de functie, gezien de functie een integer retourneert en niet een boolean

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23:08
Ga dan eens debuggen! DEBUGGEN! DEBUGGEN! (En je hebt mazzel dat ik geen HTML-rechten heb).

PRINT voor de grap eens op je SCHERM wat er nu precies in $cookie_user en $user_name zit (en pas op voor 'moeilijk zichtbare' karakters); hier kunnen wij NIETS mee. Strcasecmp() werkt echt wel naar behoren; wees daar maar niet bang voor. Jij doet iets fout.
drm schreef op 03 February 2003 @ 11:30:
offtopic:
!strcasecmp( .. ) is imho een verkeerde notatie en verkeerd gebruik van de functie, gezien de functie een integer retourneert en niet een boolean
De taal PHP kent impliciete conversie, en daar is niets mis mee. Alternatief zou je het kunnen beschouwen alsof de !-operator overloaded is voor verschillende types, waaronder boolean en integer.

[ Voor 40% gewijzigd door Soultaker op 03-02-2003 12:53 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

De taal PHP kent impliciete conversie, en daar is niets mis mee. Alternatief zou je het kunnen beschouwen alsof de !-operator overloaded is voor verschillende types, waaronder boolean en integer.
Mja, maar het gaat mij meer om de semantiek ervan, ajbwib.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23:08
Nou ja, "verkeerde" notatie suggereert bij mij toch dat het een fout is. Dat het minder duidelijk is, ben ik zo met je eens. Ik schrijf in C ook altijd "strcmp(a,b) == 0" (of "!= 0"), maar de variant met !-operator is ook geldige code, en naar mijn mening dus niet "verkeerd".

Een nuanceverschil dus. =)

[ Voor 14% gewijzigd door Soultaker op 03-02-2003 14:12 ]


Verwijderd

is er iets op tegen om de cookie dinges altijd in lowercase op te slaan en dan met :

if(strtolower($username) == $cookie_user){

}

bla bla?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

of er iets op tegen is :?
ligt eraan wat je in het cookiezet
en of je D2k en d2k als 2 verschillende users accepteerd

Doet iets met Cloud (MS/IBM)


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Soultaker:
Nou ja, "verkeerde" notatie suggereert bij mij toch dat het een fout is. Dat het minder duidelijk is, ben ik zo met je eens. Ik schrijf in C ook altijd "strcmp(a,b) == 0" (of "!= 0"), maar de variant met !-operator is ook geldige code, en naar mijn mening dus niet "verkeerd".

Een nuanceverschil dus. =)

hehehe, vandaar dat ik ook niet de neiging had html-rechten te misbruiken die ik wel heb :+
en of je D2k en d2k als 2 verschillende users accepteerd
Sterker nog, 't is overbodig, gezien strcasecmp bij vergelijking wordt gebruikt :Y)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

drm schreef op 03 februari 2003 @ 16:09:
Sterker nog, 't is overbodig, gezien strcasecmp bij vergelijking wordt gebruikt :Y)

uhm niet overbodig en misschien zelfs wel fout ;)

Doet iets met Cloud (MS/IBM)


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

D2k:
uhm niet overbodig en misschien zelfs wel fout ;)

Dan ligt de fout dus bij 't strcasecmp() en niet bij strtolower() :P

kortom, zellufs, strtolower niet gebruiken :D

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
PRINT voor de grap eens op je SCHERM wat er nu precies in $cookie_user en $user_name zit (en pas op voor 'moeilijk zichtbare' karakters); hier kunnen wij NIETS mee. Strcasecmp() werkt echt wel naar behoren; wees daar maar niet bang voor. Jij doet iets fout.
Sorry hoor :'(..

Maar je hebt gelijk, ik weet ook wel dat het aan mij lag, maar ik vind het nogal vreemd, ik heb de $username nu veranderd naar $user en alles doet het naar behoren. Toch bedankt voor de tip om even te kijken wat erin staat. Ik zat vanochtend op school, anders had ik het daar ook even gedaan, maar ftp werkt daar gaar.

Research is what I'm doing when I don't know what I'm doing.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

right :/

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1

Dit topic is gesloten.