Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] ochrona przed atakiem przez CSV
hhg
post
Post #1





Grupa: Zarejestrowani
Postów: 316
Pomógł: 0
Dołączył: 5.07.2006

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


to jest funkcja ktora update'uje baze z pliku CSV
  1. <?php
  2.  
  3. public function insertCsvFile ($file_path) {
  4.  
  5. $handle = fopen ($file_path,"r");
  6.  
  7. // quantity,description,additional
  8. while (($data = fgetcsv($handle, ",")) !== FALSE) {
  9. $data[0] = $this->db->real_escape_string($data[0]);
  10. $data[1] = $this->db->real_escape_string($data[1]);
  11. $data[2] = $this->db->real_escape_string($data[2]);
  12.  
  13. $this->db->query(
  14. "INSERT INTO request.products " .
  15. "VALUES(NULL," . $_SESSION['requestId'] . "," . $data[0] . ",'" . $data[1] . "','" . $data[2] . "')" 
  16. ) or die(mysql_bug(__FILE__,__LINE__));
  17. }
  18.  
  19. fclose ($handle);
  20.  
  21. }
  22. ?>


a co jesli ktos sie pomyli w CSV i nie postawi gdzies przecinka albo poda tylko dwie wartosci (bez trzeciej) w linii?

jak sie uchronic przed takimi niespodziankami?

z gory dzieki za pomoc

Ten post edytował hhg 13.10.2007, 23:21:30
Go to the top of the page
+Quote Post
Darti
post
Post #2





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


Brak delimitera bedzie oznaczac dwa wpisy w tablicy $data a brak wartości trzy wpisy ale trzevi będzie pusty. Oczywiście fgetcsv nie wywali sam z siebie błędu.
Można w takim przypadku każdorazowo sprawdzać istnienie wszystkich (tutaj trzech) komórek tablicy $data, które są niepuste (mają wartość inną niż null) pamiętając o jej czyszczeniu przed powtórzeniem pętli.
Go to the top of the page
+Quote Post
hhg
post
Post #3





Grupa: Zarejestrowani
Postów: 316
Pomógł: 0
Dołączył: 5.07.2006

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


dzieki, a w przypadku gdy ostatnia (trzecia) wartosc moze byc NULL to w sumie wystarczy sprawdzic pierwsze dwie..

a propos delimitera: jezeli pierwszy w bazie jest liczbą (int bezznakowa), drugi jest tinytext i trzeci tez to czy jest sens definiowania delitmitera?
Go to the top of the page
+Quote Post
Darti
post
Post #4





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


Nie musisz określać delimitera, w takim przypadku domyślny delimiter to przecinek, ale tak czy inaczej pola MUSZĄ być czymś oddzielone (z definicji CSV)
Go to the top of the page
+Quote Post

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: 23.08.2025 - 16:37