Avatar billede madszeneli Nybegynder
25. marts 2011 - 09:58 Der er 12 kommentarer

Overfør ID i window.location

Hej med jer,

Jeg har fulgt en guide til hvordan man koder en ajax-login formular. Men hvis koden er indtastet korrekt, så overfører den selvfølgelig kun til private.php - og ikke private.php?id=(mit id), som jeg gerne vil have.

Hvad kan man gøre for at få php og javascript til at snakke mere sammen?


Min henvisning ser således ud:

function go_to_private_page()
{
window.location = 'http://xxxxxxx.dk/private.php'; // Members Area
}
Avatar billede Slettet bruger
25. marts 2011 - 10:40 #1
Den bedste måde at gøre det på er, aldrig at vise ID'en ude i browseren.
- læg den i stedet for i en PHP $_SESSION["ID"] variabel på serveren.
Så er der ingen (OK, ringe) risiko for at uvedkommende får fingre i den : )

Alt om PHP sessions her: http://dk.php.net/manual/en/book.session.php
- det er overraskende let : )

men..

Hvis du absolut vil, KAN du godt overføre en variabel i selve URL'en:
...location.href="private.php?ID=4711

Og fiske den ud igen i private.php med:
$ID = $_GET["ID"];

MEN dér risikerer du at modtage noget snavs, så du skal "vaske" $ID inden du bruger den - f.eks. til opslag i en database - MEGET VIGTIGT!

Den absolut letteste måde at vaske et ID er hvis ID'en er et tal:
$ID = (int) $_GET["ID"];
Ovenstående "caster" inputtet til et tal ) dvs. dropper alt andet.
- sådan gør jeg - når det ikke kan undgås : )
Avatar billede madszeneli Nybegynder
25. marts 2011 - 13:15 #2
Så det du siger er, at jeg bare skal tilføje et tilfældigt ID i min javascript, som den så vil lave om når den kommer frem til private.php?

Jeg er ikke så skarp på det her område, jeg er mere grafisk anlagt :-)
Avatar billede Slettet bruger
25. marts 2011 - 13:54 #3
"tilfældigt" ?
"lave om" ?

- Men principielt ja : )
Avatar billede madszeneli Nybegynder
25. marts 2011 - 15:44 #4
Det er mig, som er for dårlig til at udtrykke mig. Du får lige et eksempel:



filnavn.js:

function go_to_private_page()
{
window.location = 'http://jobbo.dk/private.php?ID=4711'; // Members Area
}



filnavn.php:

$ID = (int) $_GET["ID"];



Nu ved jeg godt at det ikke er en funktionel kode, men kan du se hvad jeg mener?

For mit problem er som sagt, at en javascript-kode overføre brugeren til private.php, og det gør at jeg ikke kan få den enkelte bruger til at lande på private.php?id=(brugerens ID) - og det ville jeg jo kunne med ren php-kode.
Avatar billede Slettet bruger
25. marts 2011 - 16:11 #5
Du må nok fortælle lidt mere om dette "id"
- hvor kommer det fra ?
- er der en database bagved, som det giver adgang til ?
- gør det noget hvis en bruger går ind med en anden brugers id ?

Grundlæggende, hvad er det du vil lave ?
Avatar billede olebole Juniormester
25. marts 2011 - 16:13 #6
<ole>

Hvad angår DB-sikkerhed, så er der følgende muligheder:

1) Kassere alle forespørgsler, der indeholder ulovlige tegn
2) Rense forespøgslen for ulovlige tegn
3) Kassere alle forespørgsler, der indeholder andet end det forventede
4) Bruge parametriserede kald (i PHP f.eks. PDO eller mysqli)

I #1 skal du tænke 'foran' evt. hackere. Du skal kunne forudse, hvilke tegn han kan lave pjatrøv med. Glem det ... du har allerede tabt, inden du starter!

Det samme gælder for #2. Du skal kunne overskue alt, der kan skade din DB. Det er muligt, du tror, du kan ... men så tager du fejl!

Det eneste nogenlunde sikre er en kombination af #3 og #4. Altså at forkaste alt, der ikke lever op til et bestemt skema - samt bruge PDO eller mysqli:
    http://dk.php.net/manual/en/book.mysqli.php

PHP's gamle/almindelige mysql-API hører til i et andet århundrede og bør ikke bruges længere.

Læg mærke til, at der er en verden til forskel på #1 og #3, selvom de ved første øjekast kan synes at sige det samme. #3 er løsningen - #1 er ren russisk roulette (og den slags klæder sig ikke pænt, siger Paradise Amalie)

/mvh
</bole>
Avatar billede olebole Juniormester
25. marts 2011 - 16:16 #7
- og så kik på sessions, som T0M påpeger i sit første indlæg. Sessions er væsentligt sikrere end at sende følsomme data rundt mellem skyerne  *o)
Avatar billede madszeneli Nybegynder
26. marts 2011 - 12:47 #8
For mig er alt det her jo sort snak, det er lige nogle niveauer højere end der hvor jeg er.

