Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Banalny problem - formularz kontaktowy
Forum PHP.pl > Forum > PHP
tacin
Witam,
w sumie to juz mam caly kodzik z e-mailem z zalacznikiem, ale drazni mnie to, ze jak sie nacisnie "Wyslij" to otwiera sie nowe okno wraz z alertem. Chcialbym aby alert wyswietlil sie na tej stronie co mam formularz, czyli zeby nie wyswietlal nowej strony.

wyslij.php
Kod
     <?php
  
      //sprawdzenie czy załącznik pochodzi z formularza
  
      if ($_POST["wyslij"]==1)
  
         $nazwisko = $_POST["nazwisko"];
  
      
  
      $imie = $_POST["imie"];
  
      
  
      $email = $_POST["email"];
  
      
  
      $tresc= $_POST["tresc"];
  
      {  
  
      srand((double)microtime()*1000000);
  
      $znacznik = md5(uniqid(rand()));
  
      
  
      // dane o odbiorcy, nadawcy
  
      $odbiorca="xxx@gmail.com";
  
      $tytul="CFG-xxx";
  
      $nadawca = "Nadawca";
  
      $nadawca_mail="xxx@xxx.pl";
  
      
  
      // treść listu
  
      $tresclistu = "
  
      Nazwa CFG: $imie

      Nick: $nazwisko
  
      email: $email
  
      Krótki opis CFG: $tresc
  
      
  
      ";
  
      
  
      
  
      // definicja nagłówków
  
       $naglowki  = "From: $nadawca <$nadawca_mail>\n";
  
       $naglowki .= "MIME-Version: 1.0\n";
  
       $naglowki .= "Content-Type: multipart/mixed;\n";
  
       $naglowki .= "\tboundary=\"___$znacznik==\"";
  
      
  
      // nagłówki listu
  
       $tresc="--___$znacznik==\n";
  
       $tresc .="Content-Type: text/plain; charset=\"iso-8859-2\"\n";
  
       $tresc .="Content-Transfer-Encoding: 8bit\n";
  
       $tresc .="\n$tresclistu\n";
  
      
  
      // nagłówki i obsługa załącznika
  
       $plik_nazwa_tmp = $_FILES["plik1"]["tmp_name"];
  
       $plik_nazwa_oryginalna = $_FILES["plik1"]["name"];
  
       $plik_wielkosc = $_FILES["plik1"]["size"];
  
      
  
      if (is_uploaded_file($plik_nazwa_tmp))
  
       {
  
         $tresc .="--___$znacznik==\n";
  
         $tresc .="Content-Type: image/gif\n";
  
         $tresc .="Content-Disposition: attachment;\n";
  
         $tresc .=" filename=\"$plik_nazwa_oryginalna\"\n";
  
         $tresc .="Content-Transfer-Encoding: base64\n\n";
  
         $f = fopen($plik_nazwa_tmp,"rb");
  
         $dane = fread($f,filesize($plik_nazwa_tmp));

         fclose($f);

         $tresc .= chunk_split(base64_encode($dane));

         $tresc .="--___$znacznik==--\n";
  
       }
  
      
  
      // wysłanie listu
  
          if (mail($odbiorca,$tytul,$tresc,$naglowki))
  
        {
  
        print "<script type=\"text/javascript\">window.alert('E-mail z załącznikiem został wysłany poprawnie.');</script>";
  
        }
  
        else
  
        {
  
        print "<script type=\"text/javascript\">window.alert('E-mail NIE został wysłany poprawnie. Spróbuj ponownie.');</script>";
    }
  
      }

      ?>

I na stronie:
Kod
Aby dodać swoje CFG do listy, skorzystaj z poniższego formularza.<br>Po wysłaniu configu do nas, zostanie on umieszczony w naszym spisie.<br><br>

<FORM NAME="zalacznik" METHOD="post" ACTION="wyslij.php" ENCTYPE="multipart/form-data">
      
<table border="0">
  <tr>
    <td>Nazwa CFG:</td>
    <td><input type="text" id="imie" name="imie" CLASS="textbox"></td>
  </tr>
  <tr>
    <td>Nick:</td>
    <td><input type="text" name="nazwisko" id="nazwisko" CLASS="textbox"></td>
  </tr>
  
    <tr>
    <td>Email:</td>
    <td><input type="text" name="email" id="email" CLASS="textbox"></td>
  </tr>
  
    <tr>
    <td>Krótki Opis CFG:</td>
    <td><textarea name="tresc" id="tresc" rows="3" cols="20" CLASS="textbox"></textarea></td>
  </tr>

    <tr>
    <td>Config:</td>
    <td><INPUT type="file" name="plik1" CLASS="textbox"></td>
  </tr>
  
</table>

      <input type="hidden" name="wyslij" value="1" />
  
      <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
      <br>
      <input type="submit" value="Wyślij" CLASS="button">
  
      </FORM>


ktos wie jak rozwiazac moj problem?
aso824
Czyżbyś używał gotowca?
Na szybko - możesz dać zamiast:
Kod
  print "<script type=\"text/javascript\">window.alert('E-mail z załącznikiem został wysłany poprawnie.');</script>";

Dać to:
Kod
print "E-mail z załącznikiem został wysłany poprawnie.";

Musisz podmienić wszędzie, nie tylko tam gdzie pokazałem.
Chyba że nie o to ci chodziło...?
tacin
tez wyswietla sie w nowym oknie...


chodzi mi oto zeby nie otwierala sie nowa strona z alertem, tylko wyskakiwal alert (lub jakies okienko - obojetnie) na tej stronie co jest wyswietlany formularz. jasniej nie moge tego opisac.
aso824
Nie znam się za dobrze na JS, ale zamień wszędzie:
Kod
window.alert

Na:
Kod
alert

Chociaż naprawdę nie wiem dlaczego otwiera się nowe okienko... Wg mnie to jest jedyna instrukcja która mogłaby to spowodować.
tacin
ale to nie jest wina js, tylko php, bo jezeli zamiast calego kodu js wstawie sam tekst, to bedzie taki sam efekt - wczytuje sie nowa, pusta strona z zawartoscia tekstu
aso824
Chodzi ci beż odświeżania strony - na tej samej stronie co formularz ma się pokazać alert?
Jeżeli tak, to pozostaje tylko AJAX (odwoływanie się w tle do skryptu). Niestety, w tej chwili zbytnio AJAX-a nie pamiętam, ale może jak wieczorem znajdę czas to napiszę ci skrypt.
Tym czasem polecam ci Google - tu masz link (z cache google) do artu: Łap!
futura
Zdefiniuj sobie tablice błędów np:

$errors = array();

Potem sprawdzasz kolejno warunki np:

if(nie jest spelniony warunek)
{
$errors[] = "treść błędu!";
}

Potem dajesz warunek np:

if(sizeof($errors) == 0){ echo "Wszystko ok!";} else {echo "Coś nie tak";}

To wszystko wyświetlasz sobie w pętli for (błędy) np:

for($i=0;$i;ilosc_bledow_w_tablicy;$i++)
{
echo $errors[$i];
}

albo foreachem
tacin
Cytat(aso824 @ 8.02.2010, 18:59:35 ) *
Chodzi ci beż odświeżania strony - na tej samej stronie co formularz ma się pokazać alert?
Jeżeli tak, to pozostaje tylko AJAX (odwoływanie się w tle do skryptu). Niestety, w tej chwili zbytnio AJAX-a nie pamiętam, ale może jak wieczorem znajdę czas to napiszę ci skrypt.
Tym czasem polecam ci Google - tu masz link (z cache google) do artu: Łap!


moze byc odswiezanie, ale zeby sie pokazala ta sama strona co wczesniej, tylko zamiast formularza bedzie napisane "wyslano poprawnie". chyba takie cos bedzie latwiejsze do zrobienia, jednak nie wiem jak sie za to zabrac

