MySQL update hjælp

Tags:    php

Hej,

Jeg arbejder på min første website, hvor brugerne har mulighed for at oprette sig, se deres profil og ændre deres profil.

Jeg kan ikke få databasen til at updatere med de rigtige oplysninger, når de har udfyldt formularen.

Det som sker da jeg trykker på gem profil, er at feltet i databasen står blankt..

edit_profil.php

Fold kodeboks ind/udKode 


edit_profile_succes.php

Fold kodeboks ind/udKode 






8 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Ja det er præcist noget med sikkerhed at gøre og det er den rigtige måde du gør det på.

Et eksempel på hvad den sikre ville være, dit eksempel hvor en bruger skal indsætte noget data.

hvor brugeren så vidt jeg husker ville kunne skrive
i feltetusername ', first_name = (DELETE FROM users WHERE 1) på den måde kan han slette alle rækker i din tabel.

Et andet eksempel kunne være ved login hvor du har noget alla.
SELECT * FROM users WHERE username = '$username' AND password = '$password';

her ville brugeren så bare kunne skrive i $password feltet:
' OR 1=1
så ville han plusligt have adgang med alle brugere.
Det mysql_real_escape_string gør er at parse ulovlige tegn så ' bliver til \' osv. og så forsvinder det sikkerhedshul.

(har ikke testet de skrevne sql's, men håber du kan se ideen!)



Hmm, jeg er ikke en stor ørn til PHP, selvom jeg har brugt den her slags form for update, men hvis det kun er username der ikke bliver opdateret, så er jeg lidt på herrens mark, for umiddelbart så kunne man tro at det er fordi i din form står der change_username osv.

Men prøv evt. at slette det, eller skriv det ind i
$username = $_POST['username'];

Selvom jeg ikke tror det er det, men det er da forsøget værd.



Du skal have sat lidt kode ind i din edit_profile*_succes.php, for den indtastede data kommer ikke med over på nævnte side
Det skal være
$username=$_POST['username'];
en linie for hvert af felterne, og det skal stå lige over: $update_profile



Hej Per,

Tak for dit svar.

Jeg har ændret min edit_profil_succes.php fil nu, men mit brugernavn i databasen ændrer sig stadigvæk bare til blank.

edit_profil_succes.php nu

Fold kodeboks ind/udKode 





Indlæg senest redigeret d. 17.09.2010 22:48 af Bruger #15688
Hvis jeg skriver SET username='jan', så ændrer brugernavnet sig til jan i databasen.

Altså:
Fold kodeboks ind/udKode 



Bare mærkeligt hvis jeg skriver $username, så bliver den blank.



Nu skal du lige huske hvad du har kaldt dine input felter i html (name-attributten) den skal passe med den du kalder i php i $_POST['<her!>'].

kan se i dit tilfælde har du: change_username, change_first_name osv.

så for at hente dem i php skal du have $_POST['change_username'], $_POST['change_first_name'] osv.
istedet for blot $_POST['username'].
Derudover vil jeg foreslå dig at køre dine resultater gennem mysql_real_escape_string så du slipper for det væreste SQL-injektion!



Hej Jesper,

Tak for dit svar. Jeg fik det til at virke nu. :P

Angående mysql_real_escape_string, så har jeg læst mig frem til at det har noget med sikkerheden at gøre?

Er dette rette fremgangsmåden at lave det om til mysql_real_escape_string?

Fold kodeboks ind/udKode 





Mange tak for dit svar jesper



t