Page 1 of 2

Import csv file

Posted: Wed Jul 15, 2020 12:37 pm
by hiramalik
Hi all,
I am just getting started with nuBuilder. This is one of the greatest solutions I have found. However, I am stuck on a point. I want to create a button in a form to import a csv file into existing table. Is there any way I could do that? Any guidance from seniors will be highly appriciated.
Kind Regards

Re: Import csv file

Posted: Wed Jul 15, 2020 1:28 pm
by kev1n
Hi,

Here's a ready-to-use example:

https://www.webslesson.info/2019/04/liv ... query.html

The HTML code can be added to a nuBuilder HTML object.

Let me know if you have any questions.

Re: Import csv file

Posted: Wed Jul 15, 2020 2:33 pm
by hiramalik
Thanks you so much for you reply kev1n. But unfortunately, I am just getting started with nuBuilder. When I go to the object property of the button on which I want to create this event. I can see multiple tabs. On HTML editor which piece of code do I need to paste from given link? Do I need to paste only following code?


<?php

//import.php

if(isset($_POST["student_name"]))
{
$connect = new PDO("mysql:host=localhost;dbname=testing", "root", "");
$student_name = $_POST["student_name"];
$student_phone = $_POST["student_phone"];
for($count = 0; $count < count($student_name); $count++)
{
$query .= "
INSERT INTO tbl_student(student_name, student_phone)
VALUES ('".$student_name[$count]."', '".$student_phone[$count]."');

";
}
$statement = $connect->prepare($query);
$statement->execute();
}

?>

Re: Import csv file

Posted: Wed Jul 15, 2020 2:52 pm
by hiramalik
I don't need to fetch the data, I just need to import it.

Re: Import csv file

Posted: Wed Jul 15, 2020 3:32 pm
by kev1n
I can give you detailed instructions tonight.

Re: Import csv file

Posted: Wed Jul 15, 2020 7:43 pm
by kev1n
1. Save this code in a file called fetch.php:

Code: Select all

<?php

//fetch.php

if(!empty($_FILES['csv_file']['name']))
{
 $file_data = fopen($_FILES['csv_file']['tmp_name'], 'r');
 $column = fgetcsv($file_data);
 while($row = fgetcsv($file_data))
 {
  $row_data[] = array(
   'student_name'  => $row[0],
   'student_phone'  => $row[1]
  );
 }
 $output = array(
  'column'  => $column,
  'row_data'  => $row_data
 );

 echo json_encode($output);

}

?>
2. Save this code in a file called import.php. Modify the host, dbname, user, password if they are different.

Code: Select all

<?php

//import.php

if(isset($_POST["student_name"]))
{
 $connect = new PDO("mysql:host=localhost;dbname=testing", "root", "");
 $student_name = $_POST["student_name"];
 $student_phone = $_POST["student_phone"];
 for($count = 0; $count < count($student_name); $count++)
 {
  $query .= "
  INSERT INTO tbl_student(student_name, student_phone) 
  VALUES ('".$student_name[$count]."', '".$student_phone[$count]."');
  
  ";
 }
 $statement = $connect->prepare($query);
 $statement->execute();
}

?>
3. Place these two files in a new subdirectory of your nuBuilder installation. E.g. libs\csvupload"

4. In your form, create a new object of type HTML and paste this code in the HTML field (in the HTML tab).

Place the following code in a HTML object:

Code: Select all

 <head>
  
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <style>
  .box
  {
   max-width:600px;
   width:100%;
   margin: 0 auto;;
  }
  </style>
 </head>
 
 <body>
  <div class="container">
   <br />
   <h3 align="center">CSV File Editing and Importing in PHP</h3>
   <br />
   <form id="upload_csv" method="post" enctype="multipart/form-data">
    <div class="col-md-3">
     <br />
     <label>Select CSV File</label>
    </div>  
                <div class="col-md-4">  
                    <input type="file" name="csv_file" id="csv_file" accept=".csv" style="margin-top:15px;" />
                </div>  
                <div class="col-md-5">  
                    <input type="submit" name="upload" id="upload" value="Upload" style="margin-top:10px;" class="btn btn-info" />
                </div>  
                <div style="clear:both"></div>
   </form>
   <br />
   <br />
   <div id="csv_file_data"></div>
   
  </div>
 </body>


<script>

$(document).ready(function(){
 $('#upload_csv').on('submit', function(event){
  event.preventDefault();
  $.ajax({
   url:"libs/csvupload/fetch.php",
   method:"POST",
   data:new FormData(this),
   dataType:'json',
   contentType:false,
   cache:false,
   processData:false,
   success:function(data)
   {
    var html = '<table class="table table-striped table-bordered">';
    if(data.column)
    {
     html += '<tr>';
     for(var count = 0; count < data.column.length; count++)
     {
      html += '<th>'+data.column[count]+'</th>';
     }
     html += '</tr>';
    }

    if(data.row_data)
    {
     for(var count = 0; count < data.row_data.length; count++)
     {
      html += '<tr>';
      html += '<td class="student_name" contenteditable>'+data.row_data[count].student_name+'</td>';
      html += '<td class="student_phone" contenteditable>'+data.row_data[count].student_phone+'</td></tr>';
     }
    }
    html += '<table>';
    html += '<div align="center"><button type="button" id="import_data" class="btn btn-success">Import</button></div>';

    $('#csv_file_data').html(html);
    $('#upload_csv')[0].reset();
   }
  })
 });

 $(document).on('click', '#import_data', function(){
  var student_name = [];
  var student_phone = [];
  $('.student_name').each(function(){
   student_name.push($(this).text());
  });
  $('.student_phone').each(function(){
   student_phone.push($(this).text());
  });
  $.ajax({  
   url:"libs/csvupload/import.php",
   method:"post",
   data:{student_name:student_name, student_phone:student_phone},
   success:function(data)
   {
    $('#csv_file_data').html('<div class="alert alert-success">Data Imported Successfully</div>');
   }
  })
 });
});

</script>
6. For this example, create a table tbl_student. Run this SQL in phpMyAdmin:

Code: Select all

--
-- Table structure for table `tbl_student`
--

CREATE TABLE `tbl_student` (
  `student_id` int(11) NOT NULL,
  `student_name` varchar(250) NOT NULL,
  `student_phone` varchar(20) NOT NULL,
  `image` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Indexes for table `tbl_student`
--
ALTER TABLE `tbl_student`
  ADD PRIMARY KEY (`student_id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `tbl_student`
--
ALTER TABLE `tbl_student`
  MODIFY `student_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;

6. Try uploading/importing http://demo.webslesson.info/csv-file-op ... /tesmp.csv

7. Modify the code (change column names etc.) so that your own CSV can be imported.

Re: Import csv file

Posted: Thu Jul 16, 2020 2:38 am
by hiramalik
A bundle of thanks for your detailed reply. It helped me a lot. Data is showing on the webpage perfectly well. However, when I click on import data is not imported into the table. Tbl_students remains empty. If you could please look into this issue.

Re: Import csv file

Posted: Thu Jul 16, 2020 3:43 am
by nc07
hiramalik wrote:A bundle of thanks for your detailed reply. It helped me a lot. Data is showing on the webpage perfectly well. However, when I click on import data is not imported into the table. Tbl_students remains empty. If you could please look into this issue.
You will need to change the variables in the import.php to your server setting
$connect = new PDO("mysql:host=localhost;dbname=testing", "root", "");

Re: Import csv file

Posted: Thu Jul 16, 2020 5:44 am
by hiramalik
nc07 wrote:
hiramalik wrote:A bundle of thanks for your detailed reply. It helped me a lot. Data is showing on the webpage perfectly well. However, when I click on import data is not imported into the table. Tbl_students remains empty. If you could please look into this issue.
You will need to change the variables in the import.php to your server setting
$connect = new PDO("mysql:host=localhost;dbname=testing", "root", "");

Wow.. It worked like a charm :D thank you so much for this help. The way you have explained each step in detail helped me learn the process. Once again Thank you so much..

Re: Import csv file

Posted: Thu Jul 16, 2020 11:08 am
by hiramalik
Unfortunately, when I tried to change table name and add more column names it is not executing. I made sure to make changes accuratly but failed. Now the file does nothing :(
I want to import data into the table tbl_Customers and following will be the columns
customerName
customerPhone
customerEmail
customerAddress
appointmentDate
I have updated the code in following method.

1. Fetch.php

Code: Select all

<?php

//fetch.php

if(!empty($_FILES['csv_file']['name']))
{
$file_data = fopen($_FILES['csv_file']['tmp_name'], 'r');
$column = fgetcsv($file_data);
while($row = fgetcsv($file_data))
{
  $row_data[] = array(
   'customerName'  => $row[0],
   'customerPhone'  => $row[1],
   'customerEmail'  => $row[2],
   'customerAddress'  => $row[3],
   'appointmentDate'  => $row[4]
  );
}
$output = array(
  'column'  => $column,
  'row_data'  => $row_data
);

echo json_encode($output);

}

?>
2. import.php

Code: Select all

<?php

//import.php

if(isset($_POST["customerName"]))
{
$connect = new PDO("mysql:host=localhost;dbname=nubuilder4", "root", "");
$customerName = $_POST["customerName"];
$customerPhone = $_POST["customerPhone"];
$customerEmail = $_POST["customerEmail"];
$customerAddress = $_POST["customerAddress"];
$appointmentDate = $_POST["appointmentDate"];


for($count = 0; $count < count($customerName); $count++)
{
  $query .= "
  INSERT INTO tbl_Customers(customerName, customerPhone, customerEmail, customerAddress, appointmentDate)
  VALUES ('".$customerName[$count]."', '".$customerPhone[$count]."' .$ccustomerEmail[$count]."' .$customerAddress[$count]."' .$appointmentDate[$count]."');
 
  ";
}
$statement = $connect->prepare($query);
$statement->execute();
}

?>
3. Table structure

Code: Select all

--

CREATE TABLE `tbl_Customers` (
  `customer_id` int(11) NOT NULL,
  `customerName` varchar(250) NOT NULL,
  `customerPhone` varchar(20) NOT NULL,
  `customerEmail` varchar(200) NOT NULL,
  `customerAddress` varchar(250) NOT NULL,
  `appointmentDate` varchar(50) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Indexes for table `tbl_Customers`
--
ALTER TABLE `tbl_Customers`
  ADD PRIMARY KEY (`customer_id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `tbl_Customers`
--
ALTER TABLE `tbl_Customers`
  MODIFY `customer_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
4. HTML Object Code

Code: Select all

<head>
 
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <style>
  .box
  {
   max-width:600px;
   width:100%;
   margin: 0 auto;;
  }
  </style>
</head>

<body>
  <div class="container">
   <br />
   <h3 align="center">CSV File Editing and Importing in PHP</h3>
   <br />
   <form id="upload_csv" method="post" enctype="multipart/form-data">
    <div class="col-md-3">
     <br />
     <label>Select CSV File</label>
    </div> 
                <div class="col-md-4"> 
                    <input type="file" name="csv_file" id="csv_file" accept=".csv" style="margin-top:15px;" />
                </div> 
                <div class="col-md-5"> 
                    <input type="submit" name="upload" id="upload" value="Upload" style="margin-top:10px;" class="btn btn-info" />
                </div> 
                <div style="clear:both"></div>
   </form>
   <br />
   <br />
   <div id="csv_file_data"></div>
   
  </div>
</body>


<script>

$(document).ready(function(){
$('#upload_csv').on('submit', function(event){
  event.preventDefault();
  $.ajax({
   url:"libs/csvupload/fetch.php",
   method:"POST",
   data:new FormData(this),
   dataType:'json',
   contentType:false,
   cache:false,
   processData:false,
   success:function(data)
   {
    var html = '<table class="table table-striped table-bordered">';
    if(data.column)
    {
     html += '<tr>';
     for(var count = 0; count < data.column.length; count++)
     {
      html += '<th>'+data.column[count]+'</th>';
     }
     html += '</tr>';
    }

    if(data.row_data)
    {
     for(var count = 0; count < data.row_data.length; count++)
     {
      html += '<tr>';
      html += '<td class="customerName" contenteditable>'+data.row_data[count].customerName+'</td>';
      html += '<td class="customerPhone" contenteditable>'+data.row_data[count].customerPhone+'</td>';
      html += '<td class="customerEmail" contenteditable>'+data.row_data[count].customerEmail+'</td>';
      html += '<td class="customerAddress" contenteditable>'+data.row_data[count].customerAddress+'</td>';
      html += '<td class="appointmentDate" contenteditable>'+data.row_data[count].appointmentDate+'</td></tr>';
     }
    }
    html += '<table>';
    html += '<div align="center"><button type="button" id="import_data" class="btn btn-success">Import</button></div>';

    $('#csv_file_data').html(html);
    $('#upload_csv')[0].reset();
   }
  })
});

$(document).on('click', '#import_data', function(){
  var customerName = [];
  var customerPhone = [];
  var customerEmail = [];
  var customerAddress = [];
  var appointmentDate = [];
  $('.customerName').each(function(){
   customerName.push($(this).text());
  });
  $('.customerPhone').each(function(){
   customerPhone.push($(this).text());
  });
  $('.customerEmail').each(function(){
   customerEmail.push($(this).text());
  });
  $('.customerAddress').each(function(){
   customerAddress.push($(this).text());
  });
  $('.appointmentDate').each(function(){
   appointmentDate.push($(this).text());
  });
  $.ajax({ 
   url:"libs/csvupload/import.php",
   method:"post",
   data:{customerName:customerName, customerPhone:customerPhone, customerEmail:customerEmail, customerAddress:customerAddress, appointmentDate:appointmentDate},
   success:function(data)
   {
    $('#csv_file_data').html('<div class="alert alert-success">Data Imported Successfully</div>');
   }
  })
});
});

</script>
I am not sure where am I doing the mistake. Any guidance will be highly appriciated.