Avatar billede hrole Mester
29. maj 2010 - 19:22 Der er 9 kommentarer og
1 løsning

% bliver til %25

Hej,

Jeg har pludselig opdaget en fejl på en af mine sider, som der ikke var tidligere.

Jeg har en søgeside som sender resultatet til en resultatside hvor der er mulighed for at sorterer efter kolonne.

Sender jeg en søgning på fx "ha%" kommer resultaterne helt fint, men forsøger jeg at få sorteret sendes jeg til min 403-side. Jeg kan se url'en i browseren bliver http://www.nogetnoget.dk/resultat.php?navn_s=ha%25&sort=1, jeg mener bestemt at der plejer at stå navn_s=ha%&sort=1. Det er også her det går galt med sorteringen da links hertil er fx navn_s=ha%&sort=2.

Hvorfor bliver % pludselig til %25? Jeg er næsten 100% sikker på jeg ikke har foretaget ændringer - og jeg ved med sikkerhed det tidligere fungerede.
Avatar billede arne_v Ekspert
29. maj 2010 - 20:24 #1
%25 er vel korrekt URL encoding af % tegn !?!?
Avatar billede hrole Mester
29. maj 2010 - 21:09 #2
joh, men linket til sorteringen bliver %, hvilket hentes via $_GET og ved klik herpå sendes til 403-siden. Er der noget jeg overser?
Avatar billede cronaldo Nybegynder
29. maj 2010 - 21:17 #3
du kan vel bruge url_decode?

Ellers skal du lave det sådan her:

if( $_GET['navn_s'] == 1 )
{
  $var = "ha%";
}

Det, mener jeg, er bedre, da du så ikke henter ting direkte fra URL'en til din mysql-query!
Avatar billede hrole Mester
29. maj 2010 - 22:23 #4
jo tak for forslaget. Men hvorfor fungeret linket til anden sortering ikke?
Avatar billede cronaldo Nybegynder
30. maj 2010 - 02:25 #5
Det kommer an på hvad du mener!?

Du bliver nødt til at poste den query (herunder kode) hvori du benytter dine $_GET-variabler :) så tror jeg, jeg vil have nemmere ved at se problemet :)
Avatar billede cronaldo Nybegynder
30. maj 2010 - 13:13 #6
Jeg ved ikke hvad du mener :o)
Prøv at giv mig noget yderligere kode, så kan det være jeg bedre kan hjælpe
Avatar billede hrole Mester
01. juni 2010 - 21:07 #7
Hente oplysninger fra søgeside:
if (isset($_GET['navn_s'])) { $navn = (string) strip_tags($_GET['navn_s']); }
$tekst = (string) strip_tags($_GET['tekst_s']);
if (isset($_GET['sortering_s'])) { $sortering = (string) strip_tags($_GET['sortering_s']); } else { $sortering = 'navn'; }

Queryen:
$query = "SELECT * FROM XXX WHERE navn LIKE '$navn' AND tekst LIKE '$tekst' ORDER BY `$sortering` ASC";

Tabelkolonnen med link:
<th><a href="<?php echo $_SERVER['PHP_SELF'].'?navn_s='.strip_tags($_GET['navn_s']).'&tekst_s='.strip_tags($_GET['tekst_s']).'&sortering_s=navn'; ?>">navn:</a></th>

Problemet opstår som nævnt kun ved brug af wildcards, ellers ingen problemer og som nævnt har der tidligere ingen problemer været.
Avatar billede cronaldo Nybegynder
03. juni 2010 - 23:03 #8
Jeg ved godt det ikke er optimalt - men du kan prøve det her:
------------



$where = '';
if( isset($_GET['navn_s']) )
{
    $where .= "WHERE navn LIKE '".mysql_real_escape_string($_GET['navn_s'])."'";
}

if( isset($_GET['tekst_s']) && !empty($_GET['tekst_s']) )
{
    if( empty($where) )
    {
        $str = 'WHERE ';
    } else {
        $str = ' AND ';
    }
    $where .= $str."tekst LIKE '".mysql_real_escape_string($_GET['tekst_s'])."'";
}

if (isset($_GET['sortering_s'])) {
    $sortering = (string) strip_tags($_GET['sortering_s']);
}
else
{
    $sortering = 'navn';
}

$query = "SELECT * FROM XXX ".$where." ORDER BY ".$sortering." ASC";
Avatar billede hrole Mester
05. juni 2010 - 10:10 #9
cronaldo smid svar
Avatar billede cronaldo Nybegynder
05. juni 2010 - 22:47 #10
Virkede det :o) ?
Det ville da være fantastisk - håber i hvert fald du kan bruge det!

Held og lykke :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester