WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Stora bokstäver blir ändå små i detta PHP-script (https://www.wn.se/forum/showthread.php?t=1056486)

Dakota 2013-01-20 02:45

Stora bokstäver blir ändå små i detta PHP-script
 
Hej! Jag har köpt ett php-script av en kille som fungerar väldigt bra, saken är bara den att när en person beställer ett guldigt namn till exempel, så spelar det ingen roll om personen heter t.ex JONAS, för scriptet kommer ge honom namnet jonas - alltså inga stora bokstäver fungerar.

PHP-kod:

if ($sms['1'] == "guld") { echo "Ditt namn har nu fått en guldig färg."$ws->doCommandAsConsole("nick ".$sms['2']." &6".$sms['2'].""); 
                                                                                             
$ws->doCommandAsConsole("bcast ".$sms['2']." har köpt guldigt namn!"); } 

".$sms['2']." representerar personens namn.

Kan PHP-script inte känna av när folk använder stora bokstäver eller vad är det som är knasigt?

Nihilnovi 2013-01-20 10:23

På Windows matchar 'GULD' och 'guld' både gULd och GulD osv. PHP använder OS funktioner internt för att känna av stora & små bokstäver på t.ex include & require.

På Linux är allting case-sensitivt, dvs GULD matchar endast GULD.

Du kan söka i koden för kommandot "doCommandAsConsole" och se om den kör strtolower($var) någonstans, ta bort det och testa igen.

Dakota 2013-01-20 12:32

Citat:

Ursprungligen postat av Nihilnovi (Inlägg 20460072)
På Windows matchar 'GULD' och 'guld' både gULd och GulD osv. PHP använder OS funktioner internt för att känna av stora & små bokstäver på t.ex include & require.

På Linux är allting case-sensitivt, dvs GULD matchar endast GULD.

Du kan söka i koden för kommandot "doCommandAsConsole" och se om den kör strtolower($var) någonstans, ta bort det och testa igen.

Hej! Har detta någon betydelse? Hittade det i koden:

PHP-kod:

 $sms explode(' ',strtolower($_REQUEST['sms'])); // Låt vara // Låt vara 


jonssondesign 2013-01-20 12:42

Japp det har den nog högst troligen.

Det koden gör är att den delar upp strängen $_REQUEST['sms'] i olika delar vid varje mellanslag, och lägger sedan in det i en array som heter $sms.

Sen har du, precis som du misstänkte, strtolower (String to lowercase). Och det är precis där ditt "fel" ligger. Testa byt ut den där kodsnutten till:

PHP-kod:

$sms explode(' ',$_REQUEST['sms']); // Låt vara // Låt vara 


Nihilnovi 2013-01-20 13:17

Citat:

Ursprungligen postat av Dakota (Inlägg 20460087)
Hej! Har detta någon betydelse? Hittade det i koden:

PHP-kod:

 $sms explode(' ',strtolower($_REQUEST['sms'])); // Låt vara // Låt vara 


Det är där felet i logiken ligger.

Det som sker är att texten som finns i $sms delas upp på mellanrum och varje ord som skapas då görs om till små bokstäver.

För att lösa problemet och få den funktionalitet du vill, byt ut strängen till:

PHP-kod:

 $sms explode(' ',$_REQUEST['sms']); // Låt vara // Låt vara 

Det kan dock finnas en orsak till varför utvecklaren har valt att normalisera strängen till endast små bokstäver, ändringar gör du på egen risk!

Dakota 2013-01-20 13:26

Citat:

Ursprungligen postat av jonssondesign (Inlägg 20460088)
Japp det har den nog högst troligen.

Det koden gör är att den delar upp strängen $_REQUEST['sms'] i olika delar vid varje mellanslag, och lägger sedan in det i en array som heter $sms.

Sen har du, precis som du misstänkte, strtolower (String to lowercase). Och det är precis där ditt "fel" ligger. Testa byt ut den där kodsnutten till:

PHP-kod:

$sms explode(' ',$_REQUEST['sms']); // Låt vara // Låt vara 


Hej! Det fungerade på sätt och vis, scriptet verkade förstå stora bokstäver, däremot så slutade större delen av de övriga funktionerna att fungera av någon anledning. När jag försökte simulera ett köp av VIP så ekade det tomt tillbaka, och ingen operation utfördes. Det gick heller inte att beställa just färgat namn, men så fort jag ändrade tillbaka till
PHP-kod:

$sms explode(' ',strtolower($_REQUEST['sms'])); // Låt vara // Låt vara 

så fungerade allt igen.

Har sökt igenom hela scriptet och hittar inte liknande kod på något annat ställe, så jag förstår inte varför det inte fungerar. Det måste dock finnas någon anledning till att det står Låt vara och att koden ligger där ;)

jonssondesign 2013-01-20 14:00

haha ja troligen ;)

Vad tror du om du gör såhär? Kör med koden jag gav dig först.

Efter if-koden som du visade i första inlägget, så skriver du den "riktiga" koden igen. Förstår du?

Min kod
Första inläggets kod (if ($sms['1'] =......)
Den riktiga koden ($sms = explode(' ........)

yakuzaemme 2013-01-20 14:59

Citat:

$namn = explode(' ', $_REQUEST['sms'])[2];
$sms = explode(' ',strtolower($_REQUEST['sms'])); // Låt vara, som vanligt
...
...
...
if ($sms['1'] == "guld")
{
echo "Ditt namn har nu fått en guldig färg.";
$ws->doCommandAsConsole("nick ".$namn." &6".$namn."");

$ws->doCommandAsConsole("bcast ".$namn." har köpt guldigt namn!");
}
Nog det enklaste sättet att göra det på iom. att vi inte har tillgång till hela koden.


Alla tider är GMT +2. Klockan är nu 00:21.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson