Jump to content
php.lv forumi

Form


supernal

Recommended Posts

Labdien! Atvainojos, ka lieku pie html sadaļas (lai gan ar to arī ir saistība), bet pie php sadaļas es nevaru ievietot rakstu.

 

Tātad runa iet par kontaktformu. Pašreizējā forma strādā tīri labi, bet vēlētos viņu tā teikt optimizēt, bet ar manām php zināšanām ir par īsu, lai gan esmu izbūries caur daudzām pamācībām, tomēr neiet no rokas tā kodu savienošana, tāpēc lūdzu jūsu palīdzību, un jau iepriekš saku paldies par to!

 

Principā ir divas lietas, kuras vēlos uzlabot:

 

1) Vēlētos, lai pēc forma nosūtīšanas (nospiežot submit), netiktu aiziets uz jaunu lapu, bet paliktu tajā pašā, varētu lapa tikai refrešoties, bet bez refresh būtu vēl skaistāk. Zinu, ka jāmaina laikam kaut kas pie action, bet gribu, lai php kods tomēr ir atsevišķā failā...

 

2) Kļūdu izvadīšana. Pašlaik to esmu atrisinājis ar javascript, jo nemācēju pievienot nosacījumus iekš php. Un labāk būtu, ja neizmestu error lodziņu ar tekstu, bet virs formas izvadītu attiecīgu paziņojumu, cik saprotu to varētu izdarīt šādi (html`ā virs formas ieliekot php rindiņas):

<?php if(!empty($error)) echo '<div class="error">'.$error.'</div>'; ?>
<?php if(!empty($accept)) echo '<div class="accept">'.$accept.'</div>'; ?>

php failā tikai jādefinē tas errors un accept`s. Labāk jau būtu, ja erroru izvadītu zem katra lauka, ja tas ir tukšs vai neatbilst kritērijam.

 

Tikai, arī, ko es pat tajā javascript kodā nemācēju noteikt, to, ka formu nesūta netikai tad kad ir tukši lauki, bet arī tad, ja nav valīds e-pasts, nesatur atļautos vai satur neatļautos simbolus (. @ / utt.)

 

Lūk send_contact.php

<META HTTP-EQUIV="refresh" CONTENT="5;url_atpakal">
<?php
// Contact subject
$subject ="$subject";
// text
$message="$detail";

// email
$mail_from="$email";
// From
$header="from:$name <$mail_from>";

// recievers email
$to ='mans_epasts';

$send_contact=mail($to,$subject,$message,$header);

// Check, if message sent to your email
// display message "Vestule nosutita...."
if($send_contact){
echo "Vestule nosutita, jus atgriezisieties atpakal pec 5 sekundem. Paldies!";
}
else {
echo "ERROR";
}
?>

 

Un contact.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>forma</title>


<script type="text/javascript">
function validate_required(field,alerttxt)
{
with (field)
 {
 if (value==null||value=="")
   {
   alert(alerttxt);return false;
   }
 else
   {
   return true;
   }
 }

}
function validate_form(thisform)
{
with (thisform)
 {
 if (validate_required(name,"You must fill in all fields!")==false)
 {name.focus();return false;}
 }
 with (thisform)
 {
 if (validate_required(email,"You must fill in all fields")==false)
 {email.focus();return false;}
 }
 with (thisform)
 {
 if (validate_required(web,"You must fill in all fields")==false)
 {web.focus();return false;}
 }
 with (thisform)
 {
 if (validate_required(detail,"You must fill in all fields")==false)
 {detail.focus();return false;}
 }
}


</script>

<style type="text/css">
input, textarea { 
padding: 9px;
border: solid 1px #E5E5E5;
outline: 0;
font: normal 13px/100% Verdana, Tahoma, sans-serif;
width: 200px;
background: -webkit-gradient(linear, left top, left 25, from(#FFFFFF), color-stop(4%, #EEEEEE), to(#FFFFFF));
background: -moz-linear-gradient(top, #FFFFFF, #EEEEEE 1px, #FFFFFF 25px);
}

textarea { 
width: 400px;
max-width: 400px;
height: 150px;
line-height: 150%;
}

input:hover, textarea:hover,
input:focus, textarea:focus { 
border-color: #C9C9C9; 
-webkit-box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 8px;
}

.form label { 
margin-left: 10px; 
color: #999999; 
}

.submit input {
width: auto;
padding: 9px 15px;
background: black;
border: 0;
font-size: 12px;
color: white;
}
.form{
margin-left:170px;
padding-top:30px;
padding-bottom:100px;
}
.name{
padding-bottom:5px;
}
.web{
padding-bottom:5px;
}
.email{
padding-bottom:5px;
}
.text{
padding-bottom:5px;
}
</style>
</head>
<body>
   <div id="wrap">

<form class="form" name="form1" method="post" onsubmit="return validate_form(this);" action="send_contact.php">

<p class="name">
	<input type="text" name="name" id="name" />
	<label for="name">Name</label>
</p>

<p class="email">
	<input type="text" name="email" id="email" />
	<label for="email">E-mail</label>
</p>

<p class="web">
	<input type="text" name="subject" id="subject" />
	<label for="subject">Subject</label>
</p>

<p class="text">

	<textarea name="detail" id="detail" type="text" ></textarea>
</p>

<p class="submit">
	<input type="submit" value="Send" />
</p>

</form>

</div>


</body>
</html>

Link to comment
Share on other sites

1.

Ar refresh:

<?php require("fails_kurs_ieceko_vai_ir_dati nosutiti_un_ja_ir_tad_kaut_ko_izdara_ar_viniem.php"); ?>

<form action="" method="post">
...
</form>

 

Bez refresh:

AJAX

 

2. Neredzu kļūdu tavā kodā un nesapratu jautājumu.

 

3.(?) Epastu vari validēt šādi:

function is_valid_email($email) {
 $result = TRUE;
 if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) {
   $result = FALSE;
 }
 return $result;
}
echo is_valid_email('huaha@brr').'<br />';
echo is_valid_email('huahabrr').'<br />';
echo is_valid_email('huahabrr.lv').'<br />';
echo is_valid_email('[email protected]').'<br />';

if(is_valid_email('[email protected]')) {
 echo 'I <3 NY - True';
} else {
 echo 'I H8 NY - False';
}

Edited by m8t
Link to comment
Share on other sites

Atbildot uz m8t komentāru...

 

Nu pašlaik ir tā, ka, ja logs nav aizpildīts, spiežot submit uz ekrāna izlec logs (tāds kā error logs, kā piemērs), kurā rakstīts: "Aizpildiet visus laukus"

 

Tā vietā es gribētu, lai virs pašas kontakt formas vai zem attiecīgā lauka (name, e-mail, subject vai text) izvada rindiņu ar tekstu: "Lūdzu aizpildiet lauku"

 

P.S. Un kur tieši likt man to e-mail validāciju? php failā kkur? Tieši tas man sagādā tās problēmas, ka arī nezinu kurā vietā to visu iestarpināt...

Edited by supernal
Link to comment
Share on other sites

@supernal

Iekš send_contact.php zem

<?php

Ieliec

function is_valid_email($email) {
 $result = TRUE;
 if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) {
   $result = FALSE;
 }
 return $result;
}

if(!is_valid_email($email)) {
 echo 'Šis nav valīds epasts. Ej atpakaļ un mēģini vēlreiz...';
}

 

Or, ja turpmāk neizmantosi to funkciju un tas tev bija vajadzīgs tikai tajā konkrētajā vietā un viss - vari optimizēt uz...

if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$",$email)) {
 echo 'Šis nav valīds epasts. Ej atpakaļ un mēģini vēlreiz...';
}

 

 

Par tiem lodziņiem...

Ar JQuery ir ļoti vienkārši labot konkrētas kastes saturu. Viss ko tev vajag ir to tekstu, kas tev pašlaik iznāk kā alert iemest kādas kastes saturā un viss. Tur gan es tev nepalīdzēšu. Cīnies pats, vairāk apgūsi ;)

Vairāk: http://api.jquery.com/html/

Link to comment
Share on other sites

Ahāā.. filter_var() izteiksmēm... *facepalm* filter_var() derēs tikai dažām lietām. Es saku, ka eregi() ir novecojis un "deprecated", tāpēc izteiksmēm ir jāizmanto preg_match()! Hello, world! =/

Link to comment
Share on other sites

e-pasta validācija darbojas, bet.. Joprojam parmet uz jaunu lapu un ja pat ievada validu e-pastu, tālāk netiek nosūtīts e-pasts...

 

Un varbūt līdzīgā veidā kā valīdē e-pastu, varētu turpat validēt, lai pārējie lauki vnk nav tukši? Lai nebūtu tas javascript jāizmanto...

 

Labotais kods:

 

<?php
function is_valid_email($email) {
 $result = TRUE;
 if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) {
   $result = FALSE;
 }
 return $result;
}

if(!is_valid_email($email)) {
 echo 'Šis nav valīds epasts. Ej atpakaļ un mēģini vēlreiz...';
}
// Contact subject
$subject ="$subject";
// text
$message="$detail";

// email
$mail_from="$email";
// From
$header="from:$name <$mail_from>";

// recievers email
$to ='epasts';

$send_contact=mail($to,$subject,$message,$header);

// Check, if message sent to your email
// display message "Vestule nosutita...."
if($send_contact){
echo "Vestule nosutita, jus atgriezisieties atpakal pec 5 sekundem. Paldies!";
}
else {
echo "ERROR";
}

 

Html:

<body>
   <div id="wrap">
<?php require("send_contact.php"); ?>
<form class="form" name="form1" method="post" onsubmit="return validate_form(this);" action="send_contact.php">

<p class="name">
	<input type="text" name="name" id="name" />
	<label for="name">Name</label>
</p>

<p class="email">
	<input type="text" name="email" id="email" />
	<label for="email">E-mail</label>
</p>

<p class="web">
	<input type="text" name="subject" id="subject" />
	<label for="subject">Subject</label>
</p>

<p class="text">

	<textarea name="detail" id="detail" type="text" ></textarea>
</p>

<p class="submit">
	<input type="submit" value="Send" />
</p>

</form>

</div>


</body>
</html>

 

Ja no action izņem send_contact.php tad lapa tikai uztaisa refresh un nekadu paziņojumu neizvada :(

Link to comment
Share on other sites

[..] tālāk netiek nosūtīts e-pasts...

Sūti e-pastu ar SMTP tad. Pa-google'ē to.

 

Ja no action izņem send_contact.php tad lapa tikai uztaisa refresh un nekadu paziņojumu neizvada :(

Pārlasi vēlreiz #2 1. punktu. Tajā koda gabalā ir arī kaut kas cits, ko tu aizmirsi...

 

[..] varētu turpat validēt, lai pārējie lauki vnk nav tukši [..]

Izmanto funkciju empty(). T.i. -

if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['etcetc'])) {
 //tavs kods te, kur tu suti to epastu
}

 

ps. - pievieno šo (sk. zemāk) zem tā php čekinga. Iespējams, ka tādēļ nevarēji nosūtīt to epastu.

$name = $_POST['name'];
$email = $_POST['email'];
$email = $_POST['subject'];
$email = $_POST['detail'];

Link to comment
Share on other sites

Tiko pamanīju, DG uzkundzējies par "sētnieku", apsveicami. :)

 

 

Paldies. xD /daGrevis/

Edited by daGrevis
Link to comment
Share on other sites

Pārlasi vēlreiz #2 1. punktu. Tajā koda gabalā ir arī kaut kas cits, ko tu aizmirsi...

 

Pārlasīju, neatradu, ko esmu aizmirsis?? Ja no action="send_contact.php" izņem send_contact.php tad viss, ko lapa izdara pēc nosūtīšanas - refrešojas...

 

send_contact.php tagad izskatās tā:

<?php
function is_valid_email($email) {
 $result = TRUE;
 if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) {
   $result = FALSE;
 }
 return $result;
}

if(!is_valid_email($email)) {
 echo 'Ðis nav valîds epasts. Ej atpakaï un mçìini vçlreiz...';
}
if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['subject'])) {
$send_contact=mail($to,$subject,$message,$header);
}

$name = $_POST['name'];
$email = $_POST['email'];
$email = $_POST['subject'];
$email = $_POST['detail'];

// Contact subject
$subject ="$subject";
// text
$message="$detail";

// email
$mail_from="$email";
// From
$header="from:$name <$mail_from>";

// recievers email
$to ='MANS_E-PASTS';

$send_contact=mail($to,$subject,$message,$header);

// Check, if message sent to your email
// display message "Vestule nosutita...."
if($send_contact){
echo "Vestule nosutita, jus atgriezisieties atpakal pec 5 sekundem. Paldies!";
}
else {
echo "ERROR";
}
?>

 

Izņēmu arī no html to javascript, kas iepriekš pārbaudija tukšos laukus, un tagad formu sūtu vienalga kādu, tukšu vai pilnu... Ja nav valīds e-pasts, tad izvada paziņojumu, ka e-pasts nav valīds, bet tik un tā to nosūta.

 

Ar tukšajiem laukiem arī nekas nenotika, tur trūkst izvades teksts un lai nesūta ja lauki ir tukši. No tagadeja koda sanāk, ka ja lauki ir tukši, lai sūta...

 

Iet kā pa akmeņiem ar to php. :(

Link to comment
Share on other sites

Pārlasīju, neatradu

Labi, vēlreiz rādu visu kodu un mazliet izcelšu to, kas tev bija jāpamana...

[size="7"]<?php require("fails_kurs_ieceko_vai_ir_dati nosutiti_un_ja_ir_tad_kaut_ko_izdara_ar_viniem.php"); ?>[/size]

<form action="" method="post">
...
</form>

 

tagad formu sūtu vienalga kādu, tukšu vai pilnu

Man šķiet, ka es tev teicu, ka tajā čekingā ir jāietver viss tavs kods... Tavā gadījumā, kaut vai, sāc čekingu uzreiz pēc "<?php" un noslēdz tieši pirms "?>"

 

Ja nav valīds e-pasts, tad izvada paziņojumu, ka e-pasts nav valīds, bet tik un tā to nosūta.

Mana kļūda, liku tev izmantot echo, vajadzēja ar die(). T.i. - die('tavs teksts');

 

Ar tukšajiem laukiem arī nekas nenotika, tur trūkst izvades teksts un lai nesūta ja lauki ir tukši. No tagadeja koda sanāk, ka ja lauki ir tukši, lai sūta...

Mana vecmāte cep pankūkas un koka galotnē zaķis lec pa kūti. Galīgi nesapratu, ko tu gribi man ar to pateikt.

Link to comment
Share on other sites

Mana vecmāte cep pankūkas un koka galotnē zaķis lec pa kūti. Galīgi nesapratu, ko tu gribi man ar to pateikt.

Vēlējos pateikt to, ka ja tie lauki ir tukši, e-pastu tāpat nosūta, lai gan ieliku to kodu:

if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['subject'])) {
$send_contact=mail($to,$subject,$message,$header);
}

 

Runājot par:

[size="7"]<?php require("fails_kurs_ieceko_vai_ir_dati nosutiti_un_ja_ir_tad_kaut_ko_izdara_ar_viniem.php"); ?>[/size]

 

Sanāk ka tas fails, kurš tur jāliek nav send_contact.php? Ja tā, tad esmu galīgi sajucis.

 

Tagad izlaboju send_contact.php un viss ok, e-pastu pārbauda un ja nav valīds tad nesūta un izvada paziņojumu.

<?php
function is_valid_email($email) {
 $result = TRUE;
 if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) {
   $result = FALSE;
 }
 return $result;
}

if(!is_valid_email($email)) {
 die('Ðis nav valîds epasts. Ej atpakaï un mçìini vçlreiz...');
}
if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['subject']) && !empty($_POST['detail'])) {
$send_contact=mail($to,$subject,$message,$header);
}

$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['detail'];

// Contact subject
$subject ="$subject";
// text
$message="$detail";

// email
$mail_from="$email";
// From
$header="from:$name <$mail_from>";

// recievers email
$to ='mans_pasts';

$send_contact=mail($to,$subject,$message,$header);

// Check, if message sent to your email
// display message "Vestule nosutita...."
if($send_contact){
echo "Vestule nosutita, jus atgriezisieties atpakal pec 5 sekundem. Paldies!";
}
else {
echo "ERROR";
}
?>

 

Palicis tas, lai pārbauda tukšos laukus un tālāk nesūta, ja ir tukši. Un vēl par to, lai nosūtot e-pastu naizmet uz jaunu lapu, bet izvada paziņojumus tajā pašā lapā...

Edited by supernal
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...