【问题标题】:Insert the form values from an array into a database将数组中的表单值插入数据库
【发布时间】:2011-07-07 16:21:24
【问题描述】:

我创建了一个表单,允许用户将多个文件上传到一个目录。现在我正在尝试从表单输入字段中获取文件的名称并将它们存储到数据库中。

我正在尝试获取输入字段的数组值,即; ['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());

感谢您的帮助。

【问题讨论】:

    标签: php mysql database arrays


    【解决方案1】:

    当上传多个文件(具有相同的字段名称)时,另一个维度会添加到数组中。假设我上传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进行了解释

    【讨论】:

    • 您好。我已经广泛阅读了该页面,但我不太明白。这就是为什么我想到了一个“foreach”循环。你是说我应该用我的 for 循环代替上面的循环吗?如果是这样,您的 for 循环会给出解析错误。
    • 我修复了解析错误并将其插入数据库,但它创建了三个单独的记录。也就是说,如果用户上传三个文件,则会在数据库中创建三个单独的记录。我想将所有三个文件都计为一条记录到数据库中一个名为“files”的数据库列中。
    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2021-01-12
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多