» »

[php] Nekaj manjših sprememb pri pošiljanju obrazca

[php] Nekaj manjših sprememb pri pošiljanju obrazca

ZofijaR ::

Živjo!

Pripravljam spletno stran za eno manjše društvo, pa sem naletela na problem, ki ga zaradi pomanjkanja znanja iz php-ja ne znam sama rešiti... Je tukaj kdo, ki bi mi bil pripravljen priskočiti na pomoč? :)

Torej, za pošiljanje spletnega obrazca imam .php datoteko s spodnjo kodo:

<?php
// require ReCaptcha class
require('recaptcha-master/src/autoload.php');

// configure
$from = 'Demo contact form <info@email.com>';
$sendTo = 'Demo contact form <info@email.com>';
$subject = 'Elektronska pristopna izjava: ';
$fields = array('name' => 'Ime in Priimek', 'birthday' => 'Rojstni datum', 'house_adress' => 'Ulica in hišna številka', 'post_adress' => 'Pošta in kraj', 'email' => 'Elektronski naslov', 'phone' => 'GSM številka', 'nickname' => 'Vzdevek na forumu', 'shirt' => 'Velikost majice', 'sticker' => 'Barva nalepke' ); // array variable name => Text to appear in the email
$okMessage = 'Podatki za članstvo so bili uspešno poslani.';
$errorMessage = 'Pri pošiljanju podatkov je prišlo do napake. Poskusi znova kasneje.';
$recaptchaSecret = 'xxx-xxxxxxxxxx_xxxxxxxxxxx_xxxxxxxxxxxxxxJ';

// let's do the sending

try
{
    if (!empty($_POST)) {

        // validate the ReCaptcha, if something is wrong, we throw an Exception, 
        // i.e. code stops executing and goes to catch() block
        
        if (!isset($_POST['g-recaptcha-response'])) {
            throw new \Exception('ReCaptcha is not set.');
        }

        // do not forget to enter your secret key in the config above 
        // from https://www.google.com/recaptcha/admin
        
        $recaptcha = new \ReCaptcha\ReCaptcha($recaptchaSecret, new \ReCaptcha\RequestMethod\CurlPost());
        
        // we validate the ReCaptcha field together with the user's IP address
        
        $response = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);


        if (!$response->isSuccess()) {
            throw new \Exception('ReCaptcha was not validated.');
        }
        
        // everything went well, we can compose the message, as usually
        
        $emailText = "You have new message from contact form\n=============================\n";

        foreach ($_POST as $key => $value) {

            if (isset($fields[$key])) {
                $emailText .= "$fields[$key]: $value\n";
            }
        }
        

        $headers = array('Content-Type: text/plain; charset="UTF-8";',
            'From: ' . $from,
            'Reply-To: ' . $from,
            'Return-Path: ' . $from,
        );

        mail($sendTo, $subject, $emailText, implode("\n", $headers));

        $responseArray = array('type' => 'success', 'message' => $okMessage);
    }
}
catch (\Exception $e)
{
    $responseArray = array('type' => 'danger', 'message' => $errorMessage);
}

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $encoded = json_encode($responseArray);

    header('Content-Type: application/json');

    echo $encoded;
}
else {
    echo $responseArray['message'];
}


Želela bi narediti tri oz. štiri spremembe:

$from = 'Demo contact form <info@email.com>';

Želela bi, da se v prejetem mailu prikaže, kot da je sporočilo poslal tisti, ki je izpolnjeval obrazec na spletni strani - podatek se prebere iz polja 'email'. Torej: Pošiljatelj: janez.novak@email.com

$subject = 'Elektronska pristopna izjava: ';

Tukaj bi želela, da se za obstoječimi besedami doda še ime in priimek pošiljatelja - podatek se prebere iz polja 'name'. Torej: Elektronska pristopna izjava: Janez Novak

$emailText = "You have new message from contact form\n=============================\n";

Tukaj bi želela, da se mi izpišejo vsi podatki iz spletnega obrazca, katerim bi pa želela dodati nekaj HTML oblikovanja, da ne bi sporočilo prispelo samo v plain text formatu. Recimo nekaj takega:

Ime in Priimek: Janez novak
Rojstni datum: 22.04.1987
Ulica in hišna številka: Pod kostanji 37
itn.

Za konec bi pa želela še, da se pod izpolnjenimi podatki izpiše še IP naslov pošiljatelja.

Z nekaj sem sicer poskušala že sama, menda naj bi bilo za klicanje podatkov najbolj preprosto uporabiti $_POST, ampak meni ne uspe, pa se trudim in poskušam že nekaj dni. Na tujih forumih so me že odpikali, češ da je to tako zelo preprosto, da "oni pa že ne bodo pisali kode namesto mene". Jaz pa ne morem, ne znam, ne gre, ne dela... :'( Stran bi pa tudi rada že čimprej končala, saj je to še edino kar mi manjka...

Resnično bom hvaležna za vsako pomoč. Hvala že vnaprej!

Bob Rock ::

Poenostavljeno:

ZofijaR je izjavil:


Želela bi, da se v prejetem mailu prikaže, kot da je sporočilo poslal tisti, ki je izpolnjeval obrazec na spletni strani - podatek se prebere iz polja 'email'.

$from = $_POST['email'];


Tukaj bi želela, da se za obstoječimi besedami doda še ime in priimek pošiljatelja - podatek se prebere iz polja 'name'.

$subject = 'Elektronska pristopna izjava: ' . $_POST['name'];


Tukaj bi želela, da se mi izpišejo vsi podatki iz spletnega obrazca, katerim bi pa želela dodati nekaj HTML oblikovanja, da ne bi sporočilo prispelo samo v plain text formatu. Recimo nekaj takega:

Ime in priimek: <?= $_POST['name'] ?>
itd...


Za konec bi pa želela še, da se pod izpolnjenimi podatki izpiše še IP naslov pošiljatelja.

$_SERVER['REMOTE_ADDR']
___________________________________________________
gance hale ale cuzamen

Zgodovina sprememb…

  • spremenil: Bob Rock ()

ZofijaR ::

Hvala Bob Rock!

Prva dva sta preprosta, tako da mi je to zaenkrat uspelo, tako da deluje in zadevo pošlje naprej.

Pri drugem delu imam še vedno težave, saj mi v ta del kode mi ne uspe uspešno vstaviti tega kar si predlagal.
        
$emailText = "You have new message from contact form\n=============================\n";
 
        foreach ($_POST as $key => $value) {
 
            if (isset($fields[$key])) {
                $emailText .= "$fields[$key]: $value\n";
            }
        }


Najbrž bo potrebno spremeniti tudi vrstico 9?
$fields = array('name' => 'Ime in Priimek', 'birthday' => 'Rojstni datum', 'house_adress' => 'Ulica in hišna številka', 'post_adress' => 'Pošta in kraj', 'email' => 'Elektronski naslov', 'phone' => 'GSM številka', 'nickname' => 'Vzdevek na forumu', 'shirt' => 'Velikost majice', 'sticker' => 'Barva nalepke' ); // array variable name => Text to appear in the email


Hvala za pomoč! :)

matonson ::

V foreach se bere vse podatke iz $_POST array. Kot naziv polja pa uporabjaš array $fields. Zato se $key od fields mora ujemati s $key od $_POST. Če imava naslednji obrazec:

<form name="obrazec" action="sendmail.php" method="post">
Ime in priimek: <input type="text" name="ime_in_priimek"><br>
Naslov: <input type="text" name="naslov"><br>
<input type="submit" value="Pošlji">
</form>


Ob kliku na Pošlji se bo preko POST poslal atribut ime_in_priimek ter naslov, ki ga s PHP bereš $_POST["ime_in_priimek] ter $_POST["naslov"]. Prejeti podatki v PHP so torej naslednji:

Array
(
    [ime_in_priimek] => Janez Novak
    [naslov] => Ta in ta naslov
)



Za zgornji primer bi potem $fields array zgledal takole:

$fields = array("ime_in_priimek" => "Ime in priimek", "naslov" => "Naslov");

ZofijaR ::

Matonson, hvala za odgovor, ampak moje prvotno vprašanje je bilo malo drugačno.

Torej, želela bi, da se v prejetem mailu podatki izpišejo kot so se do sedaj z uporabo zgornje kode, vendar bi jim rada dodala še nekaj malega html stylinga, da ne bi vsebina prispela kot plain text.

matonson ::

ZofijaR je izjavil:

Hvala Bob Rock!

Prva dva sta preprosta, tako da mi je to zaenkrat uspelo, tako da deluje in zadevo pošlje naprej.

Pri drugem delu imam še vedno težave, saj mi v ta del kode mi ne uspe uspešno vstaviti tega kar si predlagal.
 
$emailText = "You have new message from contact form\n=============================\n";

foreach ($_POST as $key => $value) {

if (isset($fields[$key])) {
$emailText .= "$fields[$key]: $value\n";
}
}


Najbrž bo potrebno spremeniti tudi vrstico 9?
$fields = array('name' => 'Ime in Priimek', 'birthday' => 'Rojstni datum', 'house_adress' => 'Ulica in hišna številka', 'post_adress' => 'Pošta in kraj', 'email' => 'Elektronski naslov', 'phone' => 'GSM številka', 'nickname' => 'Vzdevek na forumu', 'shirt' => 'Velikost majice', 'sticker' => 'Barva nalepke' ); // array variable name => Text to appear in the email


Hvala za pomoč! :)


Odgovoril sem na zgornje.

Bob Rock ::

Nisem dobro pogledal prvotne kode, pa sem malo narobe predlagal :)
To, kar imas tu, ze sedaj lahko oblikujes v stringu samem.
Npr. za primer ki si ga dala:
foreach ($_POST as $key => $value) {
  
            if (isset($fields[$key])) {
                $emailText .= "<b>$fields[$key]:</b> $value\n";
            }
        }
___________________________________________________
gance hale ale cuzamen

Zgodovina sprememb…

  • spremenil: Bob Rock ()

ZofijaR ::

