Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [html/php] Wysyłanie formularza do dwóch miejsc
Forum PHP.pl > Forum > Przedszkole
mk321
Mam formularz (formularz.php), z którego wpisane dane są wysyłane na mój email:
  1. <form action="formularz.php" method="post">
  2. Pole1: <input type="text" name="Pole1" /> <br>
  3. Pole2: <input type="text" name="Pole2" /> <br>
  4. <input type="submit" value="Wyslij" />
  5. </form>
  6.  
  7. <?php $Po1=$_POST['Pole1'];
  8. $Po2=$_POST['Pole2'];
  9.  
  10. if(!empty($Po1) && !empty($Po2))
  11. {
  12. mail('email@o2.pl', 'Temat', 'Tresc:'."\n".$_POST['Pole1']."\n".$_POST['Pole2']); }
  13. ?>

Ale chcę aby dane z formularza były też wysłane do innego pliku (plik1.php). Więc formularz powinien wyglądać tak:
  1. <form action="plik1.php" method="post">
  2. Pole1: <input type="text" name="Pole1" /> <br>
  3. Pole2: <input type="text" name="Pole2" /> <br>
  4. <input type="submit" value="Wyslij" />
  5. </form>
  6. ...

Obu plików nie da się połączyć, ani nie mogę modyfikować drugiego pliku. Do niego mają być tylko wysłane dane z formularza z tego pliku, ale równocześnie muszą być wysłane do pierwszego pliku.

Czy jest jakiś sposób aby dane wysłać do dwóch miejsc?
A może jest jakaś funkcja w php, która by udawała, że dane są wysyłane z formularza?





Ja wymyśliłem coś takiego: zrobić dwa formularze. Jeden by był normalnie a drugi by był ukryty w
  1. <div style="display: none;">
  2. ...
  3. </div>

