mboost-dp1

PHP: Sende variabler med GET


Gå til bund
Gravatar #1 - Jace
5. aug. 2008 22:10
Heay... Jeg skal have sendt en variabel med GET til en anden side hvor variablen skal indsættes i MySQL, men når den kommer frem mangler alt efter første mellemrum.

// Henter den ud af mysql
$comment = $row['comment'];

// Denne returnerer "En lang kommentar om alt muligt"
echo $comment;

// Denne returnerer kun "test.php?category=En"
<a href=test.php?comment=<?=$comment?>>Link</a>

Hvordan skal man sende den der variabel med for at den kan sende det hele med?
Gravatar #2 - fidomuh
5. aug. 2008 22:28
#1

Du kan poste den med en form.
Alternativt kan du bruge javascript, eller sessions i PHP.

Sessions er nemmest, men maa ikke bruges til sensitiv data.
Gravatar #3 - Jace
5. aug. 2008 22:32
Kan man slet ikke sende variabler som indeholder mellemrum med i URL'en?
Gravatar #4 - zacho
5. aug. 2008 22:38
jow, efter hvad jeg kan se, så er dit problem at du har 2 =. prøv med denne kode i stedet når du sender

<a href=test.php?comment=<?PHP $comment ?>>Link</a>


derudover kan det være du skal bruge REQUEST i stedet for get, på den måde er du sikker på at du får fat i indholdet.

Fx:

$getcomment = $_REQUEST["comment"];
Gravatar #5 - Simm
5. aug. 2008 22:40
#3Jo, de skal bare urlencode's
http://dk.php.net/manual/en/function.urlencode.php

så bliver mellemrum lavet til et %20-tegn, som browserne fatter, efterfølgende skal du urldecode

Husk i øvrigt at lave validering af data i dine GET/POST-variabler, ellers kan man lave noget nasty SQL-injection
Gravatar #6 - arne_v
5. aug. 2008 22:51
#5

For at beskytte sig mod XSS.

Han bruger naturligvis mysqli og prepared statement.

:-)
Gravatar #7 - Jace
5. aug. 2008 23:27
#5 - Super, det virker perfekt. Mellemrum bliver dog lavet om til et +... Og efter hvad jeg kan se kan man ikke styre det med en parameter hvad mellemrummet skal erstattes af. Men + er jo også fint nok :)

#6 - Nej, det gør jeg desværre ikke. Jeg har ledt efter en god begynder artikel om hvordan man forebygger SQL injections og XSS, men jeg har ikke rigtig haft held med at finde en god artikel om det. Har du en?
Gravatar #8 - arne_v
5. aug. 2008 23:57
#7

Du validerer data - helst med en postiv liste - som forbyder HTML, JavaScript, SQL etc..

Og du bruger mysqli prepared statement til database.

http://www.php.net/manual/en/book.mysqli.php har udmærket doumentation af det sidste.
Gravatar #9 - Saxov
6. aug. 2008 09:37
#1, brug dog post istedet for get - med mindre man skal kunne linke til den specifikke side.

En af de store ulemper ved get (ud over det du har opdaget med mellemrum) er at der er en max længde på urls.
denne maxlængde er teoretisk set uendelig, men afhænger af server og klienten. faktisk anbefaler RFC 2616 at man ikke forventer at en URL på over 255 tegn vil virke.
Gravatar #10 - Jace
6. aug. 2008 11:59
8 skrev:
#7

Du validerer data - helst med en postiv liste - som forbyder HTML, JavaScript, SQL etc..


skal det gøres med regulære udtryk eller findes der php funktioner som kan tjekke det?

jeg kan nemlig ikke finde ud af regulære udtryk, så det dur ikke hvis man kun kan gøre det med dem :D
Gravatar #11 - myplacedk
6. aug. 2008 13:15
7 skrev:
Mellemrum bliver dog lavet om til et +... Og efter hvad jeg kan se kan man ikke styre det med en parameter hvad mellemrummet skal erstattes af. Men + er jo også fint nok :)

Der er ikke meget logik i det, men "rawurlencode" bruger "%20" i stedet for "+", så vidt jeg husker.

Det er fint nok med "+" efter spørgsmålstegnet i urlen, det er mere læsevenligt og fylder lidt færre bytes. Men foran spørgsmålstegnet skal du ikke forvente at det vil virke. Dvs. hvis det fx. er et filnavn skal du nok bruge rawurlencode.

