Toon posts:

[Mysql&PHP] Het opvragen van een character

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een script onlangs gebouwd voor een cheat website. Maar goed deze moet aangepast worden.

Bij die script was het zo dat er gecontroleerd werdt welk cheat systeem het ging en dan kreeg ik een lijst met alle codes...

Deze codes kreeg ik dan onder elkaar oftewel:
a
=> a
=> aap

b
=>b
=>blaat

etc..

Maar ja.. Sommige lijsten werden te lang en dus.. moest het anders aan gepakt worden.

Het plan is om alle letters apart op 1 pagina te laten zien..

ofwel:

pagina.php?pid=1&ch=*

* = a of b of c of d etc..

Maar ik kom er dus niet uit hoe ik dit moet doen.. Ik hoop dat iemand weet hoe ik het ken doen. En of deze er ook a.u.b wat uitleg bij zou willen geven... zodat ik het in het vervolg snap.

Daarnaast heb ik het probleem dat ik de getallen niet netjes onder # krijg.
spellen die beginnen met een getal
1blaat
3aap
wil ik auto onder # hebben

Nu heb ik wel wat dingen geprobeert. Maar wat ik ook deedt. ik kreeg netjes alle 1nen onder elkaar en alle 2en onder elkaar. Weet iemand hoe ik dit ken oplossen.. En zo ja zou deze dan ook a.u.b. mij kunnen vertellen hoe ik dat moet toepassen en hoe dit werkt? zodat ik ook dit snap in het vervolg..

Het script dat ik nu gebruik is:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
if(!isset($_GET["pid"]))
{
    echo "<body background=../images/achtergrond_website.gif bgproperties=fixed bgcolor=#000000 text=#FFFFFF link=#FFFFFF vlink=#FFFFFF alink=#FFFFFF>";
    echo "<td bgcolor=#000000><center><font size=2 face=Arial><b><a href=../platform.php>Click here</a> to make a system choose for viewing a system directory</b></font>";
    $query = "SELECT id, img FROM platform";
    $result = mysql_query($query) or die (mysql_error());
}
elseif(!isset($_GET["id"]))
{
    echo "<body background=../images/achtergrond_website.gif bgproperties=fixed bgcolor=#000000 text=#FFFFFF link=#FFFFFF vlink=#FFFFFF alink=#FFFFFF>";
    echo "<td bgcolor=#000000><center><center><font size=2 face=Arial><b><a href=##>#</a> | <a href=#A>A</a> | <a href=#B>B</a> | <a href=#C>C</a> | <a href=#D>D</a> | <a href=#E>E</a> | <a href=#F>F</a> | <a href=#G>G</a> | <a href=#H>H</a> | <a href=#I>I</a> | <a href=#J>J</a> | <a href=#K>K</a> | <a href=#L>L</a> | <a href=#M>M</a> | <a href=#N>N</a> | <a href=#O>O</a> | <a href=#P>P</a> |<a href=#Q>Q</a> | <a href=#R>R</a> | <a href=#S>S</a> | <a href=#T>T</a> | <a href=#U>U</a> | <a href=#V>V</a> | <a href=#W>W</a> | <a href=#X>X</a> | <a href=#Y>Y</a> | <a href=#Z>Z</a></b></font></center><br><hr color=#FF0000><table align=center width=400>";
    $query = "SELECT id, platform_id, titel, cheat FROM cheats WHERE platform_id=".$_GET["pid"]." ORDER BY titel ASC";
    $result = mysql_query($query) or die (mysql_error());
    $x = "bla";
    while ($row = mysql_fetch_array($result)){
    $rest = substr ($row["titel"], 0, 1);
    if($x != $rest)
    {
        echo "<tr><td bgcolor=#ff0000><center><font size=3 face=arial color=#ffffff><b><a name=".$rest.">- ".$rest." -</font></b></center></td></tr>";
        $x = $rest;
    }
    echo "<tr><td align=left><font size=2 face=Arial><b><li><a href=cheats.php?pid=".$row["platform_id"]."&id=".$row["id"].">".$row["titel"]."</a></li></b></font></td></tr>";
}
echo "</table></center>";
}
else
{
    echo "<body background=../images/achtergrond_cheats.gif bgproperties=fixed bgcolor=#000000 text=#000000 link=#FFFFFF vlink=#FFFFFF alink=#FFFFFF><td bgcolor=#ffffff>";
    $query = "SELECT id, platform_id, titel, cheat, readers FROM cheats WHERE id=".$_GET["id"];
    $querya = "SELECT id, system FROM platform WHERE id=".$_GET[pid];
    $resulta = mysql_query($querya) or die (mysql_error());
    $result = mysql_query($query) or die (mysql_error());
    $rowa = mysql_fetch_array($resulta);
    $row = mysql_fetch_array($result);{
    echo "<center><font size=4 face=Arial><b>".$row["titel"]."</b></font></center>";
    echo "<hr color=#FF0000><center><font size=3 face=Arial><i>".$rowa["system"]."</i></font></center>";
    echo "<hr color=#FF0000><br><font size=2 face=Arial>".$row["cheat"]."</font>";
    echo "<br><hr color=#FF0000><font size=2 face=Arial><b>Thanks to Cheatworld the Reader(s) ".$row["readers"]."</b></font>";
    } 
}
?>

