2013-04-18 6 views
0

Я пытаюсь загрузить мой txt-файл в свою базу данных, но я не думаю, что что-то произойдет. Я проверил мою базу данных в phpmyadmin, но ничего не было вставлено. Как загрузить и вставить мои данные в базу данных mysql?Как вставить данные из файла CSV в мою базу данных?

Вот мой код:

<?php 
$conn = mysql_connect("localhost", "login", "password") or die(mysql_error()); 

mysql_select_db("database", $conn); 

if(!isset($_POST['submit'])) 
{ 
    $uploadtxt = "nyccrash.txt"; 

    $handle= fopen($uploadtxt, "r"); 

    // error checking. 
    if($handle === false) { 
    die("Error opening $uploadtxt"); 
} 


    while($fileop = fgetcsv($handle, 1000, ",") !== false) { 

    $crash_year = $fileop[0]; 
    $accident_type = $fileop[1]; 
    $collision_type = $fileop[2]; 
    $weather_condition = $fileop[3]; 
    $light_condition = $fileop[4]; 
    $x_coordinate = $fileop[5]; 
    $y_coordinate = $fileop[6]; 


    $sql = mysql_query("INSERT INTO nyccrash (crash_year, accident_type, collision_type, weather_condition, light_condition, x_coordinate, y_coordinate) VALUES ($crash_year, $accident_type, $collision_type, $weather_condition, $light_condition, $x_coordinate, $y_coordinate)"); 

    } } 

>

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title> NYC Crash Data </title> 
<link ref="stylesheet" type "text/css" href="../style/style.css" /> 

</head> 
<body> 
<div id="mainWrapper"> 

    <form method="post" action="" enctype="multipart/form-data"> 
     <input type="file" name="file"/> 
     <br/> 
     <input type="submit" name="submit" value="submit"/> 
    </form> 

</div> 

+0

Вы подключаетесь к базе данных в любом месте вашего кода? – martincarlin87

+2

Вы должны добавить обработку ошибок и выводить или регистрировать результат 'mysql_error()', чтобы выяснить, что не работает должным образом. Также ... пожалуйста, не используйте 'mysql_ *' функции в новом коде. Он устарел и в какой-то момент будет удален с PHP. Вместо этого используйте [MySQLi] (http://php.net/mysqli) или [PDO] (http://php.net/PDO). –

+0

Вы загрузили файл неправильно. Проверьте '$ _FILES ['файл'] ['tmp_name']' и прочитайте о правильных [uploads] (http://php.net/manual/en/features.file-upload.php). – BlitZ

ответ

0

Если это текстовые данные, то вы забыли ' вокруг данных

$sql = mysql_query("INSERT INTO nyccrash (crash_year, accident_type, 
collision_type, weather_condition, light_condition, x_coordinate, y_coordinate) 
VALUES ('$crash_year', '$accident_type', '$collision_type', 
'$weather_condition', '$light_condition', '$x_coordinate', '$y_coordinate')"); 
+0

Это заголовки столбцов для данных. Я хочу добавить около 10 000 точек данных под этими заголовками или атрибутами. Я делаю это неправильно? –

+0

НЕТ НЕТ НЕТ НЕТ НЕТ. Это уязвимость SQL-инъекций и позволяет людям выполнять произвольный SQL в вашей базе данных. Что делать, если для параметра $ crash_year установлено значение ''; drop table nyccrash; --'? См. Http://bobby-tables.com – hdgarrood

+0

** @ hdgarrood **, и вы предлагаете прочитать лекцию о защите базы данных здесь? Я предлагаю вам прокомментировать вопрос OP об этом. – BlitZ

0

Вот как параметризировать Статистика SQL с ненадежным вводом.

$stmt = $db->prepare("INSERT INTO nyccrash (crash_year, accident_type, 
    collision_type, weather_condition, light_condition, x_coordinate, y_coordinate) 
    VALUES (?, ?, ?, ?, ?, ?, ?)"); 
$stmt->bind_param('sssssss', $crash_year, ...); 
$stmt->execute(); 

Смотрите http://codular.com/php-mysqli для получения дополнительной информации по этому вопросу.

Если вы не понимаете, почему вы должны это делать, найдите SQL-инъекцию и не пишите другую строку кода, пока вы ее не поймете.

+0

Из любопытства, что такое доверие против ненадежного ввода? Это интересно. –

+0

** @ Kala J ** Он означает _ «входной санитарии не вариант» _, я думаю. Вопрос о старых *** mysql _ **** функциях (устаревшее расширение) против *** PDO _ **** или *** mysqli _ **** должен обсуждаться на ** [meta] (http: // meta .stackoverflow.com /) ** и не здесь, если мое мнение имеет значение. – BlitZ

+0

Yay! Это зависит от того, пришло ли оно от вас или от кого-то другого. Например, если это строковый литерал в исходном коде, вы можете доверять ему. Если это из представления HTTP POST откуда-то в межстранах, вы не должны доверять ему. – hdgarrood

0

Вы можете сделать это с библиотекой this ответа

$csv = New CSVReader(); 
$result = $csv->parse_file('Test.csv');//path to file should be csv 
echo '<pre>';  // 
print_R($result); // Only for testing 

if($result){ 
    foreach($result as $row){ 
      $crash_year  = $row['crash_year']; 
      $accident_type  = $row['accident_type']; 
      $collision_type = $row['collision_type']; 
      $weather_condition = $row['weather_condition']; 
      $light_condition = $row['light_condition']; 
      $x_coordinate  = $row['x_coordinate']; 
      $y_coordinate  = $row['y_coordinate']; 

      $query = "INSERT INTO nyccrash"; 
      $query .= "(crash_year, accident_type, collision_type, weather_condition, light_condition, x_coordinate, y_coordinate)"; 
      $query .= " VALUES "; 
      $query .= "('$crash_year','$accident_type','$collision_type', '$weather_condition', '$light_condition', '$x_coordinate', '$y_coordinate')"; 
      mysqli_query($query); 
      unset($query); 
    } 
} 

Одна вещь, я заметил, что в запросе вставки вы должны иметь некоторые поля VARCHAR в таблице базы данных, и для этого вам не хватает запятых. Оберните поля varchar запятыми. Это может быть проблемой и использовать die и mysql_error, чтобы увидеть, что такое ошибка.

+0

Какой и какой класс CSVReader() вы используете? –

+0

нажмите [здесь] (http://stackoverflow.com/questions/11337221/codeigniter-rest-csv-import-to-mysql/11339125#11339125) для CSV класса CSVReader в ответе. включите его на свою страницу и используйте. –

+0

-1: Уязвимость SQL injection здесь тоже: '( – hdgarrood

Смежные вопросы