Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[php] Problem ze zmienną - sprawdzanie wysłania formularza

MES Mariusz 18 Sep 2007 21:53 2107 0
  • #1
    MES Mariusz
    Level 36  
    Witam.

    Na początku używałem formularza z wykorzystaniem funkcji mail();

    Code:

    <?php

    if ($_POST['bt'] == "Wyslij formularz") { /* sprawdzam czy formularz został wysłany */
     if (($_POST['tresc'] != "")) { /* sprawzdam czy każde pole jest wypełnione */
       $send = mail("adres@o2.pl", "Nadesłano uwagę", $_POST['tresc'],"From: www <".$_POST['email'].">");
       if ($send) /* sprawdzam czy wiadomosc została wysłana */
        $message = "<b>Wiadomosć została wysłana";
        else
         $message = "<b>Widomosć nie została wysłana, proszę ponowić próbę";
     } else
        $message = "<b>Aby móc przesłać wiadomosć należy najpierw wpisać ja w biały formularz powyżej.</b>";
    }

    ?>

    <?php if (!$send)

    { ?>

    <p>Jeżeli
    masz fajny pomysł lub uwagę...
    <form action="" method="post">
    <textarea name="tresc" ></textarea><br><br>
    <input type="submit" name="bt" value="Wyslij formularz" />
    </form>

    <?php
    }
    ?>


    <p><?php echo $message ?></p>



    Tutaj funkcją if (!$send) sprawdzałem czy formularz został już wysłany, a jeśli jeszcze nie (i tylko wtedy) to był wyświetlany formularz. Dodatkowo, jeśli nie było wpisanej treści, pod formularzem pojawiało się ostrzeżenie.


    Teraz chcę zrobić to samo tylko z wykorzystaniem phpmailer, i jest problem ze sprawdzaniem czy formularz został wysłany. Chodzi o to, że powyżej były dwa skrypty php - wysłanie formularza uruchamiało pierwszy skrypt, przy czym w drugim skrypcie można było bez problemu jeszcze raz sprawdzić, czy formularz był wysłany, i zależnie od tego wyświetlić pole do wpisywania tekstu bądź nie.

    W przypadku phpmailer (odwoływanie się do zmiennych za pomocą $mail->) robi się problem.


    Skrypt z wykorzystaniem phpmailer wygląda tak:



    Code:

    <?php
    require("class.phpmailer.php");

    if ($_POST['bt'] == "Wyslij formularz") { /* sprawdzam czy formularz został wysłany */
     if (($_POST['tresc'] != "")) { /* sprawzdam czy każde pole jest wypełnione */
       $mail = new PHPMailer();
       $mail->IsSMTP(); // telling the class to use SMTP
       $mail->Host = "poczta.o2.pl";  // specify main and backup server
       $mail->SMTPAuth = true;     // turn on SMTP authentication
       $mail->CharSet  =  'iso-8859-2';
       $mail->Username = 'user'; //SMTP username
       $mail->Password = 'pass'; // SMTP password
       $mail->From = 'adres@o2.pl';
       $mail->FromName ='www';
       $mail->AddAddress("adres2@o2.pl");
       $mail->Subject = "Nadesłano uwagę";
       $mail->Body = $tresc;
       $mail->WordWrap = 50;

      if(!$mail->Send())
      {
         $message = "<b>Widomosć nie została wysłana, proszę ponowić próbę</b>";
      }
      else
      {
         $message = "<b>Wiadomosć została wysłana pomyslnie.";
      }

     } else
        $message = "<b>Aby móc przesłać wiadomosć należy najpierw wpisać ja w biały formularz powyżej.</b>";
    }

    ?>

    <?php if (!$mail->Send())

    { ?>

    <p>Jeżeli
    masz fajny pomysł lub uwagę...<br>
    <form action="" method="post">
    <textarea name="tresc" ></textarea><br><br>
    <input type="submit" name="bt" value="Wyslij formularz" />
    </form>

    <?php
    }
    ?>


    <p><?php echo $message ?></p>


    No i problemem jest funkcja if (!$mail->Send()) w drugim skrypcie (nie idzie się dostać do zmiennej poprzez $mail-> bo jest poza zasięgiem pierwszego skryptu...

    Serwer zwraca komunikat:

    Fatal error: Call to a member function Send() on a non-object in /www/domena/wysylka.php on line 101

    a ja nie mam pomysłu co dalej...


    ----- edit --------

    Rozwiązałem problem stosując if (($_POST['tresc'] == "")). Działa tak samo :-)