Avatar billede Slettet bruger
07. juli 2007 - 23:23 Der er 9 kommentarer og
1 løsning

Find fejlen

Hej jeg har det her stykke kode det er et script til at oprette en bruger til min mysql database den kommer med den her fejl:

Parse error: parse error, unexpected $ in /usr/home/web/web52230/opretbruger.php on line 37

har kigget i jeg ved ikke hvorlang tid nu og kan bare ikke finde fejlen :)


<?php
include('mysql.php');

$user = $_POST['bruger'];
$mail = $_POST['mail'];
$password = md5($_POST['kode']);
// Tjekker om felterne er udfyldt
if ($_POST['bruger'] == "" OR $_POST['kode'] == "" OR $_POST['mail'] == "" OR $_POST['kode2'] == ""){
header('location: opret.php?msg=1&user='.$user.'&mail='.$mail);
}
else {
    //tjekker om de to koderne passer sammen
    if($_POST['kode'] == $_POST['kode2']){
        //tjekker om der findes en bruger med det navn i forvejen
        $forespørgsel = "SELECT * FROM arto_users WHERE user = '$user'";
        $result = mysql_query($forespørgsel) or die("Forespørgslen lykkedes ikke kontakt ringler@ringler.dk : " . mysql_error());
            if (mysql_num_rows ($result) > 0) {
                header('location: opret.php?msg=7&mail='.$mail);
                }
            else {
                //tjekker om mailen er gyldig
                if(ereg("^.+@.+\..+$", $mail)) {
                    $forespørgsel = "INSERT INTO arto_users (user, password, mail) VALUES ('".$user."', '".$password."', '".$mail."')";
                    $result = mysql_query($forespørgsel) or die("Forespørgslen lykkedes ikke kontakt ringler@ringler.dk : " . mysql_error());
                    header('location: index.php?msg=5');
                    }
                //hvis mailen ikk er gyldig
                else {
                    header('location: opret.php?msg=6');
                    }
                }
            }
        //koderne passer ikke sammen
        else {
        header('location: opret.php?msg=8');
        }
?>
Avatar billede gider_ikke_mere Nybegynder
07. juli 2007 - 23:32 #1
Ved en hurtig gennemgang:

else {
    //tjekker om de to koderne passer sammen
    if($_POST['kode'] == $_POST['kode2']){

skal være
else //{
    //tjekker om de to koderne passer sammen
    if($_POST['kode'] == $_POST['kode2']){
Avatar billede tiller3 Nybegynder
07. juli 2007 - 23:32 #2
Bare et gaet:
Proev at lave
if(ereg("^.+@.+\..+$", $mail)
til if(ereg('^.+@.+\..+$', $mail)

(Og saa er du vel opmaerksom paa at du har et enormt sikkerhedshul i denne kode ikke?)
Avatar billede Slettet bruger
07. juli 2007 - 23:34 #3
tiller3 hvad dog?

2 sec prøver lige
Avatar billede gider_ikke_mere Nybegynder
07. juli 2007 - 23:46 #4
8 stk. { og 7 stk. } går i hvertfald ikke! Om der så er fejl i ereg, skal jeg ikke kunne sige.
Avatar billede Slettet bruger
07. juli 2007 - 23:47 #5
Nice akyhne det virker ;) takker ligger du et svar
Avatar billede Slettet bruger
07. juli 2007 - 23:49 #6
den eneste måde jeg kan se der skulle være et hul på er ved en mysql injection men ved ikke helt hvordan jeg kan lukke det hul
Avatar billede gider_ikke_mere Nybegynder
07. juli 2007 - 23:51 #7
Svar. Og velbekomme.
Avatar billede tiller3 Nybegynder
09. juli 2007 - 20:25 #8
Du har at
$user=$_POST['bruger'];
$forespørgsel = "SELECT * FROM arto_users WHERE user = '$user'";

Overvej lige hvad der sker hvis $_POST['bruger'] er  (Ikke testet, men du kan se problmet).
'; drop table arto_users;'

Saa ryger arto_users tabel.

Eller hvis $user er
'; update arto_users set password='AllYourBasesAreBelongToUs';'
Saa har alle brugere faaet nyt password.
----
Den nemme(Men ikke saerligt gode loesning) er at saette
$user=mysql_real_escape_string($_POST['bruger')); // Ikke at forveksle med mysql_escape_string
Problemet med den loesning er at det skal goeres med alt input fra browseren, og glemmer man det bare en gang er der hul.

Den gode loesning er at bruge
MySQL Improved(mysqli) som har prepared statements som goer at man helt slipper for disse problemer.
Avatar billede Slettet bruger
10. juli 2007 - 10:27 #9
hvordan virker mysql improved?

og hvordan bruger jeg det?
Avatar billede tiller3 Nybegynder
11. juli 2007 - 12:11 #10
mysql improved(Ogsaa kendt som mysqli) er en standard php udvidelse. Den er dokumenteret paa
http://www.php.net/manual/en/ref.mysqli.php og de har nogle eksempler.

Bemaerk dog, at mysql improved ikke altid er enabled hos de forskellige webhosts.
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