Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]import danych z .csv
Cromwell
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

Ostrzeżenie: (0%)
-----


Importuję dane z pliku csv do bazy danych. Skrypt wygląda tak:

  1. //formularz
  2. echo '<form action="dodaj.php" method="get">
  3. <input type="hidden" name="add" value="dodaj" />
  4. <input type="submit" value="dodaj" />
  5. </form>';
  6.  
  7. // jesli add = dodaj, wykonaj skrypt
  8. $add = $_GET['add'];
  9.  
  10. if ($add == 'dodaj')
  11. {
  12.  
  13. //definiowanie atrybutow
  14. $fieldseparator = ";";
  15. $lineseparator = "\n";
  16. $csvfile = "firmy.csv";
  17.  
  18.  
  19. if(!file_exists($csvfile)) {
  20. echo "Plik nie istnieje. Upewnij się, że umieściłeś go w katalogu skryptu.\n";
  21. }
  22.  
  23. $file = fopen($csvfile,"r");
  24. if(!$file) {
  25. echo "Błąd podczas otwierania pliku.\n";
  26. }
  27.  
  28. $size = filesize($csvfile);
  29. if(!$size) {
  30. echo "Plik jest pusty.\n";
  31. }
  32.  
  33. $csvcontent = fread($file,$size);
  34.  
  35. fclose($file);
  36.  
  37. conn();
  38.  
  39. $lines = 0;
  40. $queries = "";
  41. $linearray = array();
  42.  
  43. foreach(split($lineseparator,$csvcontent) as $line) {
  44.  
  45. $lines++;
  46. $line = trim($line," \t");
  47. $line = str_replace("\r","",$line);
  48. $line = str_replace("'","\'",$line);
  49. $linearray = explode($fieldseparator,$line);
  50. $linemysql = implode("','",$linearray);
  51. $query = "insert into firmy values('$linemysql');";
  52. $queries .= $query . "\n";
  53. @mysql_query($query);
  54. }
  55.  
  56. echo "Znaleziono $lines rekordów w pliku CSV. Wszystkie zostały dodane do bazy poprawnie.\n";
  57. }
  58.  
  59. ?>


Skrypt działa bardzo dobrze.
Chciałbym żeby rekordy które wgrywam o jakimś ID zastępowały rekordy które są już w bazie z takim samym ID.

Ten post edytował Cromwell 30.11.2009, 16:12:11
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cromwell
post
Post #2





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

Ostrzeżenie: (0%)
-----


Ok, całe zapytanie wygląda tak:
  1. UPDATE firmy SET VALUES('10000001','1','2','3','','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21',22','23','24','25',' 26','27','28','29','','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52', '53','54','55','56') WHERE lp = '10000001';


Zmieniłem w nim wartości na liczby, gdyż po prostu nie mogę ich pokazać publicznie (wewnątrz zapytania po przecinkach dodałem jeszcze dwie spacje, aby się ładnie wyświetliło tutaj). Same wartości na pewno wchodzą do bazy dobrze, gdyż skryptem, który umieściłem w pierwszym poście dodawałem dokładnie te same rekordy.

Zapytanie ma prawo się nie wykonać, jeśli w bazie danych nie ma danego rekordu. Jednak wtedy skrypt powinien zejść niżej i wykonać to drugie. To, które jest identyczne jak to z pierwszego postu.

Może chodzi o to, że jeśli skrypt nie wykona zapytania, to już dalej nie robi tylko raz jeszcze zaczyna od foreach z nową wartością?

EDIT
Jak usunąłem fragment, który informował o błędzie w pierwszym zapytaniu, wtedy skrypt niby cały poszedł, dostałem info, że rekordy zostały dodane poprawnie, jednak w bazie ich nie ma.

Ten post edytował Cromwell 1.12.2009, 12:07:48
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 13:33