Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] ochrona przed atakiem przez CSV
hhg
post 13.10.2007, 23:20:44
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
 
Start new topic
Odpowiedzi (1 - 3)
Darti
post 14.10.2007, 01:58:38
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.


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
hhg
post 14.10.2007, 09:34:35
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 14.10.2007, 20:58:50
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)


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:46