Autor Zpráva
Martinek
Profil *
DObrý den potřeboval bych poradit .. udělal sem si AJAX chat a potřebuju sprovoznit jeden příkaz pro adminy ... jo vim jak udělat pak tu funkci apod , ale nevim jak udělat ten příkaz že když ve zprávě napíše /block [nick uzivatele] .... kdyby ten prikaz byl jen /block tak to udelam normalne pomoci podminky ale ja tam potrebuji jeste ten nick .. "mezeru a potom zadat nick" a pak ten nick co tam zadal se da do promeny ktera ho v DB blokcne ... děkuji za každou pomoct snad mě chápete...
scheras
Profil *
Jestliže dobře chápu Váš dotaz, tak je potřeba rozdelit řetězec na příkaz (/block) a nick. Na to v php existuje funkce, která dostane jako parametry string a znak podle kterého se dělí (ve vašem případě tedy mezera) a uloží části do pole. Ty pak normálně zpracujete stejně jako u zbatku příkazů.
Martinek
Profil *
takže to mam udělat přes explode? :)


no dobře to bysme měli ještě bych potřeboval aby tato funkce vrátila TRUE v případě že k tomu je tedy pčipsán jakýkoli nick

if($cmd == "/ban") { return true;} - To právě nevím jak změnit
scheras
Profil *
Asi bych testoval, jestli ma pole dvě položky.
Martinek
Profil *
No to právě nevím jak proto se vás ptám :) Jinak děkuji za rady
scheras
Profil *
if ($pole[1]) {
        byl zadan nick;
}
Joker
Profil
Martinek:
Raději přes regulární výrazy. Nějak takhle:
$text = "blabla /ban troll blabla";
$matches = array();
preg_match("~\/ban (\S+)~", $text, $matches);
$zabanovat = $matches[1]; // přezdívka (zde "troll")

Takhle by to fungovalo v každé zprávě jen pro jeden příkaz. Kdyby to mělo fungovat pro více („/ban první /ban druhý“), muselo by se použít preg_match_all
Martinek
Profil *
Dobře zkusím , každopádně děkuji...


Jo dobrá ... teď sem potřeboval vyřešit jestli zpráva kterou pošle obsahuje ten příkaz zkoušel sem to přes strpos ale nefunguje mi ...

if(strpos($cmd,"/ban ")) { return true; } sem udělal ale vrací false i přes to že je to tam napsané ... :/
Joker
Profil
Martinek:
teď sem potřeboval vyřešit jestli zpráva kterou pošle obsahuje ten příkaz
Pravda, to jsem tam taky mohl napsat, tohle je návratová hodnota té funkce preg_match.
Tak takhle (pozn.: Abych ukázal obě varianty, teď zas používám preg_match_all):
$text = "blabla /ban troll blabla";
// všechny výskyty "/ban přezdívka"
$banovat = preg_match_all("~\/ban (\S+)~", $text, $bans);
if($banovat > 0) {
  // $bans je dvourozměrné pole, u každého záznamu je $bans[…][1] přezdívka koho zabanovat
  foreach($bans as $match) {
    $koho = $match[1]; // přezdívka (zde "troll");
    // nějaký další kód k banu
  }
}

PříkazFunkce preg_match_all vrací false v případě chyby a počet nalezených shod v případě úspěchu (tj. žádná shoda vrátí nulu)
PříkazFunkce preg_match funguje analogicky, akorát hledá jen první shodu, takže výsledek může být jen false, 0 nebo 1.

Opravuji: Příkaz → Funkce
Martinek
Profil *
ok děkuji :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: