2013-08-27 2 views
4

Я импортирую CSV-файл в свою область администрирования, и я хочу добавить файлы в свою базу данных. Мой PHP код import.php является:Импорт CSV в MYSQL через PHP

<?php 

include_once('../include/connection.php'); 

if ($_FILES[csv][size] > 0) { 

    //get the csv file 
    $file = $_FILES[csv][tmp_name]; 
    $handle = fopen($file,"r"); 

    //loop through the csv file and insert into database 
    do { 
     if ($data[0]) { 
      mysql_query("INSERT INTO mobi(promo_title, promo_content, promo_image, promo_link, promo_cat, promo_name) VALUES 
       (
        '".addslashes($data[0])."', 
        '".addslashes($data[1])."', 
        '".addslashes($data[2])."', 
        '".addslashes($data[3])."', 
        '".addslashes($data[4])."', 
        '".addslashes($data[5])."' 
       ) 
      "); 
     } 
    } while ($data = fgetcsv($handle,1000,",","'")); 
    // 

    //redirect 
    header('Location: import.php?success=1'); die; 

} 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Import a CSV File with PHP & MySQL</title> 
</head> 

<body> 

<?php if (!empty($_GET[success])) { echo "<b>Your file has been imported.</b><br><br>"; } //generic success notice ?> 

<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
    Choose your file: <br /> 
    <input name="csv" type="file" id="csv" /> 
    <input type="submit" name="Submit" value="Submit" /> 
</form> 

</body> 
</html> 

код отображается правильно, но когда я выбираю мой тестовый файл и нажмите отправить, я ударил с этими проблемами:

Warning: mysql_query() [function.mysql-query]: Access denied for user 'root'@'localhost' (using password: NO) in admin/import.php on line 23 

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in admin/import.php on line 23 

Warning: mysql_query() [function.mysql-query]: Access denied for user 'root'@'localhost' (using password: NO) in admin/import.php on line 23 

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in admin/import.php on line 23 

Warning: mysql_query() [function.mysql-query]: Access denied for user 'root'@'localhost' (using password: NO) in admin/import.php on line 23 

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in admin/import.php on line 23 

Warning: mysql_query() [function.mysql-query]: Access denied for user 'root'@'localhost' (using password: NO) in admin/import.php on line 23 

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in admin/import.php on line 23 

Warning: Cannot modify header information - headers already sent by (output started at admin/import.php:1) in admin/import.php on line 29 

Может кто-нибудь увидеть причину?

мой connection.php код это:

<?php 

try { 
$pdo = new PDO('mysql:host=localhost;dbname=*********', '*********', '*********'); 
}catch (PDOException $e){ 
    exit('Database Error.'); 
} 

?> 

Обратите внимание, что мои другие страницы, такие как add.php, delete.php, edit.php и так далее все они работают с одной и той же include_once для подключения. php

ТАК НИЧЕГО НЕ СЛЕДУЕТ С МОИМ СОБРАНИЕМ ДАННЫХ.

спасибо.

+2

проверить 'connection.php' исправить создать базу данных. – hallaji

+0

привет. для моего подключения im, используя это: try {$ pdo = new PDO это нужно отразить в коде выше? – kevstarlive

+0

Кажется, что ваша база данных имеет «пароль», и вы оставили ее пустой. – hallaji

ответ

1

Вы используете PDO, чтобы установить соединение с базой данных. Но $pdo экземпляр больше не используется!

Для выполняет оператор SQL, нужно использовать как $pdo->query("INSERT INTO mobi ...")

Вместо этого, Вы используете mysql_query для отправки запроса MySQL. Таким образом, вы получите эти предупреждения:

Access denied for user 'root'@'localhost' (using password: NO)

A link to the server could not be established

Кроме того, убедитесь вы не выводятся какие-либо строки, и т.д ... перед вашей header() функции, чтобы удалить это предупреждение: headers already sent.

+0

ok, поэтому я изменил mysql_query с помощью запроса $ pdo->. и он удаляет все первые проблемы, но не последние, касающиеся заголовка. – kevstarlive

+0

убедитесь, что перед ' hallaji

+0

Вахид Халладжи - большое вам спасибо. это прекрасно работает. еще раз спасибо. – kevstarlive

0

Учетные данные вашей базы данных могут быть неверными. Проверьте, доступен ли сервер.

и информация заголовка уже послал вызывается пустое пространство перед кодом PHP

<?php 

include_once('../include/connection.php'); 

с

<?php 

include_once('../include/connection.php'); 
+0

там оба одинакового. – kevstarlive

+0

Na .. есть дополнительное пространство перед

0

Ваши учетные данные базы данных неверны. Вы также должны посмотреть на объектно-ориентированный подход mysqli к базам данных и использовать mysqli_real_escape_string вместо addlashes. Ошибка заголовка является результатом ошибки mysql-ошибок и вывода на страницу.

+0

привет. для моего подключения im, используя это: try { $ pdo = new PDO это нужно отразить в коде выше? – kevstarlive

+0

Используя PDO, вам нужно будет сделать что-то вроде '$ pdo-> query (YOURQUERY);', но вы все равно должны проверить учетные данные, используемые для начала соединения. –

+0

ну и каждая другая страница, как моя страница add.php, работает с той же страницей include. – kevstarlive

0

Вы пытались использовать php для загрузки файла, поэтому вам не нужно его прокручивать?

Я бы рекомендовал использовать require_once вместо include_once. __DIR__ также всегда хорошо иметь перед вашим включением путь. Таким образом, вы можете сказать, где находится файл из текущего файла, а не текущий скрипт.

Это будет выглядеть примерно так:

<?php 
require_once __DIR__ . '/../include/connection.php'; 

if ($_FILES[csv][size] > 0) { 

    //get the csv file 
    $file = $_FILES[csv][tmp_name]; 

    mysql_query(" 
     LOAD DATA LOW_PRIORITY LOCAL 
     INFILE '$file' 
     REPLACE INTO TABLE mobi 
     FIELDS TERMINATED BY ',' 
     OPTIONALLY ENCLOSED BY '\"' 
     ESCAPED BY '\"' 
     LINES TERMINATED BY '\n' 
     (promo_title, promo_content, promo_image, promo_link, promo_cat, promo_name) 
     SET promo_name = TRIM(BOTH '\r' FROM promo_name); 
    "); 
} 
Смежные вопросы