Avatar billede 17196 Nybegynder
25. november 2005 - 05:20 Der er 22 kommentarer og
1 løsning

problemer med action i url

Øv troede lige jeg havde opfundet den dybe tallerken :(
Men det her må jeg lige have lidt hjælp til at løse.

Jeg har lavet et script som gemmer det url man er på i en session. Det virker også fint nok, men mening med det var, at ligegyldigt hvor man er på sitet, kan man stadig vælge hvilke funktioner i menuen man vil have vist, uden at ryge til forsiden.

Men det giver et problem med ?/&

<?="$_SESSION[url]" . "$_SESSION[uri]";?>&amp;action=birthday

Når jeg så er inde og læse index.php?artikelid=X er der ikke noget problem, da det kommer til at se sådan ud når man click'er i menu:
index.php?artikelid=X&amp;action=birthday

Men er jeg på index.php og click'er i menu, kommer url til at se sådan ud:
index.php&action=birthday
Så får jeg denne smukke fejl:
The requested URL /index.php&action=birthday was not found on this server.

Jeg forstår godt hvorfor det ikke virker, men jeg kan slet ikke se en mulig løsning for mig. Nogen der har en smart måde?
Avatar billede nielle Nybegynder
25. november 2005 - 06:51 #1
Måske sådan:

<?=$_SESSION["url"] . $_SESSION["uri"] . ((strpos($_SESSION["uri"], "?") === false) ? "?" : "&") ; ?>action=birthday
Avatar billede 17196 Nybegynder
25. november 2005 - 07:12 #2
Fed lir!
Du skal selvfølgelig have nogle points, jeg skal nok acceptere, men vil lige se om der kommer andre bud på en nemmere løsning.
God weekend og tak!
Avatar billede nielle Nybegynder
25. november 2005 - 07:17 #3
i lige måde :^)
Avatar billede 17196 Nybegynder
25. november 2005 - 07:19 #4
Kan også se at hvis man så skifter funktion i menu, så kommer det til at se sådan ud:
index.php?action=banip&action=birthday&action=addbirthday
Det var ikke lige meningen! :P
Avatar billede nielle Nybegynder
25. november 2005 - 07:21 #5
Den fejl var der jo så også i din originale kode...
Avatar billede 17196 Nybegynder
25. november 2005 - 09:43 #6
Ja, men der må være en bedre måde at lave det på! PLEASE?
Avatar billede nielle Nybegynder
25. november 2005 - 14:58 #7
Hvad så når der er to action=xxx, den "gamle" og det nye? Hvilken en af dem skal bevares, og hvilken skal smides væk?
Avatar billede 17196 Nybegynder
25. november 2005 - 20:37 #8
Det er den sidste der skal bevares! Men kan det passe det skal være så besværligt? Der må da findes en nemmere løsning?
Avatar billede nielle Nybegynder
26. november 2005 - 09:34 #9
Nej, det er desværre ikke lige til. Og det bliver faktisk værre med det nye krav! Men hvis du gemmer alt det besværlige i en funktion:

function NewURL($action)
{
    $URL = $_SESSION["url"];
    $URI = $_SESSION["uri"];

    if (strpos($URI, "?") === false)
        return $URL . $URI . "?action=" . $action;

    $URIarr = explode("?", $URI);
    $URI = $URIarr(0);
    $URI =. "?action=" . $action;

    $URIarr = explode("&", $URIarr(1));
    for ($idx=0; $idx<count($URIarr); $idx++)
    {
        if (strpos($URIarr($idx), "action=") === false)
            $URI .= "&" . $URIarr($idx);
    }

    return $URL . $URI;
}

- kan du efterfølgende skrive:

<?=NewURL("birthday");?>
Avatar billede 17196 Nybegynder
26. november 2005 - 12:20 #10
Får denne fejl  unexpected '.' on line 17
som er denne linie:
$URI =. "?action=" . $action;

Ligegyldigt hvordan jeg prøver og vende det, så kan jeg ikke få den til at tage artikelid med - linket viser kun index.php?action=birthday

Men det er ret spændende :D Kan godt se ideen i det, men jeg kan ikke hitte ud af det.
Avatar billede nielle Nybegynder
26. november 2005 - 12:23 #11
My bad. Ret:

$URI =. "?action=" . $action;

- til:

$URI .= "?action=" . $action;
Avatar billede 17196 Nybegynder
26. november 2005 - 12:26 #12
Det tænkte jeg nok! Dog tager den stadig ikke artikelid med!
Avatar billede nielle Nybegynder
26. november 2005 - 12:38 #13
Jeg er ikke helt med. Kan du ikke lige give et eksempel på hvad du vil have, og hvad der sker i stedet?
Avatar billede 17196 Nybegynder
26. november 2005 - 12:46 #14
Når jeg er på index.php virker det fint! Ser sådan ud så = index.php?action=birthday
Men er jeg på index.php?artikelid=43 skulle det jo gerne vise det sådan:
index.php?artikelid=43&action=birthday
Altså så kommer artikelid=x ikke med i url

Tak so far, det er stort af dig
Avatar billede nielle Nybegynder
26. november 2005 - 12:51 #15
Sådan som koden er skruet sammen burde det faktisk blive til:

index.php?action=birthday&artikelid=43
Avatar billede 17196 Nybegynder
26. november 2005 - 13:05 #16
<?
//GET URL FUNKTION
session_start();

$url= $_SERVER['HTTP_HOST'];
$uri= $_SERVER['REQUEST_URI'];

function NewURL($action)
{
    $URL = $_SESSION["url"];
    $URI = $_SESSION["uri"];

    if (strpos($URI, "?") === false)
        return $URL . $URI . "?action=" . $action;

    $URIarr = explode("?", $URI);
    $URI = $URIarr(0);
    $URI .= "?action=" . $action;

    $URIarr = explode("&", $URIarr(1));
    for ($idx=0; $idx<count($URIarr); $idx++)
    {
        if (strpos($URIarr($idx), "action=") === false)
            $URI .= "&" . $URIarr($idx);
    }
    return $URL . $URI;

}
?>

Sådan set det ud!
Avatar billede nielle Nybegynder
26. november 2005 - 13:35 #17
Er der egentlig overhovedet noge grund til at blande sessions ind i det? Er det ikke bare sådan her:

<?
function NewURL($action)
{
    $URL = $_SERVER['HTTP_HOST'];
    $URI = $_SERVER['REQUEST_URI'];

    if (strpos($URI, "?") === false)
        return $URL . $URI . "?action=" . $action;

    $URIarr = explode("?", $URI);
    $URI = $URIarr(0);
    $URI .= "?action=" . $action;

    $URIarr = explode("&", $URIarr(1));
    for ($idx=0; $idx<count($URIarr); $idx++)
    {
        if (strpos($URIarr($idx), "action=") === false)
            $URI .= "&" . $URIarr($idx);
    }
    return $URL . $URI;
}
?>

<?=NewURL("birthday");?>
Avatar billede 17196 Nybegynder
26. november 2005 - 13:50 #18
Såadn:
<?   
$URL = $_SERVER['HTTP_HOST'];
$URI = $_SERVER['REQUEST_URI'];

function NewURL($action)
{
    if (strpos($URI, "?") === false)
        return $URL . $URI . "?action=" . $action;

    $URIarr = explode("?", $URI);
    $URI = $URIarr(0);
    $URI .= "?action=" . $action;

    $URIarr = explode("&", $URIarr(1));
    for ($idx=0; $idx<count($URIarr); $idx++)
    {
        if (strpos($URIarr($idx), "action=") === false)
            $URI .= "&" . $URIarr($idx);
    }
    return $URL . $URI;
}
?>
Ellers meldes der fejl:undefined function: array()

Men det ændrer intet - desværre :(
Avatar billede nielle Nybegynder
26. november 2005 - 14:04 #19
Hmmm... de skal nu være inden for i funktionen. Jeg gætter på at det så er et andet sted i din kode at det fejler?
Avatar billede 17196 Nybegynder
26. november 2005 - 14:14 #20
on line 10:
$URI = $URIarr(0);
Avatar billede nielle Nybegynder
26. november 2005 - 15:33 #21
Doh! []-parenteser i arrays, ikke ()-parenteser:

<?
function NewURL($action)
{
    $URL = $_SERVER['HTTP_HOST'];
    $URI = $_SERVER['REQUEST_URI'];

    if (strpos($URI, "?") === false)
        return $URL . $URI . "?action=" . $action;

    $URIarr = explode("?", $URI);
    $URI = $URIarr[0];
    $URI .= "?action=" . $action;

    $URIarr = explode("&", $URIarr[1]);
    for ($idx=0; $idx<count($URIarr); $idx++)
    {
        if (strpos($URIarr[$idx], "action=") === false)
        $URI .= "&" . $URIarr[$idx];
    }
    return $URL . $URI;
}
?>

<?=NewURL("birthday");?>
Avatar billede 17196 Nybegynder
26. november 2005 - 21:26 #22
Sådan! Mange tak, det var virkelig pænt af dig. God weekend - og smid lige svar.
Avatar billede nielle Nybegynder
26. november 2005 - 22:03 #23
Svar :^)
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