Вставьте значения формы из массива в базу данных - PullRequest
1 голос
/ 03 марта 2011

Я создал форму, которая позволяет пользователю загружать несколько файлов в каталог. Теперь я пытаюсь получить имена файлов из полей ввода формы и сохранить их в базе данных.

Я пытаюсь получить значения массива полей ввода т.е. ['file'] ['name'] и ['file'] ['tmp_name'] и вставьте их в базу данных. С помощью приведенного ниже кода мне удалось только вставить слово «массив» в базу данных, а не фактические имена самих файлов.

Я думаю, что мне нужно перебрать массив, используя цикл foreach, но я не уверен, как его написать и куда вставить его в мой код. Ниже приведен код:

#connect to the database
    mysql_connect("localhost", "root", "");
    mysql_select_db("masscic");

    //Upload Handler to check image types
    function is_image($file) {

    $file_types = array('jpeg', 'gif', 'bmp'); //acceptable file types

    if ($img = getimagesize($file)){

        //echo '<pre>';
        //print_r($_FILES); //will return an array of information for testing
        //print_r($img); //will return an array of information for testing

        if(in_array(str_replace('image/', '', $img['mime']), $file_types))
        return $img;
    }
    return false;
}
    //form submission handling
    if(isset($_POST['submit'])) {

    //file variables

    $fname = $_FILES['files']['name'];
    $ftype = $_FILES['files']['type'];
    $fsize = $_FILES['files']['size'];
    $tname = $_FILES['files']['tmp_name'];
    $ferror = $_FILES['files']['error'];
    $newDir = '../uploads/'; //relative to where this script file resides

    for ($i = count($fname) -1; $i >=0; $i--) {
        if ($ferror[$i] =='UPLOAD ERR OK' || $ferror[$i] ==0) 

        {   

            if(is_image($tname[$i]))
            {
                move_uploaded_file($tname[$i], ($newDir.time().$fname[$i])); 
                echo '<li><span class="success">'.$fname[$i].' -- image has been accepted<br></span></li>';

            }else 
                echo '<li><span class="error">'.$fname[$i].' -- is not an accepted file type<br></span></li>';
        }
    }
}
            $sqlInsert = mysql_query("INSERT INTO files (file_names) VALUES('$fname')") or die (mysql_error());

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 03 марта 2011

При загрузке нескольких файлов (с одним и тем же именем поля) в массив добавляется другое измерение.Скажем, я загружаю a.html и b.html, я получу:

$_FILES['files']['name'][0]; // a.html
$_FILES['files']['name'][1]; // b.html
$_FILES['files']['size'][0]; // size of a.html
$_FILES['files']['size'][1]; // size of b.html

Для итерации:

for(var $i = 0; $i < count($_FILES['files']['name']); $i++) {
    echo 'File name ' . $_FILES['files']['name'][$i] . ' has size ' . $_FILES['files']['size'][$i];
}

Это объяснено на http://www.php.net/manual/en/features.file-upload.multiple.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...