7 skrev:
Jeg har ledt efter en god begynder artikel om hvordan man forebygger SQL injections og XSS, men jeg har ikke rigtig haft held med at finde en god artikel om det.

Det korte af det lange er:

1) Når du indsætter tekst i SQL, så husk at escape. Brug meget gerne prepared statements.

2) Når du indsætter plaintext i HTML, så husk at konvertere tilsvarende:
> => &gt;
< => &lt;
& => &amp;

Tag også ' og eller ", hvis det er relevant.

Dette kan "htmlentities" i PHP klare.

For at gøre det pænt, indsæt "<br />" foran linjeskift.
Gravatar #12 - arne_v
6. aug. 2008 17:57
#10

Regex kan læres !

Eller må der også findes frameworks til PHP som inkluderer validation.
Gravatar #13 - Niklas H
6. aug. 2008 18:37
#12 - Regex SKAL læres ! :D
Gravatar #14 - Jace
6. aug. 2008 21:16
9 skrev:
#1, brug dog post istedet for get - med mindre man skal kunne linke til den specifikke side.

Det er lavet som et link på en admin side hvor man skal kunne oprette en kategori med det navn som ligger i variablen. Og så skal det vel laves med GET?

Eller kan man lave POST uden at bruge en form?
Gravatar #15 - Saxov
6. aug. 2008 21:28
#14, så du har på din admin-side et hardcodet link der hedder www.example.org/?create=Jeg+er+en+ny+kategori+som+er+meget+specifik og www.example.org/?create=Jeg+er+en+anden+ny+kategori+som+er+meget+specifik??

Hvorfor ikke lave det som en input box, hvor du kan skrive hvad der skal stå, og så en submit knap, der sender det, så kan knappen også bruges til at oprette mange forskellige kategorier.
Gravatar #16 - Jace
6. aug. 2008 21:31
Linket er ikke så hardcoded. Variablen bliver hentet fra en SQL som bliver fyldt af brugere med forslag til kategorier.

Linket bliver så brugt til at godkende den nye kategori.
Gravatar #17 - Saxov
6. aug. 2008 21:35
Personligt ville jeg så nok bare fylde forslagene ind i en dropdown liste, da det, i tilfældet af mange pluslige forslag, ikke vil ødelægge dit design af din admin side.

Prøv at forstille dig hvordan din admin side vil se ud, efter en spam bot havde været igang med at "brute-force" din forslagsbox..
Gravatar #18 - Jace
6. aug. 2008 22:08
17 skrev:
Personligt ville jeg så nok bare fylde forslagene ind i en dropdown liste, da det, i tilfældet af mange pluslige forslag, ikke vil ødelægge dit design af din admin side.

Prøv at forstille dig hvordan din admin side vil se ud, efter en spam bot havde været igang med at "brute-force" din forslagsbox..

Så vildt bliver det slet ikke...

Forslagene kommer som en del af denne tilmelding:
http://index.wep.dk/submit.php

Indtil videre virker min CAPTCHA glimrende, så der kommer ikke nogen bots igennem :)
Gravatar #19 - Jace
6. aug. 2008 22:41
Men man skal lave en form for at kunne sende variablen med POST ikke?

Eller findes der en anden måde hvorpå man kan sende det som POST?
Gravatar #20 - arne_v
6. aug. 2008 22:57
#19

POST kræver enten form eller client side code f.eks. JavaScript.
Gravatar #21 - Jace
7. aug. 2008 11:36
Okay, så fortsætter jeg vist bare med GET :)

Tak for hjælpen alle...
Gravatar #22 - fidomuh
7. aug. 2008 16:22
#21

Jeez, brug nu bare POST.
Det tager faa sekunder at klampe sammen, er meget mere sikkert og vil vaere langt mere brugbart i fremtiden.

Do it right, not fast.
Gravatar #23 - Jace
7. aug. 2008 17:05
Jamen, det kan jeg vel ikke hvis jeg bare skal have et link?
Gravatar #24 - fidomuh
7. aug. 2008 17:09
#23

Men er det ikke et link *paa* en admin side?

Saa kan du jo bare lave linket til en submit knap.

Skal du bruge linket eksternt? :)
Gravatar #25 - Anders
7. aug. 2008 17:28
#23
Du kan vel lave noget i den her retning:

<form action="dinside.php" method="post">
<input type="hidden" name="link" value="den værdi du vil sende">
<input type="submit" value="Dit Link">
</form>

så kan du på dinside.php hente det med $_POST['link']
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login