Det jeg godt kunne tænke mig, var bare af den enkelte bruger lander på sin egen private.php - men det lyder til at være svære end jeg lige havde regnet med.

Ja, der er nogle brugeroplysninger som hentes fra en database. Så man skal kun kunne gå til private.php med ens eget ID.

Jeg har ikke rigtig nogen plan med det, jeg vil bare lære at forstå javascript og php lidt bedre, end jeg kan idag.

Jeg lavet en opret-funktion, nu er jeg igang med en ajax-login-formular, og den fungere også fint... Men der mangler så bare lige det, som sætter prikken over i'et. Ens egen profil :-)

Kan man læse mere om det, et sted? For det kan jo godt lade sig gøre at sende den enkelte bruger til hans egen profil, hvis det KUN var php.

Det har jeg prøvet før med:

header("location:http://www.xxxxx.dk/profil.php?id=".$hent_sql['ID']);

Men nu er det jo engang en javascript kode, som sender mig til private.php :-(
Avatar billede madszeneli Nybegynder
26. marts 2011 - 12:53 #9
Min process.js, som 'handler' det her login ser således ud:



// Preload Images
img1 = new Image(13, 13); 
img1.src="../grafik/ajax-loader.gif";

img2 = new Image(220, 19); 
img2.src="../grafik/loader-bar.gif";

    window.addEvent('domready', function() {

    $('login').addEvent('submit', function(e) {
        // Prevents the default submit event from loading a new page.
        e.stop();

        // Show the spinning indicator when pressing the submit button...
        $('ajax_loading').setStyle('display','inline');

        // Hide the submit button while processing...
        $('submit').setStyle('display','none');

        // Set the options of the form's Request handler.
        // ("this" refers to the $('login') element).
        this.set('send', { onComplete: function(response) {
            $('ajax_loading').setStyle('display','none');

    if(response == 'OK')
            {
              $('status').set('html', '<div id="logged_in">You are now logged it! <br />' +
              '<img align="absmiddle" src="images/loader-bar.gif">' +
              '<br /> Please wait while we redirect you to your private page...</div>');

            setTimeout('go_to_private_page()', 3000);
            }
            else
            {
              $('login_response').set('html', response);
              // Show the login button
              $('submit').setStyle('display','inline');
            }
        }});

        // Send the form.
        this.send();
    });
});

function go_to_private_page()
{
window.location = 'http://xxxxxx.dk/private.php'; // Members Area
}
Avatar billede Slettet bruger
26. marts 2011 - 15:53 #10
"sin egen private.php" - hvordan det ?
- filnavnet er jo det samme for alle..

Hvad gør siden privat/særlig for den enkelte bruger ?

Har du oprettet separate sider
- med id'et som en del af filnavnet f.eks. "private4711.php"

eller (mere normalt)

Én side for alle "private.php?id=4711"
- hvor et php-script henter private data fra databasen, baseret på id-parameteren
Avatar billede olebole Juniormester
26. marts 2011 - 15:57 #11
Jeg har fuld respekt for, at du gerne vil lære mere JavaScript og PHP, men det er dit projekt nok ikke særlig egnet til.

For det første skal man være seriøst god til JavaScript og DOM, før man kan forvente at lære at bruge Ajax. Ved at bruge færdigstrikkede libraries som Prototype og jQuery lærer du intet om JavaScript - og slet ikke om at skrive god JavaScript kode.

Den slags libs har hver for sig deres egen helt proprietære syntaks og virkemåde, som ikke giver spor bedre forståelse af JS. Du kan sammenligne dem med det faktum, at rigtig mange danskere ikke kan finde ud af at lave en god pizza af gode råvarer. I stedet kan de vælge at købe en frysepizza i Fakta og kyle den i microovnen. Det lærer de ikke en dyt om pizzabagning af - og resultatet er en klam oplevelse, der ikke har meget med pizza at gøre.

Lær i stedet, hvad Ajax i virkeligheden er ved at lave dine egne XMLHttpRequest kald, og lær, hvordan du behandler responsen med DOM og får sat data ind i HTML siden.

Det er en rigtig god fremgangsmåde, hvis det at lære noget er din motivation. Det vil nemlig lære dig en masse om JavaScript, DOM og PHP  *o)
Avatar billede madszeneli Nybegynder
28. marts 2011 - 10:23 #12
#10 - Det handler om den samme side, som henter private data fra databasen, baseret på id-parameteren.

#11 - Som du dog kan forklare det, haha. Men ja, okay, det er måske også lige et vildt nok projekt at begive sig ud i. Jeg skal måske bare holde mig til html, css og php. Så må javascript/ajax/jquery være noget, som jeg leger lidt med ved siden af.

Min idé var egentlig bare at se om jeg kunne lave noget funktionelt, som rent designmæssigt var i top. Men jeg ville jo på ingen måde kunne klare det, hvis Eksperten ikke eksisterede.
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