Импортировать CSV, исключить первую строку

Я импортирую мой csv штраф сейчас, кроме одного, как я могу заставить импорт игнорировать данные в первой строке? Сотрудники будут загружать тот же формат, который имеет имена столбцов в этой первой строке.

if (isset($_POST['submit'])) { if (is_uploaded_file($_FILES['filename']['tmp_name'])) { echo "<h1>" . "File " . $_FILES['filename']['name'] . " uploaded successfully." . "</h1>"; echo "<h2>Displaying contents:</h2>"; readfile($_FILES['filename']['tmp_name']); } //Import uploaded file to Database $handle = fopen($_FILES['filename']['tmp_name'], "r"); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $import = "INSERT into tictoc(employee,taskname,tasktime,sessiontime,sessionstart,sessionend,sessionnotes) values('" . $userinfo['first_name'] . " " . $userinfo['last_name'] . "','$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]')"; mysql_query($import) or die(mysql_error()); } fclose($handle); print "Import done"; } 

    просто установите переменную $i = 0 Тогда только вставьте, когда $i = 1 или более

     if (isset($_POST['submit'])) { $i=0; //so we can skip first row if (is_uploaded_file($_FILES['filename']['tmp_name'])) { echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>"; echo "<h2>Displaying contents:</h2>"; readfile($_FILES['filename']['tmp_name']); } //Import uploaded file to Database $handle = fopen($_FILES['filename']['tmp_name'], "r"); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { if($i>0) { $import="INSERT into tictoc(employee,taskname,tasktime,sessiontime,sessionstart,sessionend,sessionnotes) values('".$userinfo['first_name']." ".$userinfo['last_name']."','$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]')"; mysql_query($import) or die(mysql_error()); } $i++; } fclose($handle); print "Import done"; } 

    Вы можете просто использовать команду LOAD DATA INFILE MySQL, которая будет значительно быстрее, чем синтаксический анализ CSV на PHP, построение INSERT для каждой записи, отправка ее как строки в MySQL и наличие MySQL для разбора указанной строки для SQL (под угрозой SQL инъекции):

     LOAD DATA INFILE ? INTO TABLE tictoc FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' IGNORE 1 LINES (tasktime, sessiontime, sessionstart, sessionend, sessionnotes) SET employee = ?, taskname = ? 

    Использование PDO:

     $dbh = new PDO('mysql:dbname='.$dbname, $username, $password); if (is_uploaded_file($_FILES['filename']['tmp_name'])) { $qry = $dbh->prepare(' LOAD DATA INFILE :filepath INTO TABLE tictoc FIELDS TERMINATED BY \',\' OPTIONALLY ENCLOSED BY \'"\' IGNORE 1 LINES (tasktime, sessiontime, sessionstart, sessionend, sessionnotes) SET employee = :employee, taskname = :taskname '); $qry->execute(array( ':filepath' => $_FILES['filename']['tmp_name'], ':employee' => $userinfo['first_name'], ':taskname' => $userinfo['last_name'] )); } 

    возможно, вы можете использовать этот способ, если хотите:

     $i=0; while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $i++; if($i==1) continue; $import="INSERT into tictoc(employee,taskname,tasktime,sessiontime,sessionstart,sessionend,sessionnotes) values('".$userinfo['first_name']." ".$userinfo['last_name']."','$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]')"; mysql_query($import) or die(mysql_error()); } 

    Никакой переменной не требуется. Это намного проще. Вот решение, требующее наименьшего количества внешнего кода, и работает отлично. Попробуйте положить:

     $headers = fgetcsv($handle, 1000, ","); 

    Перед циклом while (), который захватывает данные CSV. Это захватывает заголовки, но не позволяет их вставить в базу данных. Как только цикл while начинается, первая строка уже была возвращена, что оставляет их вне вставки mysql. Кроме того, кажется, что заголовки нужны, и поэтому это также решает.

    Поэтому, в конце концов,

     if (isset($_POST['submit'])) { if (is_uploaded_file($_FILES['filename']['tmp_name'])) { echo "<h1>" . "File " . $_FILES['filename']['name'] . " uploaded successfully." . "</h1>"; echo "<h2>Displaying contents:</h2>"; readfile($_FILES['filename']['tmp_name']); } //Import uploaded file to Database $handle = fopen($_FILES['filename']['tmp_name'], "r"); //Grab the headers before doing insertion $headers = fgetcsv($handle, 1000, ","); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $import = "INSERT into tictoc(employee,taskname,tasktime,sessiontime,sessionstart,sessionend,sessionnotes) values('" . $userinfo['first_name'] . " " . $userinfo['last_name'] . "','$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]')"; mysql_query($import) or die(mysql_error()); } fclose($handle); print "Import done"; } 

    Вы можете попробовать следующее:

     array_shift($data); 

    Я реализую этот код и проверенный код. Я думаю, что это очень полезно

    Вы следуете некоторым правилам:

    1. Ваш файл csv в соответствии с именем таблицы базы данных (например: имя таблицы db – это пользователи, тогда csv должен быть users.csv)

    2. Первая строка вашего первого файла csv должна быть именем таблицы таблиц db (например: Id, name и т. Д.) После начала ввода данных

    3. Вы можете загрузить класс источника данных с: – http://code.google.com/p/php-csv-parser/, потому что я требую под кодом: require_once 'CSV / DataSource.php';

     <?php ini_set('memory_limit','512M'); $dbhost = "localhost"; $dbname = "excel_import"; $dbuser = "root"; $dbpass = ""; $conn=mysql_connect ($dbhost, $dbuser, $dbpass) or die ("I cannot connect to the database because: " . mysql_error()); mysql_select_db($dbname) or die("Unable to select database because: " . mysql_error()); require_once 'CSV/DataSource.php'; $filename = "users.csv"; $ext = explode(".",$filename); $path = "uploads/".$filename; $dbtable = $ext[0]; import_csv($dbtable, $path); function import_csv($dbtable, $csv_file_name_with_path) { $csv = new File_CSV_DataSource; $csv->load($csv_file_name_with_path); $csvData = $csv->connect(); $res=''; foreach($csvData as $key) { $myKey =''; $myVal=''; foreach($key as $k=>$v) { $myKey .=$k.','; $myVal .="'".$v."',"; } $myKey = substr($myKey, 0, -1); $myVal = substr($myVal, 0, -1); $query="insert into ".$dbtable." ($myKey)values($myVal)"; $res= mysql_query($query); } if($res ==1) { echo "record successfully Import."; }else{ echo "record not successfully Import."; } } 

    Объявить одну переменную перед циклом while

     $row=1; 

    то в цикле while это условие

     if($row==1){ $row++; continue; }