2016-03-25 7 views
0

OK, also rasiere ich meinen Kopf, aber wenn ich Haare hätte, würde ich kein Rasiermesser brauchen, weil ich heute Abend alles rausgerissen hätte. Es ist 3 Uhr morgens weg und was um 00:30 Uhr wie eine einfache Lösung aussah, ist weit davon entfernt.PHP-Variablen sehen gleich aus, sind aber nicht gleich (ich bin verwirrt)

Bitte sehen Sie den Code Extrakt unten ..

$psusername = substr($list[$count],16); 

if ($psusername == $psu_value){ 
$answer = "YES"; 
} 
else { 
$answer = "NO"; 
} 

$psusername den Wert hält "normann", die von einer URL in einer textbasierten Datei (url.db)

$psu_value auch das genommen wird, hält Wert "normann", der aus einem auf dem Computer des Benutzers gesetzten Cookie (oder einem Parameter in der Adressleiste des Browsers - URL) abgerufen wird.

Allerdings, und ich bin sicher, Sie können mein Problem erraten, die Variable $answer enthält "NEIN" aus dem obigen Test.

All das PHP, das ich kenne, habe ich von Google-Suchen abgeholt und euch hier, also bin ich kein Experte, was vielleicht offensichtlich ist.

Vielleicht ist dies ein Schuljungenfehler, aber ich kann nicht herausfinden, was ich falsch mache. Meine Annahme ist, dass die Datentypen sich unterscheiden. Letztendlich möchte ich die beiden Variablen vergleichen und ein TRUE-Ergebnis haben, wenn sie die gleiche Information enthalten (d. H. Normann = normann).

Wenn also sehr schlaue Burschen darauf hinweisen können, warum zwei Variablen das widerspiegeln, was die gleichen Informationen zu sein scheinen, aber tatsächlich anders sind, wäre es eine sehr nützliche Lektion für mich und macht meine Benutzer sehr glücklich.

+0

versuchen, var_dump zwei Variablen, um zu sehen, ob sie tatsächlich die gleichen sind – fusion3k

+1

OK, nachdem ich dies in TextPad Hexansicht angeschaut habe, kann ich sehen, dass der Benutzername ich extrahiere aus der URL enthält zwei zusätzliche Zeichen, so normann .. (0D 0A). So scheint es, dass ich die Teilstring-Funktion nicht richtig verwende und ich muss wissen, wie der Auszug von meinem Startpunkt bis zum letzten alphanumerischen Zeichen reicht. – Kevin

+0

Ah ha .. Dank der Hex-Ansicht konnte ich eine produktivere Suche nach einer Lösung machen und fand sie hier auf SO - ihr seid so clever. Diese Anweisung löste mein Problem: $ psusername = preg_replace ("/ [^ [: alnum:]]/u", '', $ psusername); – Kevin

Antwort

1

Haben sie das gleiche Echo, wenn Sie tun:

echo gettype($psusername) . '\n' . gettype($psu_value); 
0

Da ich nicht sehen kann, welche Daten im Array $ Liste gespeichert ist (und der Index $ count), kann ich nicht eine vollständige Lösung vorschlagen zu deinem Problem. Aber ich kann vorschlagen, dass Sie diesen Code einfügen direkt vor der if-Anweisung:

var_dump($psusername); 
var_dump($psu_value); 

und sehen, warum die beiden Variablen nicht identisch sind. Die Var_dump Funktion ausgeben wird der Inhalt in der Variablen gespeichert und vom Typ (string, integer, array ec ..), so wird Sie herausfinden, warum die if-Anweisung falsch

0

kehrt Da es so aussieht, Sie nicht haben druckbare Zeichen in Ihrer Zeichenfolge, können Sie sie vor dem Vergleich ausziehen. Dies entfernt, was ist in Ihrem Zeichensatz bedruckbar:

$psusername = preg_replace("/[[:^print:]]/", "", $psusername); 
0

0D 0A ist eine neue Linie. Die erste ist die Wagenrücklauf (CR) Zeichen und die zweite ist die neue Zeile (NL) Zeichen. Sie sind auch als \r und \n bekannt.

Sie können es einfach mit trim() abschneiden.

$psusername = trim($psusername); 

Oder wenn es nur am Ende der Kette erfolgt dann würde rtrim() die Arbeit machen:

$psusername = rtrim($psusername); 

Wenn Sie die Werte aus der Datei mit file() bekommen, dann können Sie FILE_IGNORE_NEW_LINES als Pass zweites Argument, und das wird die neue Zeile entfernen:

$contents = file('url.db', FILE_IGNORE_NEW_LINES); 
0

Ich möchte nur allen danken, die geantwortet haben. Ich erkennen nach meiner Logfile der Ausgaben im HEX-Format sehen, dass es die Carriage Return-Werte verursachen die Variablen waren Mismatch und eine konnte ich erwähnt (Rand) mit dem folgenden Code beheben ..

$psusername = preg_replace("/[^[:alnum:]]/u", '', $psusername); 

Ich weiß auch, dass das System, in dem die Profile und Benutzernamen erstellt werden, die Übereinstimmung zwischen Groß- und Kleinbuchstaben ermöglicht, also habe ich die Vorsichtsmaßnahme getroffen, diese Funktionalität als zusätzlichen Grad der Vollständigkeit in meinen Code einzubauen.

Und ich bin froh zu sagen, der Code funktioniert jetzt perfekt.

Noch einmal, vielen Dank für Ihre Antworten und Vorschläge.

Verwandte Themen