Avatar billede woogoo Nybegynder
03. februar 2004 - 16:33 Der er 22 kommentarer og
1 løsning

Har et upload scrip! Kan man sætte max. størrelse på billede?

Hej.

Jeg har et upload script:

<?php
if ( $_FILES["file"] )
{
    // Mappen
    $mappe = "./userpic/";
   
    print "Temp filnavn: ".$_FILES["file"]["tmp_name"]."<br>\n";
    print "Original filnavn: ".$_FILES["file"]["name"]."<br>\n";
    print "Filstørrelse: ".$_FILES["file"]["size"]."<br>\n";
    print "Filtype: ".$_FILES["file"]["type"]."<br>\n";
   
    // Checker om filen blev sendt.
    if ( !copy($_FILES["file"]["tmp_name"], $mappe . $_FILES["file"]["name"]) )
    {
        print "Filen blev ikke sendt!";
    } else {
        print "Fil sendt!";
    }
}
?>

<form action="<?=$_SERVER["PHP_SELF"];?>" enctype="multipart/form-data" method="POST">
<input name="file" type="file">
<input type="submit" value="Send Fil">
</form>


ER det muligt at sætte en begrænser på så man højst kan uploade 5 billeder om dagen.. og så de max er 128x128px?

Hilsen WooGoo
Avatar billede woogoo Nybegynder
03. februar 2004 - 16:33 #1
altså.. 5 billeder pr. IP adresse!
Avatar billede woogoo Nybegynder
03. februar 2004 - 16:47 #2
der må også gerne indgå mySQL
Avatar billede tefcke Nybegynder
03. februar 2004 - 18:18 #3
Du kan bruge funktionen: http://php.net/getimagesize
til at finde størrelsen og filtype af det uploadede billed.
På index 0 i arrayt som getimagesize returnerer finder du billedts bredde.
På index 1 i arrayt som getimagesize returnerer finder du billedts højde.

Du kan efterfølgende lade være med at gemme billedet hvis dimensionerne ikke er tilfredsstillende.

Ang. det andet spg., er det vil ikke så svært at registrere i en database hvor mange billeder der er blevet uploadet fra en given IP adresse!
Avatar billede woogoo Nybegynder
03. februar 2004 - 18:35 #4
kan du ikke indsætte koden i mit script så det ikke er muligt at uploade hvis billedet er for stort?
Avatar billede tefcke Nybegynder
03. februar 2004 - 18:58 #5
<?php
if ( isset($_FILES["file"]) ) {
    // Upload mappen
    $mappe = "./userpic/";
    $max_dimensions = array('height' => 128
                            'width'  => 128);

    // Array med filen dimensioner
    $file_properties = getimagesize($_FILES["file"]["tmp_name"]);

    // Tjekker filens dimensioner
    if ( $file_properties[0] < $max_dimensions['width'] && file_properties[1] < $max_dimensions['height'] ) {
        print "Temp filnavn: {$_FILES["file"]["tmp_name"]}<br>\n";
        print "Original filnavn: {$_FILES["file"]["name"]}<br>\n";
        print "Filstørrelse: {$_FILES["file"]["size"]}<br>\n";
        print "Filtype: {$_FILES["file"]["type"]}<br>\n";

        // Checker om filen blev sendt.
        if ( !copy($_FILES["file"]["tmp_name"], $mappe . $_FILES["file"]["name"]) ) {
            print "Filen blev ikke sendt!";
        } else { // Upload lykkedes
            print "Fil sendt!";
        }
    } else { // Filens højde eller bredde er større end 128
        print "Filens dimensiner er for store (Max. 128x128)";
    }
}
?>

<form action="<?php print($_SERVER['PHP_SELF']);?>" enctype="multipart/form-data" method="POST">
<input name="file" type="file">
<input type="submit" value="Send Fil">
</form>

