Avatar billede starf Nybegynder
18. september 2012 - 14:04 Der er 20 kommentarer

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/R2BkJSiE
Avatar billede erikjacobsen Ekspert
18. september 2012 - 14:31 #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?
Avatar billede starf Nybegynder
18. september 2012 - 14:46 #2
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?
Avatar billede erikjacobsen Ekspert
18. september 2012 - 14:53 #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."
Avatar billede magic-mouse Novice
18. september 2012 - 14:56 #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 ?
Avatar billede starf Nybegynder
18. september 2012 - 15:06 #5
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)
Avatar billede erikjacobsen Ekspert
18. september 2012 - 15:10 #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)
Avatar billede starf Nybegynder
18. september 2012 - 15:27 #7
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.
Avatar billede erikjacobsen Ekspert
18. september 2012 - 15:35 #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?
Avatar billede starf Nybegynder
18. september 2012 - 15:41 #9
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)
Avatar billede magic-mouse Novice
18. september 2012 - 15:45 #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)
Avatar billede starf Nybegynder
18. september 2012 - 15:50 #11
ah :)

her er output fra den
http://pastebin.com/W6XuH3eJ
Avatar billede erikjacobsen Ekspert
18. september 2012 - 15:58 #12
id ser ud til at være en int. Er det et af de andre felter du tænker på?
Avatar billede erikjacobsen Ekspert
18. september 2012 - 16:00 #13
Fra #5 kunne det tyde på du skulle bruge

  WHERE token = '[$id}'

(bortset fra det er usikkert)
Avatar billede erikjacobsen Ekspert
18. september 2012 - 16:08 #14
Ups:  WHERE token = '{$id}'
Avatar billede starf Nybegynder
18. september 2012 - 19:08 #15
beklager jeg ikke lige gjort det klart, ja den slår op i det felt der hedder token, med id :)
Avatar billede erikjacobsen Ekspert
18. september 2012 - 19:18 #16
Nej, det gør den ikke.
Avatar billede starf Nybegynder
20. september 2012 - 11:40 #17
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/XTMx0zMW

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/R2BkJSiE
Avatar billede erikjacobsen Ekspert
20. september 2012 - 12:38 #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?
Avatar billede starf Nybegynder
03. oktober 2013 - 14:00 #19
afventer svar fra erikjacobesen
Avatar billede erikjacobsen Ekspert
03. oktober 2013 - 16:28 #20
Jeg samler slet ikke på point, tak. Accepter blot dit eget 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
Kurser inden for grundlæggende programmering

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