Εισαγωγή δεδομένων από λίστα, σε MySQL db με χρήση PHP

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
philos
Δημοσιεύσεις: 264
Εγγραφή: 30 Αύγ 2007 23:32

Εισαγωγή δεδομένων από λίστα, σε MySQL db με χρήση PHP

Δημοσίευση από philos » 26 Ιούλ 2013 19:12

Λοιπόν, θέλουμε να φτιάξουμε δύο λίστες τα δεδομένα των οποίων θα εισάγουμε σε MySQL πίνακες με ένα αρχείο php - importer. ΑΣ πούμε τις φτιάχνουμε στο excel.
Η μία λίστα είναι η κατηγορία των αντικειμένων και η άλλη λίστα τα αντικείμενα.
Για παράδειγμα, η λίστα μας στο excel έχει την εξής μορφή. Στο column "Α" έχουμε το όνομα της κατηγορίας και στο column "Β" το όνομα του αντικειμένου.
Στο "Α" προφανώς και μπορούν να υπάρχουν παραπάνω από 1 φορές τα ίδια στοιχεία, αφού υπάρχουν πολλά αντικείμενα σε κάθε μία κατηγορία.

Το παράδειγμα το excel είναι υποθετικό. Εγώ θέλω αυτή τη λίστα να την εισάγω με χρήση php σε κάποιους πίνακες της MySQL.
πχ θα εισαχθούν οι κατηγορίες σε έναν πίνακα MySQL με όνομα "categories" (1 σειρά για κάθε κατηγορία - μοναδικό ID)
επίσης θα εισαχθούν και τα αντικείμενα στον πίνακα "items" ο οποίος έχει και το column "categoryid" κοινό με τον πίνακα "categories".

Το ερώτημά μου είναι πως θα μπορέσω να εισάγω τη λίστα στο php αρχείο που θα τρέξω;
Σε τι μορφή προτείνετε να φτιάξω τη λίστα; (πχ csv; ή κάποιο άλλο αρχείο βάσης δεδομένων ) και πως την εισάγω στο php αρχείο ώστε να τρέξω τα queries σε αυτό;

Να σημειώσω ότι οι πίνακες "categories" και "items" περιέχουν ήδη δεδομένα και επιπλέον έχουν κι άλλα columns που θα τους εισαχθούν κάποιες default πληροφορίες για τα στοιχεία της λίστας που εισάγω, με χρήση κάποιων if στο php αρχείο που θα κάνει το import.
Σας ευχαριστώ πολύ!

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Εισαγωγή δεδομένων από λίστα, σε MySQL db με χρήση PHP

Δημοσίευση από geomagas » 27 Ιούλ 2013 00:30

philos έγραψε:πως θα μπορέσω να εισάγω τη λίστα στο php αρχείο που θα τρέξω;
Σε τι μορφή προτείνετε να φτιάξω τη λίστα; (πχ csv; ή κάποιο άλλο αρχείο βάσης δεδομένων ) και πως την εισάγω στο php αρχείο ώστε να τρέξω τα queries σε αυτό;
Το csv μου φαίνεται μια χαρά. Για να το εισάγεις, και έστω ότι $file_location είναι η τοποθεσία του, είτε στο filesystem είτε σε url:

Κώδικας: Επιλογή όλων

$lines=file($file_location,FILE_IGNORE_NEW_LINES);
foreach($lines as $line)
  {
  list($category,$item)=explode(";",$line);
  $data[$category][]=$item;
  }
Μετά από αυτό έχεις ένα

Κώδικας: Επιλογή όλων

array(
  'category1'=>array('item1.1','item1.2', ...... ),
  'category2'=>array('item2.1','item2.2', ...... ),
  ...........................
  );
και μπορείς να το εισάγεις με ένα loop στους πίνακές σου.
Αν χρειάζεσαι file upload, κοίτα εδώ. Για να "κουμπώσει" με τα παραπάνω,

Κώδικας: Επιλογή όλων

$file_location=$_FILES['yourfield']['tmp_name'];

Άβαταρ μέλους
philos
Δημοσιεύσεις: 264
Εγγραφή: 30 Αύγ 2007 23:32

Εισαγωγή δεδομένων από λίστα, σε MySQL db με χρήση PHP

Δημοσίευση από philos » 27 Ιούλ 2013 14:57

Σε ευχαριστώ πολύ geomagas!
Άλλη μια ερώτηση:
πως θα τροποποιήσω τον κώδικα php που παρέθεσες, στην περίπτωση που ας πούμε έχουμε άλλα δύο columns με ονομασία field1 και field2? (οπότε τελικώς θα έχουμε ένα CSV με 4 columsn: κατηγορία, αντικείμενο, field1 και field2). Τα field1 και field2 θα περιέχουν ανεξάρτητα δεδομένα για κάθε αντικείμενο και μάλλον δεν θα έχουν κοινά στοιχεία σαν columns (σε αντίθεση με το column της κατηγορίας).

:D

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Εισαγωγή δεδομένων από λίστα, σε MySQL db με χρήση PHP

Δημοσίευση από geomagas » 27 Ιούλ 2013 15:30

Θα υποθέσω ότι τα field1, field2 είναι χαρακτηριστικά (attributes) του κάθε αντικειμένου, και το αναγνωριστικό (μοναδικό, τουλάχιστον μέσα στην ίδια κατηγορία) του αντικειμένου είναι το περιεχόμενο της 2ης στήλης.

Κώδικας: Επιλογή όλων

foreach($lines as $line)
  {
  list($category,$item,$field1,$field2)=explode(";",$line);
  $data[$category][$item]=array('field1'=>$field1,'field2'=>$field2);
  }
Αυτό θα σου "επεκτείνει" τον πίνακα σε ένα ακόμη επίπεδο, κάπως έτσι:

Κώδικας: Επιλογή όλων

array(
  'category1'=>array(
    'item1.1'=>array('field1'=>'field1.1.1','field1'=>'field1.1.2'),
    'item1.2'=>array('field1'=>'field1.2.1','field1'=>'field1.2.2'),
     ...... 
    ),
  'category2'=>array(
    'item2.1'=>array('field1'=>'field2.1.1','field1'=>'field2.1.2'),
    'item2.2'=>array('field1'=>'field2.2.1','field1'=>'field2.2.2'),
     ...... 
    ),
  ...........................
  );

Άβαταρ μέλους
philos
Δημοσιεύσεις: 264
Εγγραφή: 30 Αύγ 2007 23:32

Εισαγωγή δεδομένων από λίστα, σε MySQL db με χρήση PHP

Δημοσίευση από philos » 02 Αύγ 2013 14:45

Και μια τελευταία ερώτηση. Πως αλλάζω τον κώδικα αν το CSV είναι της μορφής:
Category,Name,Field1,Field2
students,Peter,Peristeri,12345
pupils,Nick,Marousi,231321
... δλδ η πρώτη σειρά έχει τις ονομασίες των columns? Δε πρέπει να εισαχθούν αυτές στον array της PHP.
Αν δεν κάνω λάθος, ο κώδικας που παρέθεσες λειτουργεί κανονικά αν το csv δεν έχει στη πρώτη σειρά τα column names:
students,Peter,Peristeri,12345
pupils,Nick,Marousi,231321

μμμ το csv που έχω βάζει κόμματα αντί για ερωτηματικά - μα καλά πόσα csv formats υπάρχουν; :pint:

Σε ευχαριστώ!

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Εισαγωγή δεδομένων από λίστα, σε MySQL db με χρήση PHP

Δημοσίευση από geomagas » 02 Αύγ 2013 15:48

philos έγραψε:Και μια τελευταία ερώτηση. Πως αλλάζω τον κώδικα αν το CSV είναι της μορφής:
Category,Name,Field1,Field2
students,Peter,Peristeri,12345
pupils,Nick,Marousi,231321
... δλδ η πρώτη σειρά έχει τις ονομασίες των columns? Δε πρέπει να εισαχθούν αυτές στον array της PHP.
Πριν τη foreach μπορείς να αφαιρέσεις το πρώτο στοιχείο του $lines. Εγώ θα το έκανα έτσι:

Κώδικας: Επιλογή όλων

$headings=explode(";",array_shift($lines));
...ώστε να κρατήσω τις επικεφαλίδες σε ένα άλλο array, μήπως τις χρειαστώ αργότερα. Αν θέλεις απλά να τις "πετάξεις":

Κώδικας: Επιλογή όλων

unset($lines[0]);
philos έγραψε: μμμ το csv που έχω βάζει κόμματα αντί για ερωτηματικά - μα καλά πόσα csv formats υπάρχουν;
Τυπικά, υπάρχει ένα. Όμως, στην πράξη, ενώ όλες οι υπόλοιπες παράμετροι γενικά ακολουθούνται, το delimiter (comma) μπορεί να διαφέρει. Χρησιμοποίησα το ερωτηματικό "μηχανικά" (ως γνήσιο "παιδί της Delphi"... χεχε!)

Άβαταρ μέλους
philos
Δημοσιεύσεις: 264
Εγγραφή: 30 Αύγ 2007 23:32

Εισαγωγή δεδομένων από λίστα, σε MySQL db με χρήση PHP

Δημοσίευση από philos » 02 Αύγ 2013 22:02

Σε ευχαριστώ πολύ! (τι χαζός, δεν σκέφτηκα καν να κάνω unset την 1η γραμμή!! ).

Οι απορίες μου λύθηκαν. :)

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Εισαγωγή δεδομένων από λίστα, σε MySQL db με χρήση PHP

Δημοσίευση από geomagas » 02 Αύγ 2013 22:06

philos έγραψε:...τι χαζός...
...Αναθεώρησε....
Τις περισσότερες φορές, αυτά που δεν βλέπουμε είναι αυτά που είναι ακριβώς κάτω από τη μύτη μας.
Καμιά φορά σκέφτομαι ότι, αν ο Θεός ήθελε να τα βλέπουμε όλα, δεν θα μας έδινε μύτες!!! :D

Καλή συνέχεια

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης