» »

Kako preveriti ali so vnosna polja izpolnjena?

Kako preveriti ali so vnosna polja izpolnjena?

Giller0 ::

Imam preprost obrazec v html, katerega potem ob pritisku na submit button s pomočjo mail.php datoteke, ki sem jo spisal, pošljem na mail(mailto funkcija).

Zanima me, kako bi lahko dosegel, da se ob pritisku na submit button preveri ali so določena vnosna polja izpolnjena in še le nato, v primeru da so izpolnjena, zažene mail.php datoteka in se izvede pošiljanje na email?

Hvala, lp!
Jow..

IceIceBaby ::

Giller0 ::

Hvala!
Jow..

bluefish ::

to lahko narediš tudi v PHP-ju in celo v sami datoteki mail.php
Sem imel sam spisano eno tako skripto, ki sem jo sestavil s pomočjo koščkov najdenih naokoli po netu. Žal pa je disk kjer je bila doletel nepričakovan format in ti je tako ne morem posredovati. Malo poišči naokoli in boš že sestavil kaj pametnega.

Giller0 ::

To, da bi lahko naredil v sami mail.php datoteki, sem se spomnil najprej, ker bi enostavno preverjal dolžine spremenjljivk, vendar si v tem koraku že na novi strani(mail.php) in se mora uporabnik vračati na obrazec.

Najbolj všeč bi mi bilo, da bi bilo narejeno, kot je v večini obrazcev na spletu, da se na trenutni strani(recimo nekje na dnu) izpiše opozorilo, da niso izpolnjena vsa zahtevana polja, polek teh polj pa se pojavi naprimer kakšen klicaj. Vem da v ASP .Net za to obstajajo validatorji, vendar to v tem primeru ne pride v poštev.

Zaenkrat imam narejeno kot je na linku, ki ga je prispeval kst, vendar se opozorilo izpiše v nadležnih pop-up oknih. Problem pri java scriptu pa je tudi, da ima IE po defaultu blokirane te vsebine, kar pa je za dotično stran problem, saj manj izkušeni uporabniki lahko spregledajo opozorilo in ne odblokirajo vsebine. No ja, vekakor je boljše, kot nič :) Bom še delal na tem. Hvala.
Jow..

IceIceBaby ::

Če ti ta JS varjanta ne ustreza išči v googlu "Form validation" in malo pobrskaj za takšno varjanto, ki ti ustreza.

bluefish ::

se bom potrudil in poiskal del tistega obrazca, ki sem ga uporabljal jaz. Sicer res nisem prepričan, če je bilo preverjanje izvedeno v mail.php ali že prej, vendar se je v primeru napačnega ali nepopolnega vnosa opozorilo izpisalo ob vnosnem polju.

Giller0 ::

Se priporočam! :) Hvala!
Jow..

t3hn0 ::

pri phpju je to le en kup if zank (lahk tud kako drugac ce zelis)...

v formu imas recimo polja z imeni "ime", "priimek", "posta", "telefon", ...

za preverjanje pa lahko vse das v eno zanko oz. vec

if(!empty($_POST['ime']) && !empty($_POST['priimek']) && !empty($_POST['posta']) ...) {
// vpisana so vsa obvezna polja
} else {
// manjka vpis v enem ali vecih poljih
}

lahko pa ubistvu uporabis javascript ki ti onemogoci "Poslji" gumb (oz. kakorkoli si dal ime submit gumbu), dokler niso vneseni vsi podatki...kaj takega tudi stric google najde ;)
^.^

Atos ::

JS je sicer do neke mere uporaben, vendar če želiš bullet proof potem moraš validirati s PHP-jem.

To, da bi lahko naredil v sami mail.php datoteki, sem se spomnil najprej, ker bi enostavno preverjal dolžine spremenjljivk, vendar si v tem koraku že na novi strani(mail.php) in se mora uporabnik vračati na obrazec.


Take stvari se ponavadi delajo tako, da pošiljaš podatke za validacijo (v tem primeru _POST[''] spremenljivke) na enako stran. Se pravi še si v mail.php daš v form action='mail.php'. Ko imaš to narejeno potem na začetku strani z enim if stavkom preveriš, če je bil poslan form. Zatem z naslednjim if stavkom preveriš, če so vsa polja zapolnjena. Če so, izvedeš pač stvari, ki jih misliš z vnešenimi podatki in preusmeriš uporabnika na novo stran, drugače izpišeš error.

if ($_POST['ime_form_post_gumba'])
{
  // tu notri pa pride najprej validacija, kot je že nekdo napisal

  if ($_POST['prva_spremenljivka'] && $_POST['druga_spremenljivka'] && ...)
  {
    // vstavi kodo, ki obdela podatke (recimo vstavi v bazo, pošlje mail,...
    // ko obdelaš podatke pa preusmeri uporabnika na stran, kamor želiš s header()
    header("Location: index.php"); // recimo
  }
  else
  {
    // vstavi kodo, ki izpiše problem. Recimo:
    $error = 'Niste izpolnili vseh polj';
  }
}


To imaš pred začetkom strani. V samih poljih pa daš za vrednosti, da ti izpiše _POST[''] spremenljivke (to za primer, če ni vse šlo skozi validacijo). Primer:


<input type="text" name="ime" value="<? echo $_POST['ime']; ?>" /> 



In pa seveda nekje na strani še izpiši error:

if ($error)
{
  echo $error;
}


To je tako na hitro in brez preverjanja če deluje (sicer bi moralo).

Giller0 ::

Najlepša hvala obema, t3hno in Atos! Bom probal tako rešit.
Jow..

bluefish ::

Z zamudo, vendar ti bo morda pomagalo pri nadaljnjem delu. Tole je skripta, ki sem jo uporabljal jaz na eni strani.

<?php

// Change these two variables to meet your needs.

$myemail = 'mail@mail.com';
$subject = 'Feedback from the website';

$op = $_POST[op];

if($op == 'contact')
{
    $name = stripslashes($_POST[name]);
    $email = stripslashes($_POST[email]);
    $text = stripslashes($_POST[text]);
    $referer = $_POST[referer];
    $remote_host = $_SERVER[REMOTE_ADDR];
    $server = $_SERVER[SERVER_NAME];
    $browser = $_SERVER[HTTP_USER_AGENT];

    if(!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$",$email)) 
    { 
        $status = "We're sorry, but you've entered an incorrect email address.<br>";
    }
    if(!$name)
    {
        $status .= "Please enter your name.<br>";
    }
    if(!$text)
    {
        $status .= "Please enter a message.<br>";
    }

    if(!$status)
    {
        $header = "From: $emailrnReply-To: $emailrn";

        $message = "
            Name: $name
			Mail: $email
            Referer: $referer
            Site: $server
            Remote Host: $remote_host
            Remote Browser: $browser

            $text
        ";

        if(mail($myemail, $subject, $message, $header))
        {
            $status = "Thank you for your Feedback!<br>";
        }
        else
        {
            $status = "There was a problem sending your feedback, please try again later.<br>";
        }

    }
    else
    {
        $status .= "<br>Please press back on your browser to resubmit.<br>";
    }
}    

// Now check the referer page and ensure it's a proper URL

$referer = $_SERVER[HTTP_REFERER];

if(!preg_match('#^http\:\/\/[a-z0-9-]+.([a-z0-9-]+.)?[a-z]+#i', $referer))
{
    unset($referer);
}

?>

<?php print $status; ?>

<form style="text-align: center;" method="post" action="<?php print $_SELF; ?>">
<input type="hidden" name="op" value="contact">
<input type="hidden" name="referer" value="<?php print $referer; ?>">
Name:<br>
<input class="form_fields1" name="name" size="35" style="width: 190px;" value="">
<br>
e-mail:
<br>
<input class="form_fields1" name="email" size="35" style="width: 190px;" value="">
<br>
Message:<br>
<textarea class="form_fields2" name="text" cols="26" style="width: 220px;" rows="8"></textarea>
<p />
<input type="submit" value="Submit">
</form>


Vredno ogleda ...

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

[PHP][HTML]Pošiljanje maila iz PHP - TextBoxForm, SubmitButton, mail() v php

Oddelek: Programiranje
10758 (494) Excavator
»

PHP mail - problem

Oddelek: Izdelava spletišč
131425 (1213) carota
»

Magento - Sistem ne pošilja email-ov

Oddelek: Izdelava spletišč
9941 (760) BlueBerry
»

Kontaktni obrazec

Oddelek: Izdelava spletišč
81576 (1414) leonkozar
»

[php] mail() funkcija

Oddelek: Izdelava spletišč
61639 (1587) t3hn0

Več podobnih tem