Nekaj sem vmes poskušala sama, z rešitvami, ki sem jih našla na netu. Koda seveda ne deluje... Bi lahko prosim kdo pogledal, mogoče najde napako?

<?php
// require ReCaptcha class
require('recaptcha-master/src/autoload.php');

// configure
$from = $_POST['name'] . '<izjava@email.com>';
$reply = $_POST['email'];
$sendTo = 'Demo contact form <info@email.com>';
$subject = 'Elektronska pristopna izjava: ' . $_POST['name'];
// variable names - text to appear in the email
$name = $_POST['name'];
$birthday = $_POST['birthday'];
$house = $_POST['house_adress'];
$postnr = $_POST['post_adress'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$nickname = $_POST['nickname'];
$shirt = $_POST['shirt'];
$sticker = $_POST['sticker'];
$ipAddress = $_SERVER['REMOTE_ADDR'];
$okMessage = 'Podatki o članu so bili uspešno poslani.';
$errorMessage = 'Pri pošiljanju podatkov je prišlo do napake. Poskusi znova nekoliko kasneje.';
$recaptchaSecret = 'xxx-xxxxxxxxxx_xxxxxxxxx_xxxxxxxxxxxxxx';

// let's do the sending

try
{
    if (!empty($_POST)) {

        // validate the ReCaptcha, if something is wrong, we throw an Exception, 
        // i.e. code stops executing and goes to catch() block
        
        if (!isset($_POST['g-recaptcha-response'])) {
            throw new \Exception('ReCaptcha is not set.');
        }

        // do not forget to enter your secret key in the config above 
        // from https://www.google.com/recaptcha/admin
        
        $recaptcha = new \ReCaptcha\ReCaptcha($recaptchaSecret, new \ReCaptcha\RequestMethod\CurlPost());
        
        // we validate the ReCaptcha field together with the user's IP address
        
        $response = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);


        if (!$response->isSuccess()) {
            throw new \Exception('ReCaptcha was not validated.');
        }
        
        // everything went well, we can compose the message, as usually
        
		$emailText = '<html>
			<body>
				<p style="padding:10px;font-weight:bold">Elektronska pristopna izjava za članstvo v klubu:</p> \n
				<p style="padding:5px;background-color:#ddd">Ime in priimek: <strong>'$name'</strong></p> \n
				<p style="padding:5px;">Datum rojstva: <strong>'$birthday'</strong></p> \n
				<p style="padding:5px;background-color:#ddd">Ulica in hišna številka: <strong>'$house'</strong></p> \n
				<p style="padding:5px;">Pošta in kraj: <strong>'$postnr'</strong></p> \n
				<p style="padding:5px;background-color:#ddd">Elektronski naslov: <strong>'$email'</strong></p> \n
				<p style="padding:5px;">Številka mobilnega telefona: <strong>'$phone'</strong></p> \n
				<p style="padding:5px;background-color:#ddd">Vzdevek na forumu: <strong>'$nickname'</strong></p> \n
				<p style="padding:5px;">Velikost majice: <strong>'$shirt'</strong></p> \n
				<p style="padding:5px;background-color:#ddd">Barva nalepke: <strong>'$sticker'</strong></p> \n
				<br/>
				<hr/>
				<p style="padding: 10px;">IP naslov pošiljatelja: <strong>'$ipAddress'</strong></p>
			</body>
		</html>'

        $headers = array('Content-Type: text/html; charset="UTF-8";',
            'From: ' . $from,
            'Reply-To: ' . $reply,
            'Return-Path: ' . $from,
        );

        mail($sendTo, $subject, $emailText, implode("\n", $headers));

        $responseArray = array('type' => 'success', 'message' => $okMessage);
    }
}
catch (\Exception $e)
{
    $responseArray = array('type' => 'danger', 'message' => $errorMessage);
}

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $encoded = json_encode($responseArray);

    header('Content-Type: application/json');

    echo $encoded;
}
else {
    echo $responseArray['message'];
}

Bob Rock ::

Prva stvar, ki sem jo opazil, je to, da ti manjkajo pike med stringi in spremenljivkami:

Dodati moras npr.
iz
<p style="padding:5px;">Datum rojstva: <strong>'$birthday'</strong></p> \n

v
 <p style="padding:5px;">Datum rojstva: <strong>' . $birthday . '</strong></p> \n


potem pa povej naprej kak error dobis, ce se vedno ne bo delalo
___________________________________________________
gance hale ale cuzamen

ZofijaR ::

Sem uredila. Hvala lepa za pomoč! :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

nadgradnja PHP

Oddelek: Izdelava spletišč
132417 (2006) c3p0
!

Preberi me !

Oddelek: Izdelava spletišč
1443806 (4716) FitnessBoy

Iščem/ponujam delo (strani: 1 2 3 )

Oddelek: Izdelava spletišč
10140189 (28152) Primoz
»

Najboljsa nalozba za prihodnost.

Oddelek: Izdelava spletišč
132531 (2195) edini
»

Vsi ki bi radi vedeli kako se izdela spletna stran v Javi

Oddelek: Izdelava spletišč
72273 (1989) Tody

Več podobnih tem