Oprettet tir. d. 18. september 2012 kl. 14:04:22

starf
starf (11.676 point. Point ude: 430)

php - problemer med id over 1 char

Jeg forsøger at lave et opslag i en db, ud fra

$id = ($_GET['id']);

det virker fint så længe mit id er på et tal, lige så snart jeg bruger 2 eller mere, så siger den, den ikke kan finde noget magen til id. Parser jeg id ind via et input felt, så virker det dog fint. Nogle der har en ide til hvad der kan være galt?

http://pastebin.com/ (...)

Skrevet tir. d. 18. september 2012 kl. 14:31:37| #1

Din kode er åben for sql-injection. Du skal bruge mysqli rigtigt.

Men ellers er det da et mærkeligt problem. Hvad type er feltet id? Og hvad står der fx i feltet?

Skrevet tir. d. 18. september 2012 kl. 14:46:28| #2

starf
starf (11.676 point)
selve feltet er bare en varchar 255 det er bare 12 random tal, kan self ændre det til en int, men tror ikke det er der problemet ligger?

Skrevet tir. d. 18. september 2012 kl. 14:53:50| #3

Og tallene er forskellige? Hvad kan der fx stå i feltet?

Ja, hvis der er tal bør det være et int-felt. En strengværdi i SQL skal som udgangspunkt have være som '....'. Mysql er af og til lidt (for) flink. Så du bør: 

    WHERE `id` = '{$id}'";

(men igen: det er håbløst usikekrt ikke at bruge parametes i mysqli)

Hvad er det egentlig du siger her: "Parser jeg id ind via et input felt, så virker det dog fint."

Skrevet tir. d. 18. september 2012 kl. 14:56:04| #4

Er du frisk lige at køre en
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME =  'file'


og smide informationen her eller i pastebin ?

Skrevet tir. d. 18. september 2012 kl. 15:06:16| #5

starf
starf (11.676 point)
erikjacobsen >

det er et fil download system, hvor man skriver en række numreog får den fil ud fra det nummer. hvis man bruger mit input felt til at skrive numret, og sende et vidre i systemet, via id=nummer så virker det fint. skriver jeg samme adresse direkte i browseren virker det kun hvis tallet er på max 1 tal.. giver det bedre mening?

et eksempel på et id er "651479531456"

magic mouse>

SELECT *
FROM file
WHERE token =  '212736970552k'

det giver mig bare den row hvor den fremgår, som det skal? (kørt i mysql workbench)

Skrevet tir. d. 18. september 2012 kl. 15:10:38| #6

Prøv at læse hvad vi skriver og spørger om. Det gør det nemmere for dig og os.

Når du siger eet tal, mener du så eet ciffer? Altså et 1-cifret tal?

Har du testet på tal med 2 cifre? Eller kun med noget, der ligner 651479531456?

Det sidste giver dig problem som tal, altså som int, da det er lidt større end 2 milliarder.

Hvad med:

    WHERE `id` = '{$_GET['id']}'";

(Selv om det stadig er håbløst usikkert)

Skrevet tir. d. 18. september 2012 kl. 15:27:09| #7

starf
starf (11.676 point)
når jeg skriver et tal, mener jeg 1 ciffer, alt over 1 ciffer giver det resultat, at den ikke kan finde det.

At ændre det til WHERE `id` = '{$_GET['id']}'";

giver samme fejl. (den kan ikke finde det) bruger jeg input feltet, som sender idét sådan her:

header("location:file_download.php?id=$filid");

så virker det fint.

Skrevet tir. d. 18. september 2012 kl. 15:35:47| #8

Vil du udskrive $query i et af de tilfælde, der ikke virker.

Der skal '...' om. Og det bør være fint med '{$id}' - så længe du bare tester på din egen maskine, og ikke lægger det på nettet. Vi skal lige finde ud af hvad der er galt.

Og så blev der stillet et spørgsmål til dig i #4. Vil du også kigge på det?

Skrevet tir. d. 18. september 2012 kl. 15:41:33| #9

starf
starf (11.676 point)
her er et print af min query.