I z jednego dane by były wysyłane do formularz.php a z drugiego formularza do plik1.php. Tylko, że na stronie przecież nikt nie będzie wypełniał 2 razy tego samego formularza. Nie dało by się jakoś zrobić, żeby drugi (ukryty) formularz wypełniał się automatycznie danymi z pierwszego?
Kshyhoo
Może tak:
  1. <?
  2. function odbierz($pole) {
  3.  $pole = trim($pole);
  4.  if (get_magic_quotes_gpc()) $pole = stripslashes($pole);
  5.  $pole = str_replace(
  6.    array("&"    , '"'     , "<"   , ">"   , "\", "&#092;"  , "'"),
  7.    array("&", """, "<", ">", ""  , "&#092;", "'" ),
  8.    $pole
  9.  );
  10.  return $pole;
  11. }
  12.  
  13. $Pole1= odbierz($_POST['Pole1']);
  14. $Pole2= odbierz($_POST['Pole2']);
  15.  
  16. if ($Pole1 and $Pole2) {
  17.  echo "Wysłano...";
  18.  mail("email@o2.pl", "temat", "$Pole1- $Pole2");
  19.  echo "
  20.    <form action='formularz.php' method='post' id='x1'><div>
  21.    <input type='text' name='Pole1' value='$Pole1' />
  22.    <input type='text' name='Pole2' value='$Pole2' />
  23.    </div></form>
  24.    <script type='text/javascript'>
  25.    <!-- <![CDATA[
  26.      document.getElementById('x1').submit();
  27.    // ]]> -->
  28.    </script>
  29.  ";
  30. }
  31. ?>


EDIT:
W funkcji sprawdzającej powinno być:
Kod
array("&"    , '"'     , "<"   , ">"   , "\O", "\\"  , "'"), // trzeci znak to \O - "zero"
    array("&amp;", "&quot;", "&lt;", "&gt;", ""  , "\\\\", "\'" ),

Niestety, znaczniki PHP podmieniają znaki...
mk321
Dzięki działa smile.gif

Nie wiem jak skrypt działa i co oznaczają poszczególne funkcje, ale może potem się douczę.

Zmieniłem tylko action='formularz.php' na action='plik1.php' Bo przecież do formularz.php jest już wysyłane z tego normalnego w html'u.

Pozdrawiam i jeszcze raz dzięki smile.gif
Quantum
Jeśli chcesz możesz zrobić to bardziej profesjonalnie używając cURL'a, oczywiście jeśli masz go zainstalowanego na serwerze.

formularz.php

  1. <?php
  2. function sendForm()
  3.    {
  4.        $data = 'Pole1='.$_POST['Pole1'].'&Pole2='.$_POST['Pole2']; //Ustalamy dane do przesłania
  5.        $addr = 'http://adres_twojego_serwera/plik1.php'; //Adres pliku
  6.        
  7.        $c = curl_init();
  8.        curl_setopt($c, CURLOPT_URL, $addr);
  9.        curl_setopt($c, CURL_POST, 1);
  10.        curl_setopt($c, CURLOPT_POSTFIELDS, $data);
  11.        curl_exec($c);
  12.        curl_close($c);
  13.    }
  14.    
  15.    if( $_POST['Pole1'] && $_POST['Pole2'] )
  16.    {
  17.        mail('email@o2.pl', 'Temat', 'Tresc:'.'\n'.$_POST['Pole1'].'\n'.$_POST['Pole2']);
  18.        sendForm(); //odpalamy funkcje ktora wysle te same dane do drugiego pliku
  19.    }
  20. ?>


  1. <form action="" method="POST">
  2. Pole1: <input type="text" name="Pole1" /> <br>
  3. Pole2: <input type="text" name="Pole2" /> <br>
  4. <input type="submit" value="Wyslij" />
  5. </form>
mk321
cURL? Pierwszy raz słyszę o takim czymś... Ale po odwiedzeniu cioci Wikipedii przyznaję, że ciekawe.
Na serwerze zainstalowany raczej nie jest, bo to darmowy typu: yoyo.pl, lua.pl, unl.pl.
A może ktoś zna darmowy serwer który ma To zainstalowane (stronka się dopiero tworzy i wybieram serwer)?
Sposób bardziej profesjonalny kiedyś pewnie się przyda (mam zamiar dłużej tu zagościć smile.gif ).
Quantum
Z darmowych jedynie co mi na myśl przychodzi to http://www.000webhost.com, ale z własnego doświadczenia wiem, że lepiej zainwestować na początek w jakiś tani hosting zamiast używać darmowych.
mk321
Wypróbuję ten hosting. Na razie jednak wolę "mniej profesjonalny" sposób, bo cURL to dla mnie magia haha.gif

A co do sposobu Kshyhoo to przy wysyłaniu formularza pokazuje się ten drugi. I czy by dało się jakoś zmienić aby był niewyświetlany? Próbowałem go objąć w ukrywające div'y (te o których na początku wspominałem) ale wychodzi błąd.
Domyślam się, żeby był automatycznie uzupełniany (bo ten skrypt tak działa?) to musi być widoczny... A może jednak coś da się zrobić?
Kshyhoo
Wytnij ostatnie echo.
Quantum
Cytat
Domyślam się, żeby był automatycznie uzupełniany (bo ten skrypt tak działa?) to musi być widoczny... A może jednak coś da się zrobić?


Uzupełnianie tych pól odbywa się po stronie serwera, a nie przeglądarki.

  1. <?php
  2. [...]
  3.   <input type='text' name='Pole1' value='$Pole1' />
  4.   <input type='text' name='Pole2' value='$Pole2' />
  5. [...]
  6. ?>
mk321
Cytat(Kshyhoo @ 28.06.2009, 10:35:21 ) *
Wytnij ostatnie echo.
Jakoś nie mogę sobie poradzić sad.gif

Po wycięciu echo (w linii 20) pokazuje się błąd (no bo linia zaczyna się od cudzysłowu). Kombinowałem i jakoś nie wychodzi (dla przypomnienia: chcę aby kopia formularza się nie pokazywała).
Kshyhoo
Musisz usunąć całą linię zaczynając od echo a kończąc na ; włącznie ;p
mk321
No to tego się sam domyśliłem (napis Wysłano). Ale mi jeszcze chodzi o ten drugi formularz - żeby się nie pokazywał (co pisałeś o ostatnim echo to było to?).
  1. <?
  2. function odbierz($pole) {
  3. $pole = trim($pole);
  4. if (get_magic_quotes_gpc()) $pole = stripslashes($pole);
  5. $pole = str_replace(
  6.   array("&"    , '"'     , "<"   , ">"   , "\", "&#092;"  , "'"),
  7.   array("&", """, "<", ">", ""  , "&#092;", "'" ),
  8.   $pole
  9. );
  10. return $pole;
  11. }
  12.  
  13. $Pole1= odbierz($_POST['Pole1']);
  14. $Pole2= odbierz($_POST['Pole2']);
  15.  
  16. if ($Pole1 and $Pole2) {
  17. echo "Wysłano...";                   // Tą linię usunąłem
  18. mail("email@o2.pl", "temat", "$Pole1- $Pole2");
  19. echo "                           // Chcę aby to się nie wyświetlało
  20.   <form action='formularz.php' method='post' id='x1'><div>
  21.   <input type='text' name='Pole1' value='$Pole1' />
  22.   <input type='text' name='Pole2' value='$Pole2' />
  23.   </div></form>
  24.   <script type='text/javascript'>
  25.   <!-- <![CDATA[
  26.     document.getElementById('x1').submit();
  27.   // ]]> -->
  28.   </script>
  29. ";
  30. }
  31. ?>
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.