user1929805
user1929805

Reputation: 151

php image upload mysql database

I have problem with my script. It uploads image in my hosting server. There created folders with images are missing from hosting server next day or next week not all images of course - 18-19% of all for 2 weeks. I asked them. They told me- the problem is in my php code. If someone can help I will be happy. May be I add some 0777 in mkdir()???? I don't know. I am thinking at the all time...

<?php

if (isset($_FILES['myfile'])) {
    $ip = getRealIpAddr();
    $usernameupload = $user_data['username'];

    $title = sanitize($_POST['title']);
    $description = sanitize($_POST['description']);
    if (empty($_POST['folder']) === true) { $folder = sanitize($_POST['folder_option']);} else { $folder = sanitize($_POST['folder']);}
    $date = date('M-d-Y');
    $code = "";

    $errors = array();
    $allowed_ext =array('jpg', 'jpeg', 'png', 'gif');

    $file_name = $_FILES['myfile']['name'];
    $file_size = $_FILES['myfile']['size'];
    $file_tmp = $_FILES['myfile']['tmp_name'];
    $extension=explode('.',$file_name); 
    $file_ext=strtolower(end($extension));

    if (isset($_POST['submitupload'])) {
        if ($_FILES['myfile']['name'] == ""){
        $errors[] = ' *Upload file';
        } else if (in_array($file_ext, $allowed_ext) === false) {
        $errors[] = ' *Extension not allowed';
        }
    }

    if ($file_size > 5042880) {
        $errors[] = 'File size must be under 5mb';
        }
    if (strlen($folder) > 50) {
        $errors[] = 'Your new folder name must be max 50 characters';
        }

    if (empty($_POST['title'])) {
        $errors[] = 'Please Fill Title';
        }

    if (strlen($_POST['title']) > 255) {
        $errors[] = 'Your title must be max 255 characters';
        }

    if (empty($errors)) {

        require('db.inc.php');

        $charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        $length = 50;

        for ($i = 0; $i <= $length; $i++) {
            $rand = rand() % strlen($charset);
            $tmp = substr($charset, $rand, 1);
            $code .= $tmp;
            }

        $query = mysql_query("SELECT code FROM files WHERE code='$code'");
        $numrows = mysql_num_rows($query);

        while ($numrows != 0) {
                for ($i = 0; $i <= $length; $i++) {
                $rand = rand() % strlen($charset);
                $tmp = substr($charset, $rand, 1);
                $code .= $tmp;
                }
        $query = mysql_query("SELECT code FROM files WHERE code='$code'");
        $numrows = mysql_num_rows($query);
        }

        mkdir("files/$code");
        mkdir("files/thumbs/$code");


        if (move_uploaded_file($file_tmp, "files/$code/".$file_name)) {

        $file = "";     
        $query = mysql_query("INSERT INTO files VALUES ('', '$usernameupload', '$ip', '$title', '$code', '$folder', '$description', '$file_name', '$file_ext', '$file_size', '$date')");

        $query1 = mysql_query("INSERT INTO votes VALUES ('', '', '', '$code')");

        create_thumb('files/'.$code.'/', $file_name, 'files/thumbs/' . $code . '/');


        header("Location: userdownload.php?code=$code");
        exit();

            }
        }
    }
?>

<form action="" method="post" enctype="multipart/form-data">
    <table>
        <tr>
            <td id="editfill">Image:*</td>
            <td><input type="file" name="myfile" id="fileup"></td>
            <tr>
            <td></td>
            <td><?php 

            if (isset($_POST['submitupload'])) {
        if ($_FILES['myfile']['name'] == ""){
        echo '<div id="errormsg"> *Upload file </div>';
        } else if (in_array($file_ext, $allowed_ext) === false) {
        echo '<div id="errormsg"> *Allowed extension: .jpg, .jpeg, .png, .gif</div>';
        } else if ($file_size > 5042880) {
        echo '<div id="errormsg"> *File size must be under 5mb </div>';
        }
    }
    ?></td>
    </tr>
        </tr>
        <tr>
            <td id="editfill">Title:*</td>
            <td><input type="text" name="title" id="title" value="<?php if (isset($_POST['submitupload'])) echo htmlentities($_POST['title']); ?>" maxlength="255"></td>
        <tr>
        <td></td>   
            <td><?php 
            if (isset($_POST['submitupload'])) {
            if (empty($_POST['title'])) {
        echo '<div id="errormsg"> *Please fill title </div>';
        }
            if (strlen($_POST['title']) > 255) {
        echo '<div id="errormsg"> *Your title must be max 255 characters</div>';
        }
        }
            ?></td>
         </tr>
        </tr>
         <tr>
            <td id="editfill">Create Album:</td>
            <td><input type="text" name="folder" id="title" value="<?php if (isset($_POST['submitupload'])) echo htmlentities($_POST['folder']); ?>" maxlength="50">
            </td>
        <tr>
        <td></td>
        <td><?php   
        if (strlen($folder) > 50) {
        echo '<div id="errormsg"> *Your new album name must be max 50 characters</div>';
        }
 ?></td>
        </tr>       
        </tr>
        <tr>
            <td id="editfill">Your Albums:</td>
            <td>
            <select name="folder_option" class="select">
            <option></option>
        <?php  
        $mysql_folder = mysql_query("SELECT `folder_name` FROM `files` WHERE `username` = '$usernameupload' AND `folder_name` > '' GROUP BY `folder_name` ORDER BY `folder_name` ASC"); 

        while ($query_row = mysql_fetch_array($mysql_folder)) {
                $filefolder = $query_row['folder_name'];

                echo '<option value="' . $filefolder . '">' . $filefolder . '</option>';
                }

        ?>
    </select>
            </td>
        <tr>
        <td></td>
        <td></td>
        </tr>       
        </tr>
        <tr>
            <td id="editfill">Description:</td>
            <td><textarea name="description" id="description"><?php if (isset($_POST['submitupload'])) echo htmlentities($_POST['description']); ?></textarea></td>
        <tr><td></td>
            <td>
        </td>
        </tr>       
        </tr>
        <tr>
            <td></td>
            <td><center><br><input type="submit" name="submitupload" id="submitupload" value="Upload"></center></td>
        </tr>
    </table>
</form>

Upvotes: 0

Views: 1543

Answers (1)

Jhonathan H.
Jhonathan H.

Reputation: 2713

Try this one to efficiently see if mkdir creation doesnt failed. else folder and image surely will not be exist even it is added unto your database.

//previous code...
mkdir("files/$code");
mkdir("files/thumbs/$code");

//change to this...
if (!mkdir("files/$code", 0777, true)) {
    die('Failed to create folders...');
}

if (!mkdir("files/thumbs/$code", 0777, true)) {
    die('Failed to create sub folders...');
}

Upvotes: 1

Related Questions