SELECT `mime`, `name`, `size`, `data` FROM `file` WHERE `id` = 12

angående nummer 4 så har jeg svaret, som jeg fostod spøgsmålet, er ikke lige her jeg har mest erfaring endnu, så er det kan godt være jeg har gjort det forkert?

SELECT *
FROM file
WHERE token =  '212736970552k'

det giver mig bare den row hvor den fremgår, som det skal? (kørt i mysql workbench)

Skrevet tir. d. 18. september 2012 kl. 15:45:53| #10

Hej igen

Den SQL jeg skrev giver os et billede af din database som den ser ud. Årsagen til at jeg spørg om det er for at se om din opsætning af databasen kan have noget med det at gøre. Det er lige til at kopiere ind i Workbench og komme med resultatet her. (Du skal ikke ændre på den)

Skrevet tir. d. 18. september 2012 kl. 15:50:05| #11


Skrevet tir. d. 18. september 2012 kl. 15:58:37| #12

id ser ud til at være en int. Er det et af de andre felter du tænker på?

Skrevet tir. d. 18. september 2012 kl. 16:00:48| #13

Fra #5 kunne det tyde på du skulle bruge

  WHERE token = '[$id}'

(bortset fra det er usikkert)

Skrevet tir. d. 18. september 2012 kl. 16:08:52| #14


Skrevet tir. d. 18. september 2012 kl. 19:08:53| #15

starf
starf (11.676 point)
beklager jeg ikke lige gjort det klart, ja den slår op i det felt der hedder token, med id :)

Skrevet tir. d. 18. september 2012 kl. 19:18:09| #16


Skrevet tor. d. 20. september 2012 kl. 11:40:49| #17

starf
starf (11.676 point)
hov, jeg har vist gjort det hele mere kompliceret end det måske var nødvendigt.

Først har jeg en login, der er lavet som så username faktisk er min token. Med dette slår jeg op i systemet, og ser om den token findes, og sender idét vidre, over til den første kode i paste bin.

http://pastebin.com/ (...)

når det er gjort, bliver man sendte vidre, med det rigtige id, som så bliver brugt til at hente filen ud af databasen med:

http://pastebin.com/ (...)

Skrevet tor. d. 20. september 2012 kl. 12:38:35| #18

Jah, måske.

Konklusionen er altså at `id` er et almindeligt tal felt, autoincrement, med små værdier.

Men så er det forkert skrevet tidligere at 'et eksempel på et id er "651479531456" ' - det forvirrede vist lidt.

(Og hvis det er noget, der skal holdes lidt hemmeligt, er det ikke så godt, for hvis man får id=12, så kan man udskifte det med id=7, og se en anden fil - altså hvis det er et problem)

Men du siger så at hvis du skriver

    ....file_download.php?id=12

så virker det ikke. Men

    ....file_download.php?id=7

virker.

1) Hvordan virker det ikke? Hvad sker der?
2) Er der rækker med id både 7 og 12, og er de andre felter ok?

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

.htacces redirect

Oprettet den 15. maj 2013 kl. 19.57
casper- giver 200 point for svar | Giv et svar »

form-insert med dropdown php

Oprettet den 14. maj 2013 kl. 08.57
agent_qa giver 45 point for svar | Giv et svar »

PHP form

Oprettet den 13. maj 2013 kl. 13.46
liseA giver 30 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Her er seks Google Labs-funktioner, som du skal slå til med det samme

Gmail Labs giver dig adgang til en masse smarte funktioner, som Googles ingeniører leger med i øjeblikket.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Tre smarte trick som gør Windows 8 bedre

Boot direkte til skrivebordet, få en strategisk godt placeret luk-knap og slip for at logge ind. Her er tre tips til Windows 8, som gør det nemmere at blive venner med styresystemet.


Nyheder fra Computerworld

Teaser billede

Galleri: Her er Googles nyeste værktøj og legetøj

Google har i denne uge afholdt udviklerkonferencen I/O i San Francisco. Se her hvad søgegiganten kunne præsentere af nyskabelser.


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger