Zapisywanie danych w pliku na serwerze.

Wszystko o językach skryptowych takich jak PHP i Perl, serwerach WWW, CGI, bazach danych i języku SQL.
Mateusz
Posty: 9
Rejestracja: 27 lip 2005, 11:14:09
Płeć: Niewybrana
User Agent: Internet Explorer Windows 800x600
Kontakt:

Zapisywanie danych w pliku na serwerze.

Post autor: Mateusz »

Cześć!!
Jestem początkujący w PHP i chciałem do swojej strony zrobić następujący program. Chciałem by formularz pobierał dane a następnie program php przetwarzał je i zapisywał do pliku a plik zapisał na serwerze tworząc mini profil uzytkownika. Użyłem instrukcji warunkowych. I teraz jest problem bo na dysku wszystko ładnie działa i plik się zapisuje a na serwerze nie chce mimo iz na katalog ustawiłem chmod 777. Teraz na serwerze nawet nie chce mi sie katalog do przechowywania plików utworzyc :-( Proszę o pomoc w zopytmalizowaniu mojego topornego kodu php :-) Oto on:

Kod: Zaznacz cały

<?
   
   //Wyświetla dane wpisane do formularza. Jeśli pozostaną puste pola, wyświetlana jest informacja o błędzie.
   if &#40;$imie==null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać swoje Imię.<br>"&#41;;
   
   &#125; if &#40;$pseudonim==null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać swój Pseudonim.<br>"&#41;;

   &#125; if &#40;$email==null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać swój e-mail.<br>"&#41;;
   
   &#125; if &#40;$miasto==null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać miasto, w którym mieszkasz.<br>"&#41;;
  
   &#125; if &#40;$wiek==null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać swój wiek.<br>"&#41;;

   //Kontroluje poprawność wpisanego wzrostu.
   &#125; if &#40;$wzrost==null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać swój wzrost."&#41;;
   &#125; elseif &#40;$wzrost>240&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Jesteś gigantem."&#41;;
   &#125; elseif &#40;$wzrost<175&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Jesteś za niską osobą, ale zapraszam na Forum."&#41;;
   
   &#125; else &#123;
   
   //Jeśli obowiązkowe pola są wypełnione wyświetla formularz i przesyła dane do zapisu.
   print &#40;"<b>Imię:&nbsp;</b>" . $imie . "<br>"&#41;;
   print &#40;"<b>Pseudonim:&nbsp;</b>" . $pseudonim . "<br>"&#41;;
   
   if &#40;$numer==null&#41; &#123;
   print &#40;"<b>Numer GG:&nbsp;</b>Brak <br>"&#41;;
   &#125; else &#123;
   print &#40;"<b>Numer GG:&nbsp;</b>" . $numer . "<br>"&#41;;
   &#125;
   
   print &#40;"<b>E-mail:&nbsp;</b>" . $email . "<br>"&#41;;
   print &#40;"<b>Miasto:&nbsp;</b>" . $miasto . "<br>"&#41;;
   print &#40;"<b>Województwo:&nbsp;</b>" . $wojewodztwo . "<br>"&#41;;
   print &#40;"<b>Wzrost:&nbsp;</b>" . $wzrost . "&nbsp;cm<br>"&#41;;
   print &#40;"<b>Wiek:&nbsp;</b>" . $wiek . "&nbsp;lat<br>"&#41;;
   print &#40;"<b>O Mnie:&nbsp;</b>" . $omnie&#41;;
   
   //Zapis danych do pliku.
   $plik = fopen&#40;"klubowicze/" .  "$pseudonim" . ".htm", "a"&#41;;
   fputs&#40;$plik, "<b>Imię:</b>&nbsp;" . $imie . "<br>"&#41;;
   fputs&#40;$plik, "<b>Pseudonim:</b>&nbsp;" . $pseudonim . "<br>"&#41;;
   fputs&#40;$plik, "<b>Numer GG:</b>&nbsp;" . $numer . "<br>"&#41;;
   fputs&#40;$plik, "<b>E-mail:</b>&nbsp;" . $email . "<br>"&#41;;
   fputs&#40;$plik, "<b>Miasto:</b>&nbsp;" . $miasto . "<br>"&#41;;
   fputs&#40;$plik, "<b>Wojewodztwo:</b>&nbsp;" . $wojewodztwo . "<br>"&#41;;
   fputs&#40;$plik, "<b>Wzrost:</b>&nbsp;" . $wzrost . "<br>"&#41;;
   fputs&#40;$plik, "<b>Wiek:</b>&nbsp;" . $wiek . "<br>"&#41;;
   fputs&#40;$plik, "<b>O Mnie:</b>&nbsp;" . $omnie . "<br>"&#41;;
   fclose&#40;$plik&#41;;
   &#125;
   ?>
Chciałbym jeszcze dodać opcję by plik ktorego nazwa by si epowtarzala z nazwa juz utworzonego by wyskakiwal blad. dziekuje za pomoc.
szok
Posty: 10
Rejestracja: 03 sie 2005, 08:22:07
Płeć: Niewybrana
User Agent: Opera Windows
Kontakt:

Post autor: szok »

Przy otwarciu pliku dodaj parametr "w+" Wtedy on bedzie sobie tworzył dany plik, proponuje rownież dopisac aby tworzyl chmod 666 na ten plik :)
I zapis pliku ja wykonal bym tak:

Kod: Zaznacz cały

if &#40;$fp = @fopen&#40;"klubowicze/" .  "$pseudonim" . ".htm", "w+"&#41;&#41; &#123;
// blokada pliku do zapisu
flock&#40;$fp, 2&#41;; 
// zapisanie danych do pliku
fputs&#40;$fp,"<b>Imię:</b>&nbsp;" . $imie . "<br>\n<b>Pseudonim:</b>&nbsp;" . $pseudonim . "<br>\n<b>Numer GG:</b>&nbsp;" . $numer . "<br>\n<b>E-mail:</b>&nbsp;" . $email . "<br>\n<b>Miasto:</b>&nbsp;" . $miasto . "<br>\n<b>Wojewodztwo:</b>&nbsp;" . $wojewodztwo . "<br>\n<b>Wzrost:</b>&nbsp;" . $wzrost . "<br>\n<b>Wiek:</b>&nbsp;" . $wiek . "<br>\n<b>O Mnie:</b>&nbsp;" . $omnie . "<br>\n"&#41;;
// odblokowanie pliku
flock&#40;$fp, 3&#41;; 
// zamknięcie pliku
fclose&#40;$fp&#41;; 
&#125;
else echo "Wystapił błąd w zapisie pliku";
 
www.webcoding.shost.pl - Porady dla webmasterów
www.webcoding.shost.pl/txtcms/ - CMS oparty o pliki tekstowe!
Mateusz
Posty: 9
Rejestracja: 27 lip 2005, 11:14:09
Płeć: Niewybrana
User Agent: Internet Explorer Windows 800x600
Kontakt:

Post autor: Mateusz »

Dziękuję za szybką odpowiedź :-) Postaram się przeanalizować ten kod i poprawić swój :-) W PHP zacząłem się bawic dpoiero z 10dni temu :-) więć jestem jeszcze bardzo zielony al emysle ze szybko si enaucze :-p

Mam jeszcze kilka pytan :-) Czy da się ustawić w kodzie żeby odrazuwstawialo te chmody automatycznie. Następnie przy parametrze "w+" jesli ktos wpisze taki sam nick jak jakas poprzednia osoba to wtedy niestety tworzy sie na miejscu starego pliku nowy :/ czy daloby rade jakos temu zapobiec:-) Nie chce kodu ew jakies wskazowki zeby nie robic klopotu :-P dziekui
szok
Posty: 10
Rejestracja: 03 sie 2005, 08:22:07
Płeć: Niewybrana
User Agent: Opera Windows
Kontakt:

Post autor: szok »

Kłopotu niema bo akurat mam taki skrypt na kompie bo wczesniej potrzebowalem sprawdzac czy dany plik juz istenieje.
Sprawdzanie da sie wykonać w tym przypadku jest to plik *.htm wiec poprostu zrobic sprawdzanie czy taki plik już istenieje w danym katalogu. wiec:

Kod: Zaznacz cały

<?php
// zmienna $nazwa to nazwa loginu czy tam czegos
  if &#40;$handle = opendir&#40;'katalog'&#41;&#41; &#123; // Wpisujemy nazwe katalogu
  while &#40;false !== &#40;$file = readdir&#40;$handle&#41;&#41;&#41; &#123; 
      if &#40;$file != "." && $file != ".."&#41; &#123; 
      // Sprawdzanie czy dana nazwa licznika już istenieje
if &#40;$file == $nazwa&#41; &#123;
echo "Uzytkownik o nazwie <b>$nazwa</b> JUz istenieje! Wybierz inny login";
$jest = 1;
&#125;
&#125;
&#125;
if &#40;$jest != 1&#41; &#123;
// Jezeli nie istenieje to tutaj wklej to co ma wykonac

// koniec kodu
&#125;
&#125;
?>
A chmod to bedzie tak:

Kod: Zaznacz cały

chmod&#40;"nazwapliku", 0666&#41;;
 
Chyba o to doklandie chodzilo. jezeli ci pomoglem byłbym wdzieczny za wstawienie linku do mojego seriwisu www.webcoding.shost.pl Pozdrawiam
www.webcoding.shost.pl - Porady dla webmasterów
www.webcoding.shost.pl/txtcms/ - CMS oparty o pliki tekstowe!
Mateusz
Posty: 9
Rejestracja: 27 lip 2005, 11:14:09
Płeć: Niewybrana
User Agent: Internet Explorer Windows 800x600
Kontakt:

Post autor: Mateusz »

---------- 12:57 06.08.2005 ----------

oczywiscie jak tylko serwis ruszy to wstawie link i nawet jakbys mial jakis button ew pionowy baner jakis ladny to bardzo chetnie :-) na te cele ma przewidziane miejsca n astronie :D
dziekuje jeszcze raz teraz sobie poprzegladam reszte tego skryptu

---------- 21:10 ----------

No więc to już by była ostatnia modyfikacja do tego kodu o jaka bym prosił :-) Chciałbym jeszcze zrobić by w zależności od wyboru płci ustalała się sama granica wieku poniżej której wyskakiwałby błąd :-) Chciałbym zeby kobiety mogly wpisac minimalny wzrost 175 a mezczyzni 190 i np oba konczyly si ena 225.i zeby dane o plci byly pobierane z formularzyka :) prosze bardzo!!

oto czesc formularza

Kod: Zaznacz cały

<select name="plec">
   <option value="female">Kobieta
   <option value="male">Mężczyzna
   </select> 
a oto kod php ktory bardzo ladnie dziala :-)

Kod: Zaznacz cały

  <?
   
   //Wyświetla dane wpisane do formularza. Jeśli pozostaną puste pola, wyświetlana jest informacja o błędzie.
   if &#40;$imie == null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać swoje Imię.<br>"&#41;;
   
   &#125;if &#40;$plec == null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać swoją płeć.<br>"&#41;;
   
   &#125; if &#40;$pseudonim == null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać swój Pseudonim.<br>"&#41;;

   &#125; if &#40;$email == null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać swój e-mail.<br>"&#41;;
   
   &#125; if &#40;$miasto == null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać miasto, w którym mieszkasz.<br>"&#41;;
  
   &#125; if &#40;$wiek == null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać swój wiek.<br>"&#41;;

   //Kontroluje poprawność wpisanego wzrostu.
   &#125; if &#40;$wzrost == null&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Musisz podać swój wzrost."&#41;;
   
   &#125; else &#123;
   
   //Sprawdza czy plik o nazwie $pseudonim już istnieje.
   if &#40;$handle = opendir&#40;'members'&#41;&#41; &#123; // Wpisujemy nazwe katalogu.
   while &#40;false !== &#40;$file = readdir&#40;$handle&#41;&#41;&#41; &#123; 
   if &#40;$file != "." && $file != ".."&#41; &#123; 
   
   if &#40;$file == "$pseudonim" . ".htm"&#41; &#123;
   print &#40;"<b>Błąd!!!</b> Klubowicz o nazwie <b>$pseudonim</b> już się zarejestrował. Wybierz inny pseudonim." . "<br>"&#41;;
   $jest = 1;
   &#125;
   &#125;
   &#125;
   if &#40;$jest != 1&#41; &#123;
   //Jeżeli plik o nazwie $pseudonim nie istnieje dane zostają wyświetlone i przesłane do zapisu.
   print &#40;"Witaj <b>$imie</b>!!! Właśnie zapisałeś się do Ã‚£ódzkiego Klubu Wysokich." . "<br>"&#41;;
   &#125;
   &#125;
   
   print &#40;"<br>\n<b>Imię:&nbsp;</b>" . $imie . "<br>"&#41;;
   print &#40;"<b>Pseudonim:&nbsp;</b>" . $pseudonim . "<br>"&#41;;
   
   if &#40;$numer==null&#41; &#123;
   print &#40;"<b>Numer GG:&nbsp;</b>Brak<br>"&#41;;
   &#125; else &#123;
   print &#40;"<b>Numer GG:&nbsp;</b>" . $numer . "<br>"&#41;;
   &#125;
   
   print &#40;"<b>E-mail:&nbsp;</b>" . $email . "<br>"&#41;;
   print &#40;"<b>Miasto:&nbsp;</b>" . $miasto . "<br>"&#41;;
   print &#40;"<b>Województwo:&nbsp;</b>" . $wojewodztwo . "<br>"&#41;;
   print &#40;"<b>Wzrost:&nbsp;</b>" . $wzrost . "&nbsp;cm<br>"&#41;;
   print &#40;"<b>Wiek:&nbsp;</b>" . $wiek . "&nbsp;lat<br>"&#41;;
   print &#40;"<b>O Mnie:&nbsp;</b>" . $omnie&#41;;
   
   //Jeżeli plik danej nazwie nie istnieje program otwiera plik do zapisu.
   if &#40;$fp = @fopen&#40;"members/" .  "$pseudonim" . ".htm", "w+"&#41;&#41; &#123;
   
   //Blokada pliku do zapisu.
   flock&#40;$fp, 2&#41;; 
   
   //Zapisanie danych do pliku.
   fputs&#40;$fp, "<b>Imię:</b>&nbsp;" . $imie . "<br>"&#41;;
   fputs&#40;$fp, "<b>Pseudonim:</b>&nbsp;" . $pseudonim . "<br>"&#41;;
   fputs&#40;$fp, "<b>Numer GG:</b>&nbsp;" . $numer . "<br>"&#41;;
   fputs&#40;$fp, "<b>E-mail:</b>&nbsp;" . $email . "<br>"&#41;;
   fputs&#40;$fp, "<b>Miasto:</b>&nbsp;" . $miasto . "<br>"&#41;;
   fputs&#40;$fp, "<b>Wojewodztwo:</b>&nbsp;" . $wojewodztwo . "<br>"&#41;;
   fputs&#40;$fp, "<b>Wzrost:</b>&nbsp;" . $wzrost . "<br>"&#41;;
   fputs&#40;$fp, "<b>Wiek:</b>&nbsp;" . $wiek . "<br>"&#41;;
   fputs&#40;$fp, "<b>O Mnie:</b>&nbsp;" . $omnie . "<br>"&#41;;

   //Odblokowanie pliku.
   flock&#40;$fp, 3&#41;; 
   //Zamknięcie pliku.
   fclose&#40;$fp&#41;; 
   &#125;
   &#125; 
   ?>
Swoja droga to jest najwazniejszy progs na stronie i zalezy mi a po tem juz z gorki i moze zaczal bym si euczyc dalej o instrukcjach warunkowych i zaczalbym petle bo to wazne sprawy :-) dzieki
ODPOWIEDZ