Загрузка csv файла через форму в БД и последующая проверка данных

rolph

Новичок
Загрузка csv файла через форму в БД и последующая проверка данных

Друзья,

Подскажите пожалуйста, хочу сделать следующую вещь:
Есть поле формы справа кнопка "Обзор".
При нажатии на неё, пользователь выбирает на своём компе csv-файл. Нажимает Submit и данные загружаются в БД.

CSV вида
ФИО;год;(или ноль,или единица);

Поля таблицы БД
fio,year,gr - соответственно.

Подскажите пожалуйста, как это реализовать?
 

Фанат

oncle terrible
Команда форума
что именно тебе непонятно? как прочитать строку из CSV файла, или как работать с базой данных?
читает строку функция [m]fgetcsv[/m], а с базой данных ты попробуй сначала по учебнику, что ли?

Да, а по загрузке файлов в документации есть целая глава.

-~{}~ 15.01.07 01:28:

только делай все по очереди.
сначала попрактикуйся работать с базой, записывать в ней прописанные в скрипте значения.
потом поучись читать файл CSV с диска, лежащий рядом со скриптом, и вывди на экран значения.
потом попробуй записать значения в базу
после этого потренируйся в загрузке файлов и вот теперь можно сводить все вместе
 

rolph

Новичок
PHP:
$mydatabase = "people";
$mytable = "grad";
$user = "admin";
$pass ="password";
$address ="localhost";
$CSV = "grad.csv";
$seperator = ";";

$db = mysql_pconnect("$address", "$user", "$pass");

    	if (!$db)
    	{
       		echo "Error!<p>";
       		
    	}


    	mysql_select_db($mydatabase);
    		
    	$openit = file($CSV);
    	$counter = count($openit);
    		
    	$filearray = file("$CSV");
    		
		echo "Загрузка в базу";
		for($i=0; $i<$counter; $i++)
		
		{
		
		    $item = explode("$seperator", $filearray[$i]); 
		    
			
		    include("query.inc");
    		    $result = mysql_query($query);
    		    
    		    if ($result)	
    		    {
       		    	echo $effected_item."добавили\n";
    		    }
    		    else
    		    {
       		    	echo $effected_item." не добавили\n";
    		    }
		    
    		}
Запрос query.inc
PHP:
$query = "insert into grad values ('', '$item[0]', '$item[1]', '$item[2]')";
$effected_item = "$item[2]";
Я не всё прошу делать, помогите сделать загрузку с компа и проверку.
 

rolph

Новичок
Сделал следующим образом.

Форма:
<form id="loadForm" action="process.php" enctype="multipart/form-data" method="post">
<label for="passed_file">File:</label>
<input type="file" id="passed_file" name="passed_file">
<input type="submit">
</form>

process.php

PHP:
<?php

include("config.php"); //connection to DB


if(!empty($_FILES['passed_file']['tmp_name']))
{
  $f=fopen($_FILES['passed_file']['tmp_name'], 'rb');
  if(!$f) die('error opening file');
  while($row=fgetcsv($f, 128,';'))
  {

   echo $row[0].(mysql_query("INSERT INTO grads (fio, `year`, note) VALUES ('".addslasheS($row[0])."',
 ".intval($row[1]).",'".addslashes($row[2])."')")).'<br />';
   echo mysql_error();
} 
  fclose($f);
}
?>

Подскажите пожалуйста, как сделать, чтобы сначала просто выводилось содержимое из файла и внизу были кнопки "Верно" "Нет", если верно, добавлялось в БД, нет, загружал новый файл через форму.
 

Фанат

oncle terrible
Команда форума
задача нетривиальная.
попробуй выводить содержимое файла на клиенте.

если же сервером, то тебе придётся сохранять файл где-то у себя, потом как-то чистить все эти файлы... морока!
 

Фанат

oncle terrible
Команда форума
не поможет.
впрочем, ты можешь записать содержимое файла в сессию
 

rolph

Новичок
просто надо как-то избежать загрузку всякой хрени в базу, сама загрузка доступна только админам, но всё равно...

Может быть как-то сделать проверку вводимых значений?
 

Фанат

oncle terrible
Команда форума
не понял.
как этот вопрос соотносится с предыдущим?
 

Gorynych

Посетитель PHP-Клуба
Автор оригинала: Фанат
задача нетривиальная.
попробуй выводить содержимое файла на клиенте.

если же сервером, то тебе придётся сохранять файл где-то у себя, потом как-то чистить все эти файлы... морока!
ну я бы не советовал морочится с выводом содержимого локального файла на стороне клиента. Как-никак это очень близко связано с ограничениями политики безопастности.

тема "загрузить файл и сохранить его содержимое в сессионную переменную" интересна, но сразу хочется спросить: какой размер этих фалов ожидается? Потому как если они маленькие - подойдет, а если нет - я бы не стал так мыкать окружение сеанса. Лучше уж предварительно загружать в некий отдельный каталог и все же чистить его (например - ночью по cron'у)
 

rolph

Новичок
Автор оригинала: Gorynych
ну я бы не советовал морочится с выводом содержимого локального файла на стороне клиента. Как-никак это очень близко связано с ограничениями политики безопастности.

тема "загрузить файл и сохранить его содержимое в сессионную переменную" интересна, но сразу хочется спросить: какой размер этих фалов ожидается? Потому как если они маленькие - подойдет, а если нет - я бы не стал так мыкать окружение сеанса. Лучше уж предварительно загружать в некий отдельный каталог и все же чистить его (например - ночью по cron'у)
Предполагаемый размер файла 50Кб(максимум).
 
Сверху