2013-08-27 5 views
4

내 관리 영역에 CSV 파일을 가져올 때 데이터베이스에 파일을 추가하고 싶습니다. import.php에 대한 나의 PHP 코드는 다음과 같습니다PHP를 통해 MYSQL로 CSV 가져 오기

<?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

안녕하세요. 내 연결 인스턴트 메신저를 사용하여 : try {$ pdo = new PDO 위의 코드에 반영해야합니까? – kevstarlive

+0

당신의 데이터베이스는'password'를 가지고 있고 당신은 그것을 비워 두었습니다. – hallaji

답변

1

PDO을 사용하여 데이터베이스 연결을 설정합니다. 그러나 $pdo 인스턴스가 더 이상 사용되지 않습니다!

는 SQL 문을 실행하려면 대신, 당신은 MySQL의 쿼리를 보낼 mysql_query를 사용하는 $pdo->query("INSERT INTO mobi ...")

처럼 사용할 필요가있다. 그래서 당신은이 경고를 얻을 : headers already sent :

A link to the server could not be established

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

또한이 경고를 제거하려면 header() 기능을하기 전에 ... 당신이 등 출력 모든 문자열,하지 있는지 확인하십시오.

+0

을 확인하십시오. 그래서 $ pdo-> query로 mysql_query를 변경했습니다. 헤더에 관한 모든 첫 번째 문제는 제거하지만 마지막 문제는 제거하지 않습니다. – kevstarlive

+0
+0

Vahid Hallaji - 정말 고마워요. 이 잘 작동합니다. 다시 감사합니다. – kevstarlive

0

데이터베이스 자격 증명이 잘못되었을 수 있습니다. 서버에 액세스 할 수 있는지 확인하십시오.

이미 전송 된 헤더 정보가

<?php 

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

을 모두 확인하십시오. – kevstarlive

+0

Na ..

0

데이터베이스 자격 증명을 사용하여 PHP 코드

<?php 

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

전에 공백으로 인해 발생이 올바르지 않습니다. 또한 mysqli 데이터베이스에 대한 객체 지향 접근 방식을 사용하고 addslashes 대신 mysqli_real_escape_string을 사용해야합니다. 헤더 오류는 mysql 오류가 발생하여 페이지에 출력 된 결과입니다.

+0

hi 앞에 여분의 공백이 있습니다. 내 연결 인스턴트 메신저를 사용하여 이것을 시도하십시오 : { $ pdo = new PDO가 위의 코드에 반영되어야합니까? – kevstarlive

+0

PDO를 사용하면'$ pdo-> query (YOURQUERY);'와 같은 작업을해야하지만, 연결을 시작하기 위해 사용되는 자격 증명을 확인해야합니다. –

+0

내 add.php 페이지와 같은 모든 다른 페이지는 동일한 포함 페이지를 사용하여 작동합니다. – kevstarlive

0

PHP를 사용하여 파일을로드하려고 했으므로 파일을 반복하지 않으셨습니까?

include_once 대신 require_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); 
    "); 
} 
관련 문제