2016-03-13 2 views
1

Я создаю следующий скрипт и пытаюсь вставить каждую строку с помощью PDO.PHP CSV сценарий импорта «Неопределенное смещение»

<?php 
/** 
* Created by PhpStorm. 
* User: Andy 
* Date: 13/03/2016 
* Time: 18:15 
*/ 
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 

//connect to the database 
require_once('./members/config/database.php'); 

if (isset($_FILES['uploadedfile'])) { 

    // get the csv file and open it up 
    $file = $_FILES['uploadedfile']['tmp_name']; 
    $handle = fopen($file, "r"); 
    try { 
     // prepare for insertion 
     $stmt = $pdo->prepare(' 
      INSERT INTO memberstest (
       user_healer_number, 
       user_real_name, 
       user_email, 
       user_address, 
       user_phone, 
       user_mobile_number, 
       user_paid_until, 
       user_name, 
       user_password_hash 
      ) VALUES (
       :memberNumber, 
       :memberRealName, 
       :memberEmail, 
       :memberAddress, 
       :memberHomePhone, 
       :memberMobilePhone, 
       :memberPaidUntil, 
       :memberUserName, 
       :memberPassword 
      ) 
     '); 

     $stmt->bindParam(':memberNumber', $data[0]); 
     $stmt->bindParam(':memberRealName', $data[1].' '.$data[2]); 
     $stmt->bindParam(':memberEmail', $data[11]); 
     $stmt->bindParam(':memberAddress', $data[3].' '.$data[4].' '.$data[5].' '.$data[6].' '.$data[7].' '.$data[8]); 
     $stmt->bindParam(':memberHomePhone', $data[9]); 
     $stmt->bindParam(':memberMobilePhone', $data[10]); 
     $stmt->bindParam(':memberPaidUntil', $data[12]); 
     $stmt->bindParam(':memberUserName', $data[0]); 
     $stmt->bindParam(':memberPassword', strtolower($user_password_hash)); 

     // unset the first line like this 
     fgets($handle); 

     // created loop here 
     while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) { 
      $stmt->execute($data); 
     } 

     fclose($handle); 

    } catch(PDOException $e) { 
     die($e->getMessage()); 
    } 

    echo 'Projects imported'; 

} else { 
    echo 'Could not import projects'; 
} 

?> 

<!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="uploadedfile" type="file" id="csv" /> 
    <input type="submit" name="Submit" value="Submit" /> 
</form> 

</body> 
</html> 

Но я получаю следующие ошибки:

Notice: Undefined offset: 1 in /Applications/MAMP/htdocs/spha/csv-import-2.php on line 47

Notice: Undefined offset: 2 in /Applications/MAMP/htdocs/spha/csv-import-2.php on line 47

Fatal error: Uncaught Error: Cannot pass parameter 2 by reference in /Applications/MAMP/htdocs/spha/csv-import-2.php:47 Stack trace: #0 {main} thrown in /Applications/MAMP/htdocs/spha/csv-import-2.php on line 47

Линия 47 является $stmt->bindParam(':memberRealName', $data[1].' '.$data[2]);

и пример CSV это:

H3,Wilfred,Baker,Woodcott,none,Hardington Moor,town,county,postcode,01935 123456,None,[email protected],31/03/2016 

Я смотрел на несколько вопросов/ответов здесь, но не на 100% понять, где я иду не так.

Любая помощь приветствуется

Энди

+0

Я думаю, вы не можете иметь эти '$ data [1]. ' '. $ data [2] 'in bind param –

+0

' $ data [1] 'и' $ data [2] 'не существует. Также вы не можете передать конкатенированную строку в 'bind', вам нужно передать переменную. – fusion3k

+0

попробуйте определить переменную для: $ data [1]. ' '. $ data [2] like: $ foo = $ data [1].' .»$ данных [2]; и использовать $ foo в вашей привязке –

ответ

2

Это должно измениться на:

$stmt->bindParam(':memberRealName', $data[1].' '.$data[2]); 

Это:

$merged_value = $data[1].' '.$data[2]; 

$stmt->bindParam(':memberRealName', $merged_value); 

Чтобы скрыть PHP уведомление добавить следующий код:

error_reporting(E_ALL & ~E_NOTICE); 
+0

Я все еще получаю ошибки, я поместил все конкатенированные значения в переменные, и он говорит неопределенные переменные данные:/ –

+1

Это php уведомление? –

+0

вы можете добавить это 'error_reporting (E_ALL & ~ E_NOTICE);' скрывать уведомления –

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