Du burde måske lige lave noget test på om der virkelig er blevet sendt en valid fil!
Avatar billede woogoo Nybegynder
03. februar 2004 - 20:44 #6
den kommer med denne fejl:

Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /STORE/woogoo_dk/public_html/ms/mms/upload.php on line 5
Avatar billede woogoo Nybegynder
03. februar 2004 - 20:45 #7
how..

Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /STORE/woogoo_dk/public_html/ms/mms/upload.php on line 6

Line 6.. ikke 5..
Avatar billede tefcke Nybegynder
03. februar 2004 - 20:52 #8
Hehe, det er fordi der mangler et komma i det array der laves!
Avatar billede tefcke Nybegynder
03. februar 2004 - 21:02 #9
<?php
if ( isset($_FILES["file"]) ) {
    // Upload mappen
    $mappe = "./userpic/";
    // Max diminsioner
    $max_dimensions = array('height' => 128,
                            'width'  => 128);
    // Forbind til database
    mysql_connect('localhost', 'USERNAME', 'PASSWORD') or die( mysql_error() );
    mysql_select_db('DATABASE_NAME') or die( mysql_error() );
    $tabel = 'NAVNET_PÅ_TABLLEN_I_DATABASEN';

    $result = mysql_query("SELECT antal_billed_uploads
                          FROM $tabel
                          WHERE ip = '{$_SERVER['REMOTE_ADDR']}'");

    // Var der em bruger med den IP?
    if ( mysql_num_rows($result) > 0 ) {
        $row = mysql_fetch_assoc($result);
    } else { // IP&nbsp; fandtes ikke i databasen, så der oprettes en record
        mysql_query("INSERT INTO $tabel (ip)
                    VALUES ('{$_SERVER['REMOTE_ADDR']}')") or die( mysql_error() );
        $row['antal_billed_uploads'] = 0;
    }

    // Har brugeren uploadet mere end 5 billeder
    if ( $row['antal_billed_uploads'] < 5 ) {
        // Array med filen dimensioner
        $file_properties = getimagesize($_FILES["file"]["tmp_name"]);

        // Tjekker filens dimensioner
        if ( $file_properties[0] < $max_dimensions['width'] && file_properties[1] < $max_dimensions['height'] ) {
            print "Temp filnavn: {$_FILES["file"]["tmp_name"]}<br>\n";
            print "Original filnavn: {$_FILES["file"]["name"]}<br>\n";
            print "Filstørrelse: {$_FILES["file"]["size"]}<br>\n";
            print "Filtype: {$_FILES["file"]["type"]}<br>\n";

            // Checker om filen blev sendt.
            if ( !copy($_FILES["file"]["tmp_name"], $mappe . $_FILES["file"]["name"]) ) {
                print "Filen blev ikke sendt!";
            } else { // Upload lykkedes
                mysql_query("UPDATE $tabel
                            SET antal_billed_uploads = antal_billed_uploads + 1
                            WHERE ip = '{$_SERVER['REMOTE_ADDR']}'") or die( mysql_error() );
                print "Fil sendt!";
            }
        } else { // Filens højde eller bredde er større end 128
            print "Filens dimensioner er for store (Max. 128x128)";
        }
    } else {
          print "Der kan max. uploades 5 billeder per. bruger";
    }
}
?>

Her er koden som sikrer at der kun kan uploades 5 billeder per. IP adresse ligeledes.

Du skal dog selv lige sætte databasens navn i scriptet, samt dit database username og password.
Dessuden skal du sætte navnet på den tabel du har i databasen.

Tabellen i databasen skal som minimum have følgende 2 kolonner:
antal_billed_uploads (INTEGER, unsigned, default 0, NOT NULL)
ip (CHAR(15), NOT NULL)

Det i parenteserne er de egenskaber som kolonnen skal have!
Avatar billede woogoo Nybegynder
03. februar 2004 - 21:34 #10
nu kommer denne fejl:

Parse error: parse error, unexpected '[' in /STORE/woogoo_dk/public_html/ms/mms/upload.php on line 32
Avatar billede tefcke Nybegynder
03. februar 2004 - 22:15 #11
<?php
if ( isset($_FILES['file']) ) {
    // Upload mappen
    $mappe = './userpic/';
    // Max diminsioner
    $max_dimensions = array('height' => 128,
                            'width'  => 128);
    // Forbind til database
    mysql_connect('localhost', 'USERNAME', 'PASSWORD') or die( mysql_error() );
    mysql_select_db('DATABASE_NAME') or die( mysql_error() );
    $tabel = 'NAVNET_PÅ_TABLLEN_I_DATABASEN';

    $result = mysql_query("SELECT antal_billed_uploads
                          FROM $tabel
                          WHERE ip = '{$_SERVER['REMOTE_ADDR']}'");

    // Var der em bruger med den IP?
    if ( mysql_num_rows($result) > 0 ) {
        $row = mysql_fetch_assoc($result);
    } else { // IP&nbsp; fandtes ikke i databasen, så der oprettes en record
        mysql_query("INSERT INTO $tabel (ip)
                    VALUES ('{$_SERVER['REMOTE_ADDR']}')") or die( mysql_error() );
        $row['antal_billed_uploads'] = 0;
    }

    // Har brugeren uploadet mere end 5 billeder
    if ( $row['antal_billed_uploads'] < 5 ) {
        // Array med filen dimensioner
        $file_properties = getimagesize($_FILES['file']['tmp_name']);

        // Tjekker filens dimensioner
        if ( $file_properties[0] < $max_dimensions['width'] && file_properties[1] < $max_dimensions['height'] ) {
            print "Temp filnavn: {$_FILES['file']['tmp_name']}<br>\n";
            print "Original filnavn: {$_FILES['file']['name']}<br>\n";
            print "Filstørrelse: {$_FILES['file']['size']}<br>\n";
            print "Filtype: {$_FILES['file']['type']}<br>\n";

            // Checker om filen blev sendt.
            if ( !copy($_FILES['file']['tmp_name'], $mappe . $_FILES['file']['name']) ) {
                print "Filen blev ikke sendt!";
            } else { // Upload lykkedes
                mysql_query("UPDATE $tabel
                            SET antal_billed_uploads = antal_billed_uploads + 1
                            WHERE ip = '{$_SERVER['REMOTE_ADDR']}'") or die( mysql_error() );
                print "Fil sendt!";
            }
        } else { // Filens højde eller bredde er større end 128
            print "Filens dimensioner er for store (Max. 128x128)";
        }
    } else {
          print "Der kan max. uploades 5 billeder per. bruger";
    }
}
?>

Prøv dette!
Avatar billede woogoo Nybegynder
03. februar 2004 - 22:23 #12
hmm.. den gør det samme... hmm.. jeg smutter nu.. men er her igen imorgen.. ;)

ses
Avatar billede tefcke Nybegynder
03. februar 2004 - 22:37 #13
Hmm manglede et $ foran en variabel ...
if ( $file_properties[0] < $max_dimensions['width'] && file_properties[1] < $max_dimensions['height'] ) {

skal være:

if ( $file_properties[0] < $max_dimensions['width'] && $file_properties[1] < $max_dimensions['height'] ) {
Avatar billede woogoo Nybegynder
03. februar 2004 - 23:04 #14
kan du gøre så man kan uploade 5 om dagen??
Avatar billede tefcke Nybegynder
03. februar 2004 - 23:32 #15
Ja, kigger på det i morgen!
Avatar billede tefcke Nybegynder
04. februar 2004 - 13:33 #16
<?php
if ( isset($_FILES['file']) ) {
    // Upload mappen
    $mappe = './userpic/';
    // Max diminsioner
    $max_dimensions = array('height' => 128,
                            'width'  => 128);
    // Forbind til database
    mysql_connect('localhost', 'USERNAME', 'PASSWORD') or die( mysql_error() );
    mysql_select_db('DATABASE_NAME') or die( mysql_error() );
    $tabel = 'NAVNET_PÅ_TABLLEN_I_DATABASEN';

    $result = mysql_query("SELECT antal_billed_uploads, dato
                          FROM $tabel
                          WHERE ip = '{$_SERVER['REMOTE_ADDR']}'");

    // Var der em bruger med den IP?
    if ( mysql_num_rows($result) > 0 ) {
        $row = mysql_fetch_assoc($result);
    } else { // IP fandtes ikke i databasen, så der oprettes en record
        mysql_query("INSERT INTO $tabel (ip, dato)
                    VALUES ('{$_SERVER['REMOTE_ADDR']}', NOW())") or die( mysql_error() );
        $row['antal_billed_uploads'] = 0;
    }

    list($year, $month, $day) = explode('-', $row['dato']);
    // Tjekker om det er en ny dag (der tjekkes med foranstilled 0'er, da det er repræsentationen fra DATE)
    if ( !( $day == date('d') && $month == date('m') && $year == date('Y') ) ) {
        mysql_query("UPDATE $tabel
                    SET antal_billed_uploads = 0,
                        dato = NOW()
                    WHERE ip = '{$_SERVER['REMOTE_ADDR']}'");
    }

    // Har brugeren uploadet mere end 5 billeder
    if ( $row['antal_billed_uploads'] < 5 ) {
        // Array med filen dimensioner
        $file_properties = getimagesize($_FILES['file']['tmp_name']);

        // Tjekker filens dimensioner
        if ( $file_properties[0] < $max_dimensions['width'] && file_properties[1] < $max_dimensions['height'] ) {
            print "Temp filnavn: {$_FILES['file']['tmp_name']}<br>\n";
            print "Original filnavn: {$_FILES['file']['name']}<br>\n";
            print "Filstørrelse: {$_FILES['file']['size']}<br>\n";
            print "Filtype: {$_FILES['file']['type']}<br>\n";

            // Checker om filen blev sendt.
            if ( !copy($_FILES['file']['tmp_name'], $mappe . $_FILES['file']['name']) ) {
                print "Filen blev ikke sendt!";
            } else { // Upload lykkedes
                mysql_query("UPDATE $tabel
                            SET antal_billed_uploads = antal_billed_uploads + 1
                            WHERE ip = '{$_SERVER['REMOTE_ADDR']}'") or die( mysql_error() );
                print "Fil sendt!";
            }
        } else { // Filens højde eller bredde er større end 128
            print "Filens dimensioner er for store (Max. 128x128)";
        }
    } else {
          print "Der kan max. uploades 5 billeder per. bruger";
    }
}
?>

Så skal du lige udvide den tabel i databasen jeg snakked om, med følgende kolonne:
dato (DATE, default NULL)
Avatar billede tefcke Nybegynder
04. februar 2004 - 13:36 #17
Du skal nok lige erstatte alle de steder der står NOW() med CURDATE(). Det er vist nok kun 2 steder!
Avatar billede tefcke Nybegynder
04. februar 2004 - 13:39 #18
Det jeg gav dig før, virker ikke helt efter hensigten, der skal lige flytten nogen kode blokke rundt. Det her skulle gerne virke efter hensigten:
<?php
if ( isset($_FILES['file']) ) {
    // Upload mappen
    $mappe = './userpic/';
    // Max diminsioner
    $max_dimensions = array('height' => 128,
                            'width'  => 128);
    // Forbind til database
    mysql_connect('localhost', 'USERNAME', 'PASSWORD') or die( mysql_error() );
    mysql_select_db('DATABASE_NAME') or die( mysql_error() );
    $tabel = 'NAVNET_PÅ_TABLLEN_I_DATABASEN';

    $result = mysql_query("SELECT antal_billed_uploads, dato
                          FROM $tabel
                          WHERE ip = '{$_SERVER['REMOTE_ADDR']}'");

    // Var der em bruger med den IP?
    if ( mysql_num_rows($result) > 0 ) {
        $row = mysql_fetch_assoc($result);
        list($year, $month, $day) = explode('-', $row['dato']);
        // Tjekker om det er en ny dag (der tjekkes med foranstilled 0'er, da det er repræsentationen fra DATE)
        if ( !( $day == date('d') && $month == date('m') && $year == date('Y') ) ) {
            mysql_query("UPDATE $tabel
                        SET antal_billed_uploads = 0,
                            dato = CURDATE()
                        WHERE ip = '{$_SERVER['REMOTE_ADDR']}'");
            $row['antal_billed_uploads'] = 0;
        }
    } else { // IP fandtes ikke i databasen, så der oprettes en record
        mysql_query("INSERT INTO $tabel (ip, dato)
                    VALUES ('{$_SERVER['REMOTE_ADDR']}', CURDATE() )") or die( mysql_error() );
        $row['antal_billed_uploads'] = 0;
    }


    // Har brugeren uploadet mere end 5 billeder
    if ( $row['antal_billed_uploads'] < 5 ) {
        // Array med filen dimensioner
        $file_properties = getimagesize($_FILES['file']['tmp_name']);

        // Tjekker filens dimensioner
        if ( $file_properties[0] < $max_dimensions['width'] && file_properties[1] < $max_dimensions['height'] ) {
            print "Temp filnavn: {$_FILES['file']['tmp_name']}<br>\n";
            print "Original filnavn: {$_FILES['file']['name']}<br>\n";
            print "Filstørrelse: {$_FILES['file']['size']}<br>\n";
            print "Filtype: {$_FILES['file']['type']}<br>\n";

            // Checker om filen blev sendt.
            if ( !copy($_FILES['file']['tmp_name'], $mappe . $_FILES['file']['name']) ) {
                print "Filen blev ikke sendt!";
            } else { // Upload lykkedes
                mysql_query("UPDATE $tabel
                            SET antal_billed_uploads = antal_billed_uploads + 1
                            WHERE ip = '{$_SERVER['REMOTE_ADDR']}'") or die( mysql_error() );
                print "Fil sendt!";
            }
        } else { // Filens højde eller bredde er større end 128
            print "Filens dimensioner er for store (Max. 128x128)";
        }
    } else {
          print "Der kan max. uploades 5 billeder per. bruger";
    }
}
?>
Avatar billede woogoo Nybegynder
07. februar 2004 - 10:56 #19
hmm.... det virker fint.. men den tæller også en gang selv om den ikke kunne uploade.. kan de ændres?
Avatar billede tefcke Nybegynder
07. februar 2004 - 11:40 #20
Tæller den 1 op i databasen når den udskriver : "Filen blev ikke sendt!"
Avatar billede woogoo Nybegynder
07. februar 2004 - 11:46 #21
ja!?
Avatar billede tefcke Nybegynder
07. februar 2004 - 11:54 #22
Er du sikker? For det kan altså på ingen måde lade sig gøre!

Det eneste sted databasen bliver opdateret med +1 er her:

// Checker om filen blev sendt.
if ( !copy($_FILES['file']['tmp_name'], $mappe . $_FILES['file']['name']) ) {
    print "Filen blev ikke sendt!";
} else { // Upload lykkedes
    mysql_query("UPDATE $tabel
                SET antal_billed_uploads = antal_billed_uploads + 1
                WHERE ip = '{$_SERVER['REMOTE_ADDR']}'") or die( mysql_error() );
    print "Fil sendt!";
}

Og hvis den skriver "Filen blev ikke sendt!" kan den umuligt også opdaterer!
Avatar billede woogoo Nybegynder
15. maj 2004 - 13:43 #23
lukker...
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