PS: zle to okreslilem w poprzednich postach - nie "nowe okienko" tylko "nowa pusta strona z napisem ktory dalem w print"
aso824
Z odświeżeniem zamiast formularza...
Albo to jest takie łatwe albo mi się zdaje...
Daj takie coś (tutaj przerabiam kawałek twojego kodu...):
Kod
      // wysłanie listu
print 'Aby dodać swoje CFG do listy, skorzystaj z poniższego formularza.<br>Po wysłaniu configu do nas, zostanie on umieszczony w naszym spisie.<br><br>Wynik: ';
          if (mail($odbiorca,$tytul,$tresc,$naglowki))
  
        {
  
        print '<b><font style="color: green;">Poprawnie wysłano</font></b>';
  
        }
  
        else
  
        {
  
        print '<b><font style="color: red;">Wystąpił błąd podczas wysyłania wiadomości!</font></b>';
    }
  
      }

      ?>

O takie coś chodzi? Efekt: zniknie formularz i zamiast tego będziesz miał wynik.
Czy jeszcze coś innego...?
tacin
nadal otwiera sie nowa strona i jest w niej napisane:

Aby dodać swoje CFG do listy, skorzystaj z poniższego formularza.
Po wysłaniu configu do nas, zostanie on umieszczony w naszym spisie.

Wynik: Poprawnie wysłano



dobrze mnie zrozumiales - zamiast formularzu chce dac napis "poprawnie wyslano", ale nadal jest zle, bo otwiera sie nowa strona.
aso824
Tzn chcesz aby adres w przeglądarce się nie zmieniał (czyli aby nie było przeładowywania strony) ?
Jak tak, to AJAX.
Czy chodzi ci o coś jeszcze innego?
Bo albo ja jestem niekumaty albo faktycznie niejawnie tłumaczysz smile.gif
tacin
smile.gif

chodzi mi o to, ze jak ktos wypelni formularz i nacisnie "wyslij" to zeby otworzyla mu sie taka sama strona i zamiast formularzu byla wiadomosc o powodzeniu.
teraz gdy nacisie sie "wyslij" otwiera sie strona wyslij.php i w niej jest suchy tekst, ktory wpisujemy w print, a wyglada on bardzo nieestetycznie.
altruista2
Pokaż nam źródło tzn. czy plik wyslij.php to jest ten sam z formularzem czy nie, bo to nie jest do końca klarowne.
Jeśli chodzi o takie proste formularze to ja bym postąpił tak:

  1. <?
  2.  
  3. function safe($str) {
  4. return str_replace(Array("\n","<",">"),Array("<br>","&lt;","&gt;"),$str);
  5. }
  6.  
  7. if($_POST['wyslij']) {
  8. $tresc = safe($_POST['tresc']);
  9. $do = safe($_POST['do']);
  10.  
  11. if(mail($do, 'Witamy', $tresc)) {
  12. $out = 'Dane zostaly wyslane.';
  13. $extra = "<script>alert('Ok!');</script>";
  14. }else{
  15. $out = 'Blad danych';
  16. $extra = "<script>alert('Blad przy wysylaniu mejla!');</script>";
  17. }
  18. }else{
  19. $out = 'Wpisz dane';
  20. $extra = '';
  21. }
  22.  
  23.  
  24. echo $out;
  25. ?>
  26. <br>
  27. <form method="post">
  28. <input type=text name=do><br>
  29. <textarea name=tresc></textarea><br>
  30. <input type=submit>
  31. </form>
  32. <?=$extra?>
  33.  
tacin
problem rozwiazany. po prostu dalem zawartosc wyslij.php do tego samego pliku co reszta kodu oraz zminilem parametr zeby nie czytal wyslij.php tylko ta strone co wkleilem kodzik i dziala pieknie smile.gif
dzieki, ze probowaliscie mi pomoc smile.gif

temat do zamkniecia
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.