[ Voor 20% gewijzigd door Verwijderd op 10-05-2003 00:10 ]


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Verwijderd schreef op 09 mei 2003 @ 02:24:
Het plan is om alle letters apart op 1 pagina te laten zien..

ofwel:

pagina.php?pid=1&ch=*

* = a of b of c of d etc..

Maar ik kom er dus niet uit hoe ik dit moet doen.. Ik hoop dat iemand weet hoe ik het ken doen.
Ik snap niet precies wat je probleem is, maar als het 'm in de mysql-query zit dan doe je dat zo:
code:
1
SELECT * FROM table WHERE naam LIKE '".$GET['ch']."%'
Daarnaast heb ik het probleem dat ik de getallen niet netjes onder # krijg.
Wat bedoel je met # ??

Als je het getal er van af wil halen soms, voordat je sorteert, dan kun je dat met (php) substr() doen of (mysql) SUBSTRING

p.s. zet je php code voortaan ff tussen [php] tags, dat is wat leesbaarder

[ Voor 9% gewijzigd door marty op 09-05-2003 03:22 ]


Verwijderd

Topicstarter
Ik heb eventjes een nieuwe pagina gemaakt om die regel o.a. te testen.... En voor overzicht over die functie..

Toen ik je regel toepaste deedt hij het overigens niet meer. De echo werkte niet meer. Ik heb het nu wel werkend maar nu nog de # (getallen) ?

Bij het aanvragen van # moeten alle namen die beginnen met een 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 te voorschijnkomen..

Nu had je het over substr. En nu weet ik van substr eigenlijk helemaal niks....

op www.php.net/substring krijg ik verschillende resultaten maar.. :s. euh bak er niks van geloof ik

Het script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
include ("scripts/config.php");
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($database);

echo "<center><table>";
$query = "SELECT * FROM cheats WHERE titel LIKE '".$_GET["ch"]."%'";
$result = mysql_query($query) or die (mysql_error());
while ($row = mysql_fetch_array($result))
{
    echo "<tr><td>".$row["titel"]."</td></tr>";
}
echo "</table></center>";
?>


als ik nu intyp: http-adres/test.php?ch=a krijg ik alleen a dus dat werkt nu wel

als ik nu intyp: http-adres/test.php?ch=# krijg ik alle codes te zien die aanwezig..

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Goh, zou # een speciale karakter zijn?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Topicstarter
dusty schreef op 10 May 2003 @ 20:57:
Goh, zou # een speciale karakter zijn?
Daar ging het me niet om.. Dat hij aangewezen moet worden om alleen de namen met getal als 1ste karakter op te roepen snap ik....

Maar dat moet met substring maar hoe dat voorderest moet weet ik dus niet. Daar gaat het me wel om.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Misschien als je dan naar de juiste website gaat, om de juiste substr te gebruiken, begrijp je het wel ?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Topicstarter
Ik zelf heb gekeken bij:

http://www.php.net/manual/nl/function.substr.php

en ik weet wel ong. wat ik met dat substr ken doen als het gaat in php.. zoals a oproepen en b.. in zelfde pagina zeg maar..

