Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem ze skryptem od formularza
Forum PHP.pl > Forum > PHP
Xtremex
Witam wszystkich smile.gif
Jestem początkującym w dziedzinie jakiego kolwiek programowania i nie dałem sobie rady z przerobieniem skryptu.
Chodzi mi mianowicie o ten skrypt:
  1. <?php
  2. if (count($_POST))
  3. {
  4.    ////////// USTAWIENIA //////////
  5.    $email = '';    // E-mail adresata
  6.    $subject = '';    // Temat maila
  7.    $message = '';    // Komunikat
  8.    $error = '';    // Komunikat bledu
  9.    $charset = 'iso-8859-2';    // Strona kodowa
  10.    //////////////////////////////
  11.    
  12.    $head =
  13.        "MIME-Versio: 1.0r\n" .
  14.        "Content-Typ: text/plain; charset=$charsetr\n" .
  15.        "Content-Transfer-Encodin: 8bit";
  16.    $body = '';
  17.    foreach ($_POST as $name => $value)
  18.    {
  19.        if (is_array($value))
  20.        {
  21.            for ($i = 0; $i < count($value); $i++)
  22.            {
  23.                $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value[$i])&nbsp: $value[$i]) . "r\n";
  24.            }
  25.        }
  26.        else $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value)&nbsp: $value) . "r\n";
  27.    }
  28.    echo mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head) ? $message $error;
  29. }
  30. else
  31. {
  32. ?>

Skrypt działa tak:
-ktoś uzupełnia formularz i klika submit
-wysyła się formularz na maila, wczytuje się strona, na której był formularz i wyskakuje komunikat

Mój dylemat:
Jak przerobić ten skrypt, aby po wysłaniu formularza (po kliknięciu submit) pokazywała się inna stronka?
Mówiąc inaczej, co zrobić aby po naciśnięciu submit, przeglądarka ODRAZU przechodziła na inną podstronę?

Jeśli to w ogóle możliwe (chociaż wątpie, że nie) to proszę o pomoc.
Z góry serdecznie dziękuję...



Pozdrawiam
Xtremex
Exek
przeczytaj http://pl.php.net/header w przykładzie masz ładnie napisane.
Xtremex
Niestety wyskakują mi przeróżne błędy... Czy mógłbyś wstawić to w skrypt, który podałem wyżej?


Pozdrawiam
Xtremex
Exek
Przykro mi, wolę dawać wędkę tongue.gif.

No a jakie to "przeróżne błędy" wyskakują? Bo mój pajęczy zmysł mówi, że może przeczytałeś, ale nie chcesz zrozumieć tongue.gif
Xtremex
Niestety tak jak mówiłem - jestem początkujący i prawie nie programuje w php (bez reklamy żywca proszę winksmiley.jpg). Więc bardzo proszę kogoś, aby wstawił mi header w skrypt, który podałem, bo niestety kiedy ja to robię to albo nie ma efektu, albo też nie ma efektu + błędy...

Z góry dziękuję
Cysiaczek
Dlaczego nie chcesz podać komunikatów błędów? Podaj je i pokaż jak modyfikujesz ten skrypt.
Xtremex
  1. <?php
  2. if (count($_POST))
  3. {
  4.   ////////// USTAWIENIA //////////
  5.   $email = '';    // E-mail adresata
  6.   $subject = '';    // Temat maila
  7.   $message = '';    // Komunikat
  8.   $error = '';    // Komunikat bledu
  9.   $charset = 'iso-8859-2';    // Strona kodowa
  10.   //////////////////////////////
  11.  
  12.   $head =
  13.       "MIME-Versio: 1.0r\n" .
  14.       "Content-T: text/plain; charset=$charsetr\n" .
  15.       "Content-Transfer-Encod: 8bit";
  16.   $body = '';
  17.   foreach ($_POST as $name => $value)
  18.   {
  19.       if (is_array($value))
  20.       {
  21.           for ($i = 0; $i < count($value); $i++)
  22.           {
  23.               $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value[$i]) $value[$i]) . "r\n";
  24.           }
  25.       }
  26.       else $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value) $value) . "r\n";
  27.   }
  28.   echo mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head) ? $message $error;
  29. }
  30. else
  31. header('Locatio: Strona którą ma podmienić');
  32. header('Locatio: Strona podmieniona');
  33. {
  34. ?>
Exek
te headery to daj od razu po funkcji wysyłającej maila.

Po header('...'); najlepiej jeszcze od razu dać exit;

Przy mail wywal echo i " ? $message : $error"
Xtremex
Obecnie mam tak:
  1. <?php
  2. if (count($_POST))
  3. {
  4.  ////////// USTAWIENIA //////////
  5.  $email = '';    // E-mail adresata
  6.  $subject = '';    // Temat maila
  7.  $message = '';    // Komunikat
  8.  $error = '';    // Komunikat bledu
  9.  $charset = 'iso-8859-2';    // Strona kodowa
  10.  //////////////////////////////
  11.  
  12.  $head =
  13.      "MIME-Versio: 1.0r\n" .
  14.      "Conte: text/plain; charset=$charsetr\n" .
  15.      "Content-Transfer-Enco: 8bit";
  16.  $body = '';
  17.  foreach ($_POST as $name => $value)
  18.  {
  19.      if (is_array($value))
  20.      {
  21.          for ($i = 0; $i < count($value); $i++)
  22.          {
  23.              $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value[$i]) $value[$i]) . "r\n";
  24.          }
  25.      }
  26.      else $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value) $value) . "r\n";
  27.  }
  28.  mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head);
  29.  header('Locatio: Strona którą ma podmienić');
  30.  header('Locatio: Strona podmieniona');
  31.  exit;
  32. }
  33. else
  34. {
  35. ?>

Ale kiedy klikam submit, to pojawia się ta sama stronka tyle, że bez formularza i error:
Kod
Warning: Cannot modify header information - headers already sent by (output started at /var/www/sites/yoyo.pl/d/e/demon--team/index.php:7) in /var/www/sites/yoyo.pl/d/e/./index.php on line 631
Warning: Cannot modify header information - headers already sent by (output started at /var/www/sites/yoyo.pl/d/e/demon--team/index.php:7) in /var/www/sites/yoyo.pl/d/e/./index.php on line 632


PS. Nie wiem czemu, ale tutaj kiedy wpisuje "Location" wychodzi "Locatio", więc o nie tutaj błąd tongue.gif
akurczyk
po błądaqch można się dowiedzieć że nie pokazałeś całego skryptu wywal <html><head>...smile.gif
polecał bym zrobić coś takiego:
  1. <?php
  2. if(!isset($_POST['wyslij'])) {
  3.    echo "<form method=\"post\">";
  4.    echo "<table width=\"100%\">";
  5.    echo "<tr>";
  6.    echo "<td align=\"right\">";
  7.    echo "E-mail:";
  8.    echo "</td>";
  9.    echo "<td width=\"100%\">";
  10.    echo "<input type=\"text\" name=\"email\" style=\"widt: 100%;\">";
  11.    echo "</td>";
  12.    echo "</tr>";
  13.    echo "<tr>";
  14.    echo "<td align=\"right\">";
  15.    echo "Treś:";
  16.    echo "</td>";
  17.    echo "<td width=\"100%\">";
  18.    echo "<textarea name=\"tresc\" style=\"widt: 100%; heigh: 200px;\"></textarea>";
  19.    echo "</td>";
  20.    echo "</tr>";
  21.    echo "<tr>";
  22.    echo "<td>";
  23.    echo "</td>";
  24.    echo "<td>";
  25.    echo "<input type=\"submit\" name=\"wyslij\" value=\"Wyślij\">";
  26.    echo "</td>";
  27.    echo "</tr>";
  28.    echo "</table>";
  29.    echo "</td>";
  30.    echo "</tr>";
  31.    echo "</table>";
  32. } elseif(empty($_POST['email']) || empty($_POST['temat']) || empty($_POST['tresc'])) {
  33.    echo "Wszystkie pola muszą być wypełnione!";
  34. } else {
  35.    mail("twoj@mail.pl", "Wiadomość ze strony WWW", addslashes($_POST['tresc']), "Fro: {$_POST['email']}r\nContent-Typ: text/plain; charset=iso-8859-2");
  36.    echo "Wiadomość została wysłana!";
  37. }
  38. ?>
Xtremex
Pokazałem cał skrypt. Te błędy były właśnie na headerach. Nie wiem co teraz mam robić, a nad twoim skryptem się zastanowię, lecz wolałbym ten, co ja podałem.
Exek
@Xtremex
linia 1: widzę niepotrzebny enter, niech skrypt zaczyna się od razu od <?php

@akurczyk

litości, lepiej zastosować alternatywną składnię ifa:
Kod
<?php if (isset($_POST['submit'])): ?>
  <form method="post">
  <table width="100%">
  <tr>
  <td align="right">
  ...
<?php endif ?>
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.