Autor Zpráva
SkyVessel
Profil *
Mám data v tabulce mysql a na stránce je vypisuji:
jen ty co zacinaji na A, pak ty na B....
$seznam=$_get['szn'].'%';
$dotaz="SELECT * FROM data WHERE nick LIKE '$seznam'";

(tuším že tak nějak to tam mám =D)
Jak vypsat ty záznamy, které začínají nějakým znakem nebo číslovkou?? :)
AM_
Profil
nevidím problém, kromě SQL injection zranitelnosti :) pokud jsou tedy vypnuté magic_quotes_gpc.

pokud bude v $_GET['szn'] číslovka nebo jiný znak, mělo by to fungovat.
SkyVessel
Profil *
No to jsem právě zapoměl napsat - mě to nenapadlo... vypisuji pouze to, co potřebuji a znaky a čísla jsou v kategorii "#"...
<a href="?szn=a">A</a><a href="?szn=b">B</a> ... <a href="?szn=???">#</a>
mattyZEM
Profil
Nebude to fungovat, správně to je:
WHERE nick LIKE '$seznam%'
:)

(nevím jestli je to tak přesně s těmi apostrofy, ale % = .*?)
keeehi
Profil
mattyZEM:
Procento na konec přidává už o řádek výše:
$seznam=$_get['szn'].'%';
mattyZEM
Profil
Forgive me! Nečetl jsem to celé, gomen, meine schuld.
Moderátor nightfish: Dodržuj pravidla.
AM_
Profil
Zkus toto:
<a href="?szn=%23">#</a>
SkyVessel
Profil *
Nee...
mám tam nicky jako 4ever nebo -xXx-...
Od a po z to jede, ale nwm, jak na ty znaky...
SkyVessel
Profil *
Mě napadlo že by se dalo použít
<a href="?szn=0">#</a> ...
if (@$_GET["p"] == "0") {$page = "[^a-z]%";}

ale nevím, jak přesně to udělat, aby to jelo - jestli to tak vůbec pojede
AM_
Profil
Aha, už chápu, co chceš udělat, a dělá se to takto:

SELECT * FROM data WHERE nick REGEXP '^[^a-zA-Z].*'
SkyVessel
Profil *
takže můj výsledný kód vypadá asi takto... já vím, že by se to dalo udělat i jinak a efektivněji, ale co se týče mých znalostí - jsem spokojen :D
$page = @$_GET["p"]."%";
if (!@$_GET["p"]) {
	$page = 'a%';
}
$page_pom = NULL;
if (@$_GET["p"] == "a") $page_pom = "á%";
if (@$_GET["p"] == "c") $page_pom = "č%";
...
if (@$_GET["p"] == "z") $page_pom = "ž%";
if (@$_GET["p"] == "0") {$page = "REGEXP '^[^a-zA-Z].*'";}

$dotaz = "SELECT nick, damage, armor, world, DATEDIFF(NOW(), date) AS age, info FROM players WHERE LOWER(nick) LIKE 
LOWER('$page') OR LOWER(nick) LIKE LOWER('$page_pom') ORDER BY nick ASC";
$vysledek = @mysql_query($dotaz);

while ($player = mysql_fetch_array($vysledek, MYSQL_NUM)) {...

...ovšem to REGEXP nefunguje... když na něj dojde vyhodí to tohle:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in E:\EasyPHP5.3.0\www\rsf\player.php on line 51
...a mé anglické umění není natolik dobré, abych se o té funkci dozvěděl víc a tak to opravil sám... PLS HELP
AM_
Profil
Tak se podívej, co jsi napsal, když rozvineš proměnnou $page:

"SELECT nick, damage, armor, world, DATEDIFF(NOW(), date) AS age, info FROM players WHERE LOWER(nick) LIKE 
LOWER('0%') OR LOWER(nick) LIKE LOWER('REGEXP '^[^a-zA-Z].*'') ORDER BY nick ASC"

Je snad jasné, že toto v životě nebude fungovat. Budeš muset dotaz restrukturalizovat. REGEXP funguje, jen musíš dodržet syntaxi.
//hint: funkce LOWER je přinejmenším v té druhé části zbytečná, regulární výraz '^[^a-zA-Z].*' zahrne malá i velká písmena.
SkyVessel
Profil *
...když rozvinu proměnnou $page tak dotaz vypadá trochu jinak...
"SELECT nick, damage, armor, world, DATEDIFF(NOW(), date) AS age, info FROM players WHERE LOWER(nick) LIKE 
LOWER('REGEXP '^[^a-zA-Z].*'') OR LOWER(nick) LIKE LOWER('') ORDER BY nick ASC"

Po dlouhém hledání, jak má vlastně syntaxe s REGEXP vypadat =) a po menší úpravě jsem dospěl k funkčnímu výsledku
"SELECT nick, damage, armor, world, DATEDIFF(NOW(), date) AS age, info FROM players WHERE (nick REGEXP '^[^a-zA-Z].*') 
ORDER BY nick ASC"

Kdybych nechtěl, aby mi to vypisovalo i nicky začínající háčky...
REGEXP  '^[^a-zA-ZáéíóúčňřšťžÁÉÍÓÚČŇŘŠŤŽ].*'

...je to správně?? Fungovat to jede, takže asi jo :)
A DÍKY ZA POMOC
AM_
Profil
Není zač... žádnou další chybu tam nevidím.

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:

0