Maar in andere worden. Ik snap d'r dus idd. geen moet van als het gaat om die getallen onder te brengen in een #..

Verwijderd

Je bent absoluut niet duidelijk maar ik hoop dat je het volgende bedoelt :
27 opties, a t/m z en 0..9 als de 27 optie. Dus starts with a t/m z en starts with digit ?

Als dat klopt :
select `field` from `table` where title LIKE "a%"; // etc voor b t/m z
en
select `field` from `table` where title LIKE "0%" or title LIKE "1%" or title LIKE ....; // etc voor 2 t/tm 9

Dit kun je veel beter oplossen met regex in mysql maar dan moet je wel een beetje bedreven zijn in regex ( ik zelf heb altijd de manual nodig :-)):
Zonder testen denk ik aan iets als :
SELECT `field` from `table` where `title` REGEXP '^[0..9].*';

Verwijderd

Topicstarter
wow.. Euh.. Regexp?

Lol ik zal proberen wat duidelijker te zijn.

Ik sla al m'n codes op in een database.. En deze roep ik op via hun titel..

Nu wil ik dat als ik een systeem opvraag. Alle titel's krijg te zien die bij dat systeem hoort.

Naja dat lukt. Simpel. Alle titels uit database hallen die bij systeem horen.

Nu wil ik dat die titels niet een eeuwe lange lijst wordt. En dus dat het per pagina gaat van een letter/(getallen 1t/m9)

Of wel..

zodra ik A oproep.. Krijg ik een pagina met alle titels die met A beginnen
zodra ik B oproep.. Krijg ik een pagina met alle titels die met een B beginnen.

Na goed dat is me dus ook gelukt

Maar ik wil bijvoorbeeld ook dat als ik # oproep dat ik alle getallen van 0 t/m 9 naar voren kan hallen.

A
aap
aarde

B
blaat
bom

#
0
1
2
3
4
5
6
7
8
9

Maar dat laatste # lukt me niet.. Ik ken wel alleen het getal 1 opvragen. of alleen het getal 2.. maar niet alle getallen. EN dan ook echt alleen de getallen.

dus als je bij mij naar codes vraagt gaat het via volgende schema

