php - 在插入之前验证 CSV 数据的有效性以及 CSV 文件名,如果中间存在错误/丢失数据,则不要插入到数据库

标签 php mysql validation csv

我需要有关在插入之前验证 CSV 数据以及 CSV 文件名的帮助,如果中间存在错误/丢失数据,请勿插入到数据库并打印错误消息。

try {
    if(isset($_POST['importSubmit'])){
        //validate whether uploaded file is a csv file
        $csvMimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain');
        $surveydate = $_POST['surveydate'];
        $userID = $_SESSION['userID'];

        if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'],$csvMimes)){
            if(is_uploaded_file($_FILES['file']['tmp_name'])){
                //open uploaded csv file with read only mode
                $csvFile = fopen($_FILES['file']['tmp_name'], 'r');

                //skip first line
                fgetcsv($csvFile);

                //parse data from csv file line by line
                while(($line = fgetcsv($csvFile)) !== FALSE) {
                    //check whether member already exists in database with same email
                    //insert member data into database
                    $db->query("INSERT INTO communitysurvey (surveyNum,stationID,age,gender,educationalattainment,question,response,userID,surveydate) VALUES('".$line[0]."', '".$line[1]."','".$line[2]."', '".$line[3]."', '".$line[4]."','".$line[5]."','".$line[6]."','{$userID}','{$surveydate}')");
                }

                //problem on userID session won't get inserted
                //close opened csv file
                fclose($csvFile);      
            }
        }
    }

    //redirect to the listing page
    header("Location: inputcommunity.php".$qstring);
} catch (Exception $e) {
    alert ($e->getMessage());
}

最佳答案

要从 CSV 中获取数据,您可以使用 explode并在 while 循环中读取的每一行中爆炸分隔符(对于 CSV,可能是“,”或“,”)。这将返回该行中每个值的数组。您可以检查该数组的长度是否缺少值,并将类型/值与预期的类型/值进行比较以检查“正确性”。

关于php - 在插入之前验证 CSV 数据的有效性以及 CSV 文件名,如果中间存在错误/丢失数据,则不要插入到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44970273/

相关文章:

javascript - 通过使用 php/html 中的 java 脚本将天数与另一个输入日期字段相加来填充日期

php - Mysql_num_rows() 问题

javascript - 如何验证使用 ng-repeat、ng-show( Angular )动态创建的输入

android - 密码验证应接受特殊字符、数字、字符,但不接受空格

javascript - 如何使用javascript提交多个表单中的一个

php - 在浏览器上使用php查看存储在数据库中的文件

Mysql:在我的本地计算机上观察到插入和更新都非常慢

javascript - Opera 和 Chrome 中的电子邮件验证问题

从自制软件在 Mac OSX Lion 上安装 php 5.4 - 缺少 mysqli 扩展

php - foreach 语句和设置在循环外部使用的变量