Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz zgłoszeniowy z licznikiem wolnych miejsc
Forum PHP.pl > Forum > PHP
bohema
Witam, nie jestem biegły w php. znam jedynie podstawy, stąd szukam pomocy na tym forum.
Mam formularz wysylajacy zgloszenia, dziala poprawnie jednak potrzebna jest mała modyfikacja.

Otóż obecnie formularz wysyła maile i zapisuje w pliku kurs1.txt licznik + 1 aż do momentu wyslania 20 maili.
Po wyslaniu 20 maili formularz informuje o braku wolnych miejsc.

Modyfikacja polega na tym, aby formularz sprawdzał plik kurs1.txt i wyswietlal jego stan na stronie w postaci:
POZOSTAŁO 40 MIEJSC
Stan pliku kurs1.txt powinien wynosic 40 i z kazdym wyslanym mailem zmieniac sie o - 1
Po wysłaniu maila, powinien wyswietlic sie komunikat:
POZOSTAŁO 39 MIEJSC i tak do zera
po wyzerowaniu licznika, powinien pojawic sie komunikat o braku wolnych miejsc.

Prosta sprawa dla kogoś z biegłą znajomością PHP przypuszczam że 5 minut roboty, dla mnie to z całą pewnością kilka dni główkowania. Z góry serdecznie dziękuję za pomoc.



  1. <?
  2. //na poczatku sprawdzimy ile ma licznik - zeby nie sprawdzac juz dalej po 2 razy tego samego
  3.  
  4. // czy w ogole istnieje plik.txt, jesli nie - stwarzamy go pustego
  5. if(!file_exists('kurs1.txt')) {
  6.    // tworzymy pusty plik
  7.    touch ('kurs1.txt'); //plik jest absolutnie pusty
  8. }
  9. $licznik = 0;
  10. $plik = file('kurs1.txt');
  11. foreach ($plik as $numer_linii => $zawartosc_linii) {
  12.      $licznik = $zawartosc_linii;
  13. }  
  14. // Sprawdzenie czy formularz wyslano
  15. if(isset($_REQUEST['wyslij'])) {
  16.    // nacisnieto wysylanie formularza, wiec sprawdzamy dalej czy licznik jest mniej niz 20
  17.    if($licznik <=19) {
  18.        //licznik ma mniej niz 20 - zapisujemy dane z formularza + zwiekszamy licznik o jeden
  19.        // TUTAJ WYKORZYSTUJEMY WYSLANE W FORMULARZU DANE
  20.        // kasujemy plik
  21.        unlink('kurs1.txt');
  22.        // tworzymy pusty plik
  23.        touch ('kurs1.txt');
  24.        //otwiermay plik
  25.        $fp2 = fopen ('kurs1.txt', 'r+');
  26.        if (flock($fp2, LOCK_EX)) { // otwieramy sobie plik do zapisu
  27.            $licznik++; // licznik zwiekszamy o jeden.
  28.            fwrite($fp2, $licznik); //wpisujemy zmienna $licznik do pliku
  29.            flock($fp2, LOCK_UN); // zwalniamy zablokowanie pliku w ktory zapisywalismy
  30.        }
  31.        else {
  32.            echo 'BLAD, nie udalo sie otworzyc pliku';
  33.        }
  34.  $tresc = "Imie_nazwisko: $_POST[imie]\nData_urodzenia: $_POST[data]\nAdres_zamieszkania: $_POST[adres]\nNr_telefonu: $_POST[nr]\nEmail: $_POST[mail]\n \nImie_nazwisko: $_POST[imie_1]\nData_urodzenia: $_POST[data_1]\nAdres_zamieszkania: $_POST[adres_1]\nNr_telefonu: $_POST[nr_1]\nEmail: $_POST[mail_1]";
  35.        mail('info@bohema.org', 'temat' , $tresc);
  36.        echo '<b>Zgłoszenie zostało wysłane</b><br>
  37.             <a href="index.php">Powrót do strony głównej</a>
  38.        ';
  39.    }
  40.    else {
  41.        // licznik ma wartosc 20 - wywalamy blad, to nie powinno sie pojawic, bo przecie formyularz nie byl aktywny jesli licznik byl wiekszy niz 20, ale moze to byc zrobione atakiem "hacerskim", czyli od razy wyslane dane jakby z formularza. dlatego mimo wszystko sprawdzalismy czy licznik jest mniejszy od 20.  
  42.        echo '<font color="red">formularz nie jest aktywny, zapisano wiecej niz 20 razy, a ten napis w ogole nie powinien sie wiecej pokazywac</font>';
  43.    }
  44. }
  45. else {
  46.    // mniej niz 20 - pokazujemy formularz do wyslania
  47.    if($licznik <=19 ){
  48.        echo '<br><b>Formularz zgłoszeniowy 16 luty 2008<br><Br>
  49.        <form method="post" action="kurs_1.php">
  50.        <br>Imię i nazwisko:<input type="text" name="imie" style="width: 250px">
  51.        <br>Data urodzenia DD-MM-RRRR:<input type="text" name="data" style="width: 250px" maxlength="10">
  52.        <br>Adres zamieszkania:<textarea name="adres" style="width: 250px"></textarea>
  53.        <br>Nr telefonu:<input type="text" name="nr" style="width: 250px">
  54.        <br>Adres e-mail:<input type="text" name="mail" style="width: 250px"><br>
  55.        <p>*Jeżeli zapisujesz się sam(a) wypełnij tylko pierwszą część formularza</p>
  56.        <br>Imię i nazwisko:<input type="text" name="imie_1" style="width: 250px"></td>
  57.        <br>Data urodzenia DD-MM-RRRR<input type="text" name="data_1" style="width: 250px" maxlength="10">
  58.        <br>Adres zamieszkania<textarea name="adres_1" style="width: 250px"></textarea>
  59.        <br>Nr telefonu<input type="text" name="nr_1" style="width: 250px">
  60.        <br>Adres e-mail<input type="text" name="mail_1" style="width: 250px">
  61.    <br><input type="submit" name="wyslij" value="Wyślij">';
  62.    }
  63.    // wiecej niz 20 - strona pokaze ze juz nie aktywna jest
  64.    else {
  65.        echo '<p><font color="red">Brak wolnych miejsc!</p>
  66.              <p>Prosimy cierpliwie czekać na kolejne terminy</font>';
  67.    }
  68. }
  69. ?>
sowiq
W miejscu gdzie masz:
  1. <?php
  2. else {
  3. // mniej niz 20 - pokazujemy formularz do wyslania
  4. if($licznik <=19 ){
  5. ?>

spróbuj zrobić:
  1. <?php
  2. else {
  3. // mniej niz 20 - pokazujemy formularz do wyslania
  4. if($licznik <=19 ){
  5. echo "zostało ".(20 - $licznik)." miejsc";
  6. ?>
bohema
dziekuje, to byla dobra mysl.
jednak zapisalem to w ten sposob:

  1. <?php
  2. echo 'zostało '.(40 - $licznik).' miejsc';
  3. ?>


chcialbym do formularza dodac opcje "ackeptuje regulamin"
  1. <?php
  2. Akceptuje regulamin: <input type="checkbox" name="akcept" value="regulamin" />
  3. ?>


tylko nie bardzo wiem jak to ze soba powiazac, czy ktos moze pomoc?
dobrym rozwiazaniem rowniez byłaby weryfikacja formularza, sprawdzająca czy wszystkie pola są wypełnione.
Z góry dziekuje za pomoc
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-2024 Invision Power Services, Inc.