[systeem]==>[lijst codes (standaart = a)]==>[pagina lijst naar karakter(#, a, b, c, d etc...)]

Hmz.. Ik hoop dat je het snapt wat ik bedoel.

Dus:
Niet alle getallen apart aanvragen: (1, 2, 3, 4, 5, etc...)

Maar alleen# of 'ge' aanvragen zodat alle getallen verschijnen 0 t/m 9

Verwijderd

Tja, voor zover ik weet verwijst # in een URL naar een anker op de pagina. Ergo: volgens mij zal het zo nooit werken. Lijkt me handiger dat je gewoon "ch=" meegeeft (dus geen waarde) en dan alle 0-9 titels eruit haalt. Daar bouw je gewoon een query voor. Check je ch waarde, en voor de desbetreffende query uit; bij letter: query met "a%" of zo, en bij geen waarde de query voor alle 0-9 tittels.

Verwijderd

Topicstarter
hmz en hoe doen ik dat?

Dat als er geen query opgegeven is dat hij automatisch de waarde 0t/m9 eruit haalt?

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
include ("scripts/config.php");
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($database);

echo "<center><table>";


if($ch == "");
{
$query = "SELECT * FROM cheats WHERE titel LIKE '%' ORDER BY titel ASC";
}
if($ch == "*"); 
{
$query = "SELECT * FROM cheats WHERE titel LIKE '".$_GET["ch"]."%' ORDER BY titel ASC";
}
$result = mysql_query($query) or die (mysql_error());
while ($row = mysql_fetch_array($result))
{
    echo "<tr><td>".$row["titel"]."</td></tr>";
}
echo "</table></center>";
?>


heb ik nu.. Dus bij geen query weergeeft hij nu hele lijst.. Dat was dus ook geen probleem. Maar nu de getallen nog:s

Verwijderd

Verwijderd schreef op 10 May 2003 @ 22:41:
Je bent absoluut niet duidelijk maar ik hoop dat je het volgende bedoelt :
27 opties, a t/m z en 0..9 als de 27 optie. Dus starts with a t/m z en starts with digit ?

Als dat klopt :
select `field` from `table` where title LIKE "a%"; // etc voor b t/m z
en
select `field` from `table` where title LIKE "0%" or title LIKE "1%" or title LIKE ....; // etc voor 2 t/tm 9

Dit kun je veel beter oplossen met regex in mysql maar dan moet je wel een beetje bedreven zijn in regex ( ik zelf heb altijd de manual nodig :-)):
Zonder testen denk ik aan iets als :
SELECT `field` from `table` where `title` REGEXP '^[0..9].*';
Hiermee moet je dus wel een query kunnen bouwen die alle [0-9]* titels eruit haalt.

Nu kun je dus bij geen ch alles laten zien, bij ch=[a-z] de betreffende letter, en bij een willekeurige andere (bijv ch=nu) de nummers laten zijn. Doe een check op de lengte van de ch string, bij 0 alles, bij 1 de letter, bij 2 de cijfers. Lijkt me redelijk eenvoudige oplossing.

[ Voor 4% gewijzigd door Verwijderd op 10-05-2003 23:56 ]


Verwijderd

Topicstarter
ok ik heb dus wat dingen veranderd nu..

Ik had bijvoorbeeld gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<? 
include ("scripts/config.php"); 
mysql_connect($dbhost,$dbuser,$dbpass); 
mysql_select_db($database); 

echo "<center><table>"; 
if($ch == "")
{ 
$query = "SELECT * FROM cheats WHERE titel LIKE '0%' or titel LIKE '1%' or titel LIKE '2%' or titel LIKE '3%' or titel LIKE '4%' or titel LIKE '5%' or titel LIKE '6%' or titel LIKE '7%' or titel LIKE '8%' or titel LIKE '9%' ORDER BY titel ASC"; 
}
if($ch == "$ch")
{ 
$query = "SELECT * FROM cheats WHERE titel LIKE '".$_GET["ch"]."%' ORDER BY titel ASC"; 
}

$result = mysql_query($query) or die (mysql_error()); 
while ($row = mysql_fetch_array($result)) 
{ 
echo "<tr><td>".$row["titel"]."</td></tr>"; 
} 
echo "</table></center>"; 
?> 


Dat werkte dus aardig.

Maar goed. Nu moest het ook nog omgezet worden dat alleen de titels uit database gehaald worden van een bepaald systeem.

Dus ik heb alles veranderd in:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<? 
include ("scripts/config.php"); 
mysql_connect($dbhost,$dbuser,$dbpass); 
mysql_select_db($database); 

if(!isset($pid))
{
    echo "Before you can choose a titel of a game for a code. You have to choose a system.";
}
elseif(!isset($id))
{
    echo "<center><table>"; 
    if($ch == "")
    { 
        $query = "SELECT * FROM cheats WHERE titel LIKE '0%' or titel LIKE '1%' or titel LIKE '2%' or titel LIKE '3%' or titel LIKE '4%' or titel LIKE '5%' or titel LIKE '6%' or titel LIKE '7%' or titel LIKE '8%' or titel LIKE '9%' AND platform_id=".$_GET["pid"]." ORDER BY titel ASC"; 
        $result = mysql_query($query) or die (mysql_error()); 
        while ($row = mysql_fetch_array($result)) 
        { 
            echo "<tr><td>".$row["titel"]."</td></tr>"; 
        } 
    } 
    if($ch == "$ch")
    { 
        $query = "SELECT * FROM cheats WHERE titel LIKE '".$_GET["ch"]."%' AND platform_id=".$_GET["pid"]."  ORDER BY titel ASC"; 
        $result = mysql_query($query) or die (mysql_error()); 
        while ($row = mysql_fetch_array($result)) 
        { 
            echo "<tr><td>".$row["titel"]."</td></tr>"; 
        } 
    }

    echo "</table></center>"; 
}
else
{
echo "blaat aap";
}
?> 


Naja. goed dit werkt dus NIET.. :'(

want roep ik nu aan:

test.php?pid=1

dan krijg ik alle titels te zien van dat platform + alle titels die aanwezig zijn die beginnen met een 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9..

Doen ik:

test.php?pid=1&ch=a

dan krijg ik wel netjes m'n a-titels te zien van het systeem met platform_id=1.

Maar goed waarom als ik

test.php?pid=1
of
test.php?pid=1&ch=

Alle titels opeens krijg te zien die bij het platform_id hoort + alle 0 t/m 9 - titels :?

Verwijderd

Topicstarter
Mensen ik snap het niet.
Ik heb maar weer een aanpassing gemaakt en de nieuwste aanpassingen werkt eigenlijk perfect op 1 nadeel.

Welke platform_id er ook is. Hij geeft altijd alle titels aan die met een getal beginnen.
1942
1blaat
4schaap
etc..

Nu doet a t/m z het wel perfect.. Ook netjes bij bijhorende platform_id

Het stukje van de getallen is:

PHP:
1
2
3
4
5
6
7
8
9
10
    else
    { 
            $query = "SELECT * FROM cheats WHERE platform_id=".$_GET["pid"]." AND titel LIKE '0%' or titel LIKE '1%' or titel LIKE '2%' or titel LIKE '3%' or titel LIKE '4%' or titel LIKE '5%' or titel LIKE '6%' or titel LIKE '7%' or titel LIKE '8%' or titel LIKE '9%' ORDER BY titel ASC"; 
            $result = mysql_query($query) or die (mysql_error()); 
        echo "<tr><td bordercolor=#ffffff background=images/systeem.gif width=255 height=20><center><font size=2 face=Arial color=#ffffff><b>#</b></center></td></tr><tr><td bordercolor=#ffffff><table width=100%><ul>"; 
            while ($row = mysql_fetch_array($result)) 
            { 
                echo "<li><font size=2 face=Arial><a href=cheats.php?pid=".$_GET["pid"]."&co=".$row["id"]."><b>".$row["titel"]."</b></li>"; 
            }
        }


Nu heb ik vanalles geprobeerd .. althans in mijn ogen dan.
Maar wat ik ook doe. Zolang ik de getallen opvraag zie ik altijd al m'n titels die beginnen met een getal.

Verwijderd

Topicstarter
Verwijderd schreef op 10 May 2003 @ 23:56:
[...]


Hiermee moet je dus wel een query kunnen bouwen die alle [0-9]* titels eruit haalt.

Nu kun je dus bij geen ch alles laten zien, bij ch=[a-z] de betreffende letter, en bij een willekeurige andere (bijv ch=nu) de nummers laten zijn. Doe een check op de lengte van de ch string, bij 0 alles, bij 1 de letter, bij 2 de cijfers. Lijkt me redelijk eenvoudige oplossing.
Ikkeuh manual gezocht:
http://www.mysql.com/doc/en/Regexp.html

maar euh.. :? |:( :'(

Nu kwam ik wel achter iets anders trouwens.. Buiten bovenstaande.

Dat als ik invulde:
$query = "SELECT * FROM cheats WHERE titel LIKE '0%' OR titel LIKE '1%' AND platform_id=".$_GET["pid"]." ORDER BY titel ASC";

Dat alles prima werkte.. Maar ja.. Alleen getallen 0 en 1 weergegeven werden.

En dat als ik:

$query = "SELECT * FROM cheats WHERE titel LIKE '0%' OR titel LIKE '1%' OR titel LIKE '2%' AND platform_id=".$_GET["pid"]." ORDER BY titel ASC";

invulde het al mis ging. Nu ken ik wel weer de 0 weg hallen.. Maar ja. Het gaat om 10 getallen. de 0 t/m 9... En bij die $query ken ik d'r maar 2 gebruiken.. De 0 en 1 of 1 en 2 etc.... :?

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 22-08 17:59

Knutselsmurf

LED's make things better

MySQL heeft een redelijk aantal stringfuncties ingebouwd en de LEFT() lijkt mij hier wel bruikbaar.

Het selecteren van alle cheats die beginnen met [0..9] kun je met een dergelijke query opvragen:
code:
1
SELECT * FROM cheats WHERE LEFT(titel,1) IN ('0','1',.....,'9')

- This line is intentionally left blank -

Pagina: 1