Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Edycja użytkowników w .csv
Forum PHP.pl > Forum > Przedszkole
soulreaver1
Witam.

Mam problem edycją danych z tablicy. Nie wiem jak zrobić aby dane osoby która jest aktualnie "na formularzu" były zapisywane dokładnie w to miejsce tablicy z której zostały pobrane.

to mój kod:

  1. <?php
  2. $tablica = file('student.csv');
  3. $osoba = $tablica[$numer];
  4. list($imie, $nazwisko, $miasto, $kod) = explode(";", $osoba);
  5.  
  6.  echo "<form action='main.php' method='post'>
  7.    <input type='text' name='imie' value='$imie'> Imię<br/>
  8.    <input type='text' name='nazwisko' value='$nazwisko'> Nazwisko<br/>
  9.    <input type='text' name='kod' value='$kod'> Kod<br/>
  10.    <input type='text' name='miasto' value='$miasto'> Miasto<br/><br/>
  11.    <input type='submit' value='OK'><br/>
  12. <input type='hidden' name='wybor' value='zapisz'></form>";
  13.  
  14. // jak teraz zapisać $imie, $nazwisko, $miasto, $kod
  15. //  edytowane w formularzu w miejsce danych przed edycją (w to samo miejsce tablicy)?
  16. ?>
Cienki1980
Przerzuć się na bazę danych a problemów nie będziesz miał ( przynajmniej w tej kwestii ).

A tak na serio masz skądś zmienną $numer która wskazuje na wiersz w tablicy. Po wysłaniu formularza pobierz dane z POST ( musisz zmienną $numer też przesłać w formularzu jako pole hidden ) tworzysz ciąg oddzielony przecinkami i wstawiasz do tablicy do wiersza określonego za pomocą $numer.

Potem zerujesz plik i wstawiasz cała tablice do pliku.
soulreaver1
Takie coś powinno działać?


  1. <?php
  2. // $tablica jest tablicą macierzystą.
  3.  
  4. $imie1=$_SESSION['imie1'];
  5. $nazwisko1=$_SESSION['nazwisko1'];
  6. $miasto1=$_SESSION['miasto1'];
  7. $kod1=$_SESSION['kod1'];
  8.  
  9. $zmiana($imie1, $nazwisko1, $kod1, $miasto1);
  10.  
  11. $tablica[$numer]= implode(";", $zmiana);       // $numer jest zmienną sesji.
  12. ?>
Cienki1980
Cytat(soulreaver1 @ 26.01.2009, 12:07:11 ) *
Takie coś powinno działać?


To tylko część z tego co pisałem.
1. dane pobierasz z $_SESSION a skoro korzystasz z formularza to powinieneś z $_POST
2. dane poprawnie wpisujesz do tablicy z mała uwagą że w tym kodzie co pokazałeś nie dałeś pobierania zmiennej $number ( jeżeli masz ją w $_SESSION ) to musisz o niej pamiętać
3. no i nie zapisujesz tablicy do pliku
soulreaver1
Już prawie wszystko działa, z jednym małym ale... w pliku .csv mam:


"11111;11111111;111111;11111"

zamiast

11111;11111111;111111;11111
Cienki1980
Cytat(soulreaver1 @ 26.01.2009, 16:42:13 ) *
Już prawie wszystko działa, z jednym małym ale... w pliku .csv mam:
"11111;11111111;111111;11111"

zamiast

11111;11111111;111111;11111


To pokaż ten fragment kodu gdzie zapisujesz do $tablica i potem do pliku.
soulreaver1
  1. <?php
  2. echo "<form action='main.php' method='post'>
  3.    <input type='text' name='imie1' value='$imie'> Imię<br/>
  4.    <input type='text' name='nazwisko1' value='$nazwisko'> Nazwisko<br/>
  5.    <input type='text' name='kod1' value='$kod'> Kod<br/>
  6.    <input type='text' name='miasto1' value='$miasto'> Miasto<br/><br/>
  7.    <input type='submit' value='OK'><br/>
  8. <input type='hidden' name='wybor' value='zapisz'></form>";
  9. echo"zapisz: $edit";
  10.    
  11.        echo "<body bgcolor='#ffff99'>";
  12.  
  13.        if($edit=="ok")
  14.        {
  15.        echo $imie1;
  16.        
  17. $array[1]=$imie1;
  18. $array[2]=$nazwisko1;
  19. $array[3]=$miasto1;
  20. $array[4]=$kod1;
  21.  
  22. $tablica[$numer]= implode(";", $array);       // $numer jest zmienną sesji.
  23.        echo "<body bgcolor='#ffff99'>";
  24.  $fp = fopen('student.csv', 'w');
  25.  fputcsv($fp, $tablica,';');
  26.    echo "OK - dane wprowadzono<br/>";
  27.    fclose($fp);
  28.    echo "<a href='start.php'>Powrót do menu</a>";
  29.    echo "</body>";
  30. ?>
Cienki1980
Nigdy nie korzystałem z funkcji fputcsv() i nie wiem może ona dodaje tam "" do wstawianego wiersza. Spróbuj standardowych funkcji do zapisywania do pliku. Będziesz musiał przetworzyć $tablica z typu array na ciąg tekstowy ale nie powinnien być to duży problem.
erix
Cytat
The optional enclosure parameter sets the field enclosure (one character only) and defaults to a double quotation mark: ".

Wystarczy jako trzeci parametr podać pusty string i będzie ok. winksmiley.jpg
soulreaver1
teraz robi odstępy zamiast " lub jeśli ustawię tak
  1. <?php
  2. fputcsv($fp, $tablica,';','');
  3. ?>


to wtedy wyświetla błąd

Warning: fputcsv() [function.fputcsv]: enclosure must be a character in C:\Program Files\WebServ\httpd\main.php on line 78
erix
Fakt.

Do CSV korzystałem kiedyś z czegoś takiego: http://code.google.com/p/parsecsv-for-php/
i działa smile.gif

Ostatecznie, możesz zamiast:
  1. <?php
  2. fputcsv($fp, $tablica,';','');
  3. ?>

zrobić coś takiego:
  1. <?php
  2. fwrite($fp, implode(";" $tablica)."\n");
  3. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.