Topic: php file upload - what am I doing wrong?

It just doesn't work...

Here is the form:

        <form id="reportedit" method="post" action="<?php echo $_SERVER['REQUEST_URI'] ?>" enctype="multipart/form-data">
                <div class="inform">
                    <fieldset>
                        <legend>Hier können Sie den Spielbericht eingeben / ändern.</legend>
                        <div class="infldset">
                            <table class="aligntop" cellspacing="0">
                                <input type="hidden" name="form_sent" />
                                <tr>
                                    <th scope="row">Unsere Aufstellung</th>
                                    <td>
                                        <textarea name="lineup" rows="2" cols="40" tabindex="1"><?php echo $game['aufstellung'] ?></textarea>
                                    </td>
                                </tr>
                                <tr>
                                    <th scope="row">Tore</th>
                                    <td>
                                        <textarea name="goals" rows="5" cols="40" tabindex="2"><?php echo $game['tore'] ?></textarea>
                                    </td>
                                </tr>
                                <tr>
                                    <th scope="row">Bericht</th>
                                    <td>
                                        <textarea name="report" rows="15" cols="100" tabindex="3"><?php echo $game['report'] ?></textarea>
                                    </td>
                                </tr>
                                <tr>
                                    <th scope="row">Bild</th>
                                    <td>
                                        <?php if ($game['bild']) : ?>
                                        <img src="<?php echo PUN_ROOT.'img/reports/'.$game['bild'] ?>" /> 
                                        <a href="reports.php?delete_pic=<?php echo $id ?>">Bild löschen</a><br /><br />
                                        <?php endif; ?>
                                        <input type="file" name="picture" tabindex="4" />
                                        <span>Wenn Sie ein neues Bild hochladen möchten, wählen Sie einfach ein neues Bild aus. <strong>Das alte Bild wird dann jedoch gelöscht.</strong><br />Wenn Sie das Bild weiterhin bzw. gar kein Bild verwenden möchten (falls kein Bild vorhanden ist), lassen Sie das Feld einfach leer.</span>
                                    </td>
                                </tr>
                                <tr>
                                    <th scope="row">Alternativ-Text für Bild</th>
                                    <td>
                                        <input type="text" name="picture_alt" size="60" value="<?php echo $game['bild_alt'] ?>" tabindex="5" />
                                        <span>Der Text wird angezeigt, wenn mit der Maus über das Bild gefahren wird oder das Bild nicht angezeigt wird.</span>
                                    </td>
                                </tr>

                            </table>
                        </div>
                    </fieldset>
                </div>
                <p class="submitend"><input type="submit" name="edit_report" value=" Speichern " tabindex="6" /></p>
            </form>

And here is the upload code:

$id = intval($_GET['edit']);

    $timestamp = mktime($_POST['hour'], $_POST['minute'], 0, $_POST['month'], $_POST['day'], $_POST['year']);
    
    if(isset($_POST['form_sent']))
    {
        if (!empty($_POST['picture']))
        {    
            $result = $db->query('SELECT bild FROM spiele WHERE id='.$id) or error('Unable to fetch picture information', __FILE__, __LINE__, $db->error());
            $picture = $db->result($result);
            
            if($picture)
                @unlink(PUN_ROOT.'img/reports/'.$picture);
                
            $uploaded_file = $_FILES['picture'];

            // Make sure the upload went smooth
            if (isset($uploaded_file['error']))
            {
                switch ($uploaded_file['error'])
                {
                    case 1:    // UPLOAD_ERR_INI_SIZE
                    case 2:    // UPLOAD_ERR_FORM_SIZE
                        message('Die Datei ist zu groß Der Server hat den Upload verboten.');
                        break;
    
                    case 3:    // UPLOAD_ERR_PARTIAL
                        message('Die Datei wurde nur teilweise hochgeladen. Bitte versuchen Sie es erneut.');
                        break;

                    case 4:    // UPLOAD_ERR_NO_FILE
                        message('Sie haben keine Datei zum Upload ausgewählt.');
                        break;

                    case 6:    // UPLOAD_ERR_NO_TMP_DIR
                        message('PHP war nicht in der Lage, die Datei in einem vorläufigen Verzeichnis zu speichern.');
                        break;

                    default:
                        // No error occured, but was something actually uploaded?
                        if ($uploaded_file['size'] == 0)
                            message('Sie haben keine Datei zum Upload ausgewählt.');
                        break;
                }
            }

            if (is_uploaded_file($uploaded_file['tmp_name']))
            {
                $allowed_types = array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png');
                if (!in_array($uploaded_file['type'], $allowed_types))
                    message('Die ausgewählte Datei besitzt keinen gültigen Dateityp. Erlaubt sind gif, jpeg und png.');
    
                // Make sure the file isn't too big
                if ($uploaded_file['size'] > $pun_config['o_avatars_size'])
                    message('Die ausgewählte Datei ist größer als die maximal erlaubte Dateigröße');

                // Determine type
                $extensions = null;
                if ($uploaded_file['type'] == 'image/gif')
                    $extensions = array('.gif', '.jpg', '.png');
                else if ($uploaded_file['type'] == 'image/jpeg' || $uploaded_file['type'] == 'image/pjpeg')
                    $extensions = array('.jpg', '.gif', '.png');
                else
                    $extensions = array('.png', '.gif', '.jpg');
                
                $name = time();
    
                        if (!@move_uploaded_file($uploaded_file['tmp_name'], PUN_ROOT.'img/reports/'.$name.'.tmp'))
                    message('Der Server war nicht in der Lage, die hochgeladene Datei zu verschieben. Bitte kontaktieren Sie den System-Administrator.');

                            list($width, $height, $type,) = getimagesize(PUN_ROOT.'img/reports/'.$name.'.tmp');
                if (empty($width) || empty($height) || $width > $picture_max_width || $height > $picture_max_height)
                {
                    @unlink(PUN_ROOT.'img/reports/'.$name.'.tmp');
                    message('Die ausgewählte Datei ist breiter und/oder höher als das erlaubte Maximum von '.$picture_max_width.'x'.$picture_max_height.' Pixeln.');
                }
                else if ($type == 1 && $uploaded_file['type'] != 'image/gif')                {
                    @unlink(PUN_ROOT.'img/reports/'.$name.'.tmp');
                    message('Die ausgewählte Datei besitzt keinen gültigen Dateityp. Erlaubt sind gif, jpeg und png.');
                }            

                @rename(PUN_ROOT.'img/reports/'.$name.'.tmp', PUN_ROOT.'img/reports/'.$name.$extensions[0]);
                @chmod(PUN_ROOT.'img/reports/'.$name.$extensions[0], 0644);
            }
            else
                message('Ein unbekannter Fehler trat auf. Bitte versuchen Sie es erneut.');
            
            $result = $db->query("UPDATE spiele SET aufstellung='".$_POST['lineup']."', tore='".$_POST['goals']."', report='".$db->escape($_POST['report'])."', bild='".$name.$extensions[0]."', bild_alt='".$_POST['picture_alt']."' WHERE id=".$id) or error('Unable to update game report data', __FILE__, __LINE__, $db->error());
        }
        else
            $result = $db->query("UPDATE spiele SET aufstellung='".$_POST['lineup']."', tore='".$_POST['goals']."', report='".$db->escape($_POST['report'])."', bild_alt='".$_POST['picture_alt']."' WHERE id=".$id) or error('Unable to update game report data', __FILE__, __LINE__, $db->error());

        redirect('reports.php', 'Spielbericht gespeichert. Sie werden weitergeleitet …');

Sometimes I get the error message 'Ein unbekannter Fehler trat auf. Bitte versuchen Sie es erneut.' and sometimes it just redirects me without uploading anything.

Help me please!!!

FluxBB - v1.4.8

Re: php file upload - what am I doing wrong?

If someone could please help me...
I am not sure, but it might be because of the file permissions...

FluxBB - v1.4.8

Re: php file upload - what am I doing wrong?

Well, I don't see anything wrong with the upload code offhand, but you are exposing yourself to SQL injects.

Re: php file upload - what am I doing wrong?

Thanks... i know right now I am the only one that is accessing it anyways (password protected). But I am still working on it.

FluxBB - v1.4.8