[MYSQL/PHP] Database errors na mod_rewrite

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb net mn pagina's laten rewriten met mod_rewrite. mijndomein.com/spel.php?id=10 --> mijndomein.com/spel/schieten/10-shooter.html.

Alles werkt prima, behalve het feit dat ik op de laatste url (de 'fake' url dus) errors krijg, namelijk de volgende.

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in httpdocs/spel.php on line 124

Het gaat om het volgende stukje code

code:
1
2
3
4
5
6
7
8
$catkweerie = mysql_query("SELECT cat_id FROM gamesdb WHERE id=".$_GET['id']." ");
$cat = mysql_fetch_assoc($catkweerie);
$kweerie = mysql_query("SELECT naam,id,avgrating FROM gamesdb WHERE cat_id=".$cat['cat_id']." ORDER BY avgrating DESC LIMIT 8");

<br/>Andere spellen in deze categorie:<br/>|';
while($othergames = mysql_fetch_assoc($kweerie)){
echo ' <a href="spel.php?id='.$othergames['id'].'">'.$othergames['naam'].'</a> |';
}



Als ik de pagina open via spel.php?id=10 doet ie het dus wel, maar als ik de pagina open via mijndomein.com/spel/schieten/10-shooter.html , dan geeft ie dus een error.

Ik weet er geen raad mee...

Acties:
  • 0 Henk 'm!

  • sTeVuu
  • Registratie: Oktober 2005
  • Laatst online: 08-08-2023
$_GET['id'] is toch niet gezet bij 10-shooter.html?

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Nu online
Misschien kun je even aangeven wat je waarheen rewrite. Met je code is namelijk niets mis (op inputvalidatie na dan), die werkt zoals verwacht. Waar het mis gaat is het rewriten van het mooie url naar het url met de get parameters.

(daarnaast hebben mooie urls weinig zin als je ze niet consequent gebruikt in je applicatie. Bij de echo op regel 7 moet je dan dus ook een mooi url echo-en).

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
code:
1
2
RewriteEngine On
RewriteRule ^spel/(.*)/(.*)-(.*).html spel.php?id=$2&naam=$3&categorie=$1


Is mijn rewrite code.

Klopt T-MOB, ik ben nu bezig met het rewriten van alle URL's, dus die echo op regel 7 pas ik aan als dit probleem is opgelost :)

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Nu online
Verwijderd schreef op woensdag 16 november 2005 @ 19:43:
code:
1
2
RewriteEngine On
RewriteRule ^spel/(.*)/(.*)-(.*).html spel.php?id=$2&naam=$3&categorie=$1

Is mijn rewrite code.
En wat komt er in $_GET['id'], $_GET['naam'] en $_GET['categorie'] als je het URL uit je startpost invult?

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zal het even checken T-Mob, maar er is me iets anders opgevallen.

Ik heb gekozen om spaties te vervangen door -. Dit doe ik in PHP, dus mijn main page linkt niet naar /spel/schieten/221-alien%20shooter.html maar naar /spel/schieten/221-alien-shooter.html .

Ik merk dat die error alleen maar voorkomt als er een - in de naam zelf staat. Als ik het spel copter wil spelen, via /vliegen/336-copter.html , dan is alles dus prima. Ik zou graag die streepjes in mn titel willen houden. Moet er iets aan die rewriteurl veranderen?

  • T-MOB
  • Registratie: Maart 2001
  • Nu online
Mja, het is niet m'n bedoeling om alles voor je voor te kauwen. En als ik eerlijk ben kan ik dat ook niet zonder in de documentatie te gaan loeren (wat ik niet van plan ben). Het punt is dat je een applicatie hebt die uitgaat van een aantal variabelen die worden geset via de GET methode. Dat werkt bijna, in principe zou je namelijk al voordat je data de DB in stuurt moeten checken of het voldoet aan bepaalde parameters. Dat je database nu valt over deze foutieve input mag je als een geluk beschouwen, voor hetzelfde geld regelt iemand dat er statements inkomen die zorgen voor het nuken van je database... Wat er dus ook opgelost gaat worden aan je rewrite probleem, je zult moeten nadenken over inputvalidatie.

Over de rewriterule. In de mooie url gebruik je het '-' teken in combinatie met een character class (.*). Dat houdt in dat elk karakter is toegestaan, dus ook de '-'. Hoe "221-alien-shooter" gematched gaat worden door (.*)-(.*) is dus compleet afhankelijk van hoe de default behaviours zijn afgesteld mbt. greediness. Met je boerenfluitjeverstand kun je bedenken dat zowel $1=221 & $2 = alien-shooter als $1=221-alien & $2=shooter geldige uitkomsten zouden zijn. Wil je zeker weten wat de uitkomst is dan zul je in 1 van de twee moeten specificeren dat er geen '-' in mag voorkomen.

Daarnaast kun je je afvragen wat je constructie met de '-' toevoegt aan het gangbare scheidingsteken '/'. Ik zou zeggen dat ik om alien te spelen surf naar domein.com/games/shooters/alien/ of domein.com/games/shooters/221

Regeren is vooruitschuiven

Pagina: 1