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%)
-----


Po wprowadzeniu zmian, nic się nie dodaje..
Aby zobaczyć, gdzie jest błąd, zmieniłem na:
  1. $pierw = $linearray[0];
  2.  
  3. $linemysql = implode("','",$linearray);
  4.  
  5. $query = "UPDATE firmy SET values('$linemysql') WHERE lp = '$pierw';";
  6.  
  7. $queries .= $query . "\n";
  8.  
  9. mysql_query($query) or die('1'.mysql_error());
  10.  
  11. if (mysql_affected_rows() == 0)
  12. {
  13. $query = "insert into firmy values('$linemysql');";
  14. mysql_query($query) or die('2'.mysql_error());
  15. }

Teraz dostaję komunikat
Cytat
1You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

Zastanawia mnie to, ponieważ danych, które są wczytywane nie zmieniałem, tak jak wyglądały tak dalej wyglądają, więc to nie z nimi problem.
Składnia zapytania.. wydaje mi się, że jest dobrze.
Nie wiem w sumie, gdzie teraz jest błąd.
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: 7.10.2025 - 10:31