webForumDet fria alternativet

strcmp versus == ?

4 svar · 286 visningar · startad av aasah

aasahMedlem sedan mars 20033 451 inlägg
#1

PHP är kul... oftast. Just nu är det mindre kul... ;)

Jag har följande situation:

//utsnitt ur form
<input type="hidden" name="shyNewPost" value="newP" > <BR>
<input class="buttonG" type="submit" name="submitPost" value="Post it!" ><BR><BR>

//Hjälpfunktion - anv av de flesta av mina skript - ger bland 
//annat true korrekt för wasChosen("X", "I want to comment!")
function wasChosen($name, $val) {
   return (isSet($_POST["$name"]) && $_POST["$name"] == $val);
}

//Utdrag ur skriptet
echo ($_POST['shyPost'] == "1")." A<BR>";
echo ($_POST['Post'] == "Post News!")." B<BR>";
echo (strcmp($_POST['Post'], "Post News!"))." C<BR>";
if (!(wasChosen("shyPost", "1") && wasChosen("Post", "Post News!")))
     exit("New: Something's odd...");

Ger utskriften:

1 A
B
1 C
New: Something's odd...

Enligt https://www.php.net (om jag har förstått det rätt) är skillnaden den att strcmp alltid funkar då den jämför strängarna/bit, medan == är OK så länge man inte riskerar en typkonvertering före jämförelsen?

  1. Stämmer detta eller har jag fattat fel?

  2. Om det stämmer: borde inte det innebära att == ibland ger true när det inte borde, men där strcmp korrekt ser att det är false? Hur i självaste... kan resultatet bli det omvända: att strcomp ger true när == är falskt???! :l

Dessutom använder sig praktiskt taget vartenda skript jag har av wasChosen som funkat hur bra som helst ända till nu! Även på strängar med mellanslag och annat udda i.

  1. Så varför spårar den ur just nu? Vad är tokigt?

Tacksam för hjälp att begripa...

MatteMedlem sedan aug. 20002 970 inlägg
#2

strcmp returnerar inte sant eller falskt, utan den returnerar 0 (noll) om värdena är lika, annars 1 eller -1 beroende på vilket värde som är störst.

Så vad jag kan se stämmer det hela för dig, '==' skriver inte ut något, vilket är lika med false (de stämmer inte), medan strcmp skriver ut 1 vilket betyder att de inte är lika med varandra.

Vill du även använda typkontroll vid din jämförelse samt få sant/falskt använder du istället '==='.

aasahMedlem sedan mars 20033 451 inlägg
#3

Matte skrev:

... Så vad jag kan se stämmer det hela för dig, '==' skriver inte ut något, vilket är lika med false (de stämmer inte), medan strcmp skriver ut 1 vilket betyder att de inte är lika med varandra....

Åh! Men... de är ju lika!!!

echo ($_POST['shyPost'] == "1")." A<BR>";
echo $_POST['Post']." B ".strlen($_POST['Post'])."<BR>";
echo strlen("Post News!")." C<BR>";
echo ($_POST['Post'] == "Post News!")." D<BR>";
if (!(wasChosen("shyPost", "1") && wasChosen("Post", "Post News!")))
     exit("New: Something's odd...");

1 A
Post news! B 10
10 C
D
New: Something's odd...

De har ju samma värde och samma längd!!! Vad är då felet???

MatteMedlem sedan aug. 20002 970 inlägg
#4

Du har gement 'n' i news som du jämför med versalt 'N' i News.

'n' och 'N' är inte samma tecken.

aasahMedlem sedan mars 20033 451 inlägg
#5

Åh! :r Det har jag inte sett fast jag stirrat på detta både länge och väl... x(

TACK, matte!

126 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
123 ms — hämta tråd, inlägg och bilagor (db)