Formularz 2 pola nie obowiązkowe

Witam,

Posiadam formularz (nie robiłem go samemu) w którym wszystkie pola są obowiązkowe, ale potrzebuję zrobić żeby imię i nazwisko oraz email były nieobowiązkowe. Oto strona http://hacjendadziwnow.pl/kontakt.php

Mógłby ktoś pomóc?

Tutaj jest kod .js

//forms

;(function($){

	$.fn.forms=function(o){

		return this.each(function(){

			var th=$(this)

				,_=th.data('forms')||{

					errorCl:'error',

					emptyCl:'empty',

					invalidCl:'invalid',

					notRequiredCl:'notRequired',

					successCl:'success',

					successShow:'4000',

					mailHandlerURL:'wyslij.php',					

					stripHTML:true,

					smtpMailServer:'localhost',

					targets:'input,textarea',

					controls:'a[data-type=reset],a[data-type=submit]',

					validate:true,

					rx:{

						".state":{rx:/^[a-zA-Z'][a-zA-Z-']+[a-zA-Z']?$/,target:'input'},

						".email":{rx:/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i,target:'input'},

						".phone":{rx:/^\+?(\d[\d\-\+\(\)]{5,}\d$)/,target:'input'},

						".fax":{rx:/^\+?(\d[\d\-\+\(\)]{5,}\d$)/,target:'input'},

						".message":{rx:/.{20}/,target:'textarea'}

					},

					preFu:function(){

						_.labels.each(function(){

							var label=$(this),

								inp=$(_.targets,this),

								defVal=inp.val(),

								trueVal=(function(){

											var tmp=inp.is('input')?(tmp=label.html().match(/value=['"](.+?)['"].+/),!!tmp&&!!tmp[1]&&tmp[1]):inp.html()

											return defVal==''?defVal:tmp

										})()

							trueVal!=defVal

								&&inp.val(defVal=trueVal||defVal)

							label.data({defVal:defVal})								

							inp

								.bind('focus',function(){

									inp.val()==defVal

										&&(inp.val(''),_.hideEmptyFu(label),label.removeClass(_.invalidCl))

								})

								.bind('blur',function(){

									_.validateFu(label)

									if(_.isEmpty(label))

										inp.val(defVal)

										,_.hideErrorFu(label.removeClass(_.invalidCl))											

								})

								.bind('keyup',function(){

									label.hasClass(_.invalidCl)

										&&_.validateFu(label)

								})

							label.find('.'+_.errorCl+',.'+_.emptyCl).css({display:'block'}).hide()

						})

						_.success=$('.'+_.successCl,_.form).hide()

					},

					isRequired:function(el){							

						return !el.hasClass(_.notRequiredCl)

					},

					isValid:function(el){							

						var ret=true

						$.each(_.rx,function(k,d){

							if(el.is(k))

								ret=d.rx.test(el.find(d.target).val())										

						})

						return ret							

					},

					isEmpty:function(el){

						var tmp

						return (tmp=el.find(_.targets).val())==''||tmp==el.data('defVal')

					},

					validateFu:function(el){							

						el.each(function(){

							var th=$(this)

								,req=_.isRequired(th)

								,empty=_.isEmpty(th)

								,valid=_.isValid(th)								


							if(empty&&req)

								_.showEmptyFu(th.addClass(_.invalidCl))

							else

								_.hideEmptyFu(th.removeClass(_.invalidCl))


							if(!empty)

								if(valid)

									_.hideErrorFu(th.removeClass(_.invalidCl))

								else

									_.showErrorFu(th.addClass(_.invalidCl))								

						})

					},

					getValFromLabel:function(label){

						var val=$('input,textarea',label).val()

							,defVal=label.data('defVal')								

						return label.length?val==defVal?'nope':val:'nope'

					}

					,submitFu:function(){

						_.validateFu(_.labels)							

						if(!_.form.has('.'+_.invalidCl).length)

							$.ajax({

								type: "POST",

								url:_.mailHandlerURL,

								data:{

									name:_.getValFromLabel($('.name',_.form)),

									email:_.getValFromLabel($('.email',_.form)),

									phone:_.getValFromLabel($('.phone',_.form)),

									fax:_.getValFromLabel($('.fax',_.form)),

									state:_.getValFromLabel($('.state',_.form)),

									message:_.getValFromLabel($('.message',_.form)),

									owner_email:_.ownerEmail,

									stripHTML:_.stripHTML

								},

								success: function(){

									_.showFu()

								}

							})			

					},

					showFu:function(){

						_.success.slideDown(function(){

							setTimeout(function(){

								_.success.slideUp()

								_.form.trigger('reset')

							},_.successShow)

						})

					},

					controlsFu:function(){

						$(_.controls,_.form).each(function(){

							var th=$(this)

							th

								.bind('click',function(){

									_.form.trigger(th.data('type'))

									return false

								})

						})

					},

					showErrorFu:function(label){

						label.find('.'+_.errorCl).slideDown()

					},

					hideErrorFu:function(label){

						label.find('.'+_.errorCl).slideUp()

					},

					showEmptyFu:function(label){

						label.find('.'+_.emptyCl).slideDown()

						_.hideErrorFu(label)

					},

					hideEmptyFu:function(label){

						label.find('.'+_.emptyCl).slideUp()

					},

					init:function(){

						_.form=_.me						

						_.labels=$('label',_.form)


						_.preFu()


						_.controlsFu()


						_.form

							.bind('submit',function(){

								if(_.validate)

									_.submitFu()

								else

									_.form[0].submit()

								return false

							})

							.bind('reset',function(){

								_.labels.removeClass(_.invalidCl)									

								_.labels.each(function(){

									var th=$(this)

									_.hideErrorFu(th)

									_.hideEmptyFu(th)

								})

							})

						_.form.trigger('reset')

					}

				}

			_.me||_.init(_.me=th.data({forms:_}))

			typeof o=='object'

				&&$.extend(_,o)

		})

	}

})(jQuery)

$(window).load(function(){

	$('#contact-form').forms({

		ownerEmail:'#'

	})

})

oraz html jakby był potrzebny

Wiadomość wysłana Wkrótce na nią odpowiemy.
*Wpisz poprawne imię oraz nazwisko. *To pole jest wymagane.*Wpisz poprawny adres e-mail. *To pole jest wymagane.*Wpisz poprawny numer telefonu kontaktowego. *To pole jest wymagane.Treść wiadomości:*Wiadomość jest zbyt krótka. *To pole jest wymagane.
WyczyśćWyślij
[/code]

Daj klasę wymagane / niewymagane. I potem zrób each do wymaganych, albo do !niewymaganych :slight_smile:

Tylko chodzi o to, że na chwilę obecną nie znam się na Javascripcie. :expressionless:

Kod JavaScript, który podałeś, może pomijać sprawdzanie i wymaganie wypełnienia pól, które mają nadaną klasę “notRequired” - robisz to w HTML:

i podobnie dla pozostałych pól. Pamiętaj o poprawieniu opisu w o wymaganiu lub nie wpisana coś do danego pola.

Hmmm zrobiłęm class=“notRequired” i usunąłem całkowicie żeby nie wyświetlało że pole wymagane lecz niestety gdy wrzuciłem na serwer to bez imienia i nazwiska oraz maila nie chciała się wysłać wiadomość z formularza. Nic się nie działo, ale jak już coś tam wpisałem to się wysłało.

Dokładniejsza analiza kodu JavaScript (forms.js) pokazała, że tę klasę “notRequired” musisz nadawać etykiecie , a nie polom , np.:

i tak dalej (jak dane pole ma już klasę (a pola label mają), to kolejne klasy rozdzielasz spacją).

Pokazany został tylko kod frontendu. Co z tego że JS nie będzie baczył na zawartość, skoro tak naprawdę backendowy php (z założenia) i tak nie zezwoli na nie wypełnienie określonego pola ? A jak wygląda kod backendu oczywiście nie podano.

Bo i pocóżby ? :slight_smile:

Aaa nie podałem php wysyłania, przepraszam, już daję. :smiley: (nie podałem maila celowo. :P)

<?php

    $owner_email = ""; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< tutaj wpisz adres email na który mają byc wysyłane maile

    $headers = "From: ".$_POST["email"]."\r\n";

    $headers .= "MIME-Version: 1.0\r\n";

	$headers .= "Content-type: text/plain; charset=utf-8\r\n";

    $headers .= "Content-Transfer-Encoding: 8bit";

    $subject = 'Wiadomość ze strony internetowej Hacjenda';

	$subject = "=?utf-8?B?".base64_encode($subject)."?=";

    $messageBody = "";



    if($_POST['name']!='nope'){

        $messageBody .= '
Imię i nazwisko: ' . $_POST["name"] . '' . "\n";

        $messageBody .= '
' . "\n";

    }

    if($_POST['email']!='nope'){

	$mailnadawcy = $_POST['email'];

        $messageBody .= '
Email: ' . $_POST['email'] . '' . "\n";

        $messageBody .= '
' . "\n"; 

    }else{

        $headers = '';

    }

    if($_POST['state']!='nope'){        

        $messageBody .= '
State: ' . $_POST['state'] . '' . "\n";

        $messageBody .= '
' . "\n";

    }

    if($_POST['phone']!='nope'){        

        $messageBody .= '
Telefon: ' . $_POST['phone'] . '' . "\n";

        $messageBody .= '
' . "\n";

    }    

    if($_POST['fax']!='nope'){        

        $messageBody .= '
Fax: ' . $_POST['fax'] . '' . "\n";

        $messageBody .= '
' . "\n";

    }

    if($_POST['message']!='nope'){

        $messageBody .= '
Treść: ' . $_POST['message'] . '' . "\n";

    }


    if($_POST["stripHTML"] == 'true'){

        $messageBody = strip_tags($messageBody);

    }

	mail($owner_email, $subject, $messageBody, $headers);



?>

@kernelus - tym razem to już przeginasz - wszystko masz ładnie zakodowane w tym skrypcie PHP, wystarczy tylko usunąć/zmienić warunki (if) przy tych polach, co Cię interesują (że mogą być puste).

Podpowiedź: wartość ‘nope’ to właśnie brak podanej przez użytkownika wartości danego pola (wypełnia to skrypt JS obrabiający dane formularza).

Dzięki za pomoc, udało się zrobić, zmieniłem warunek if i wszystko działa. ;D

@kernelus jak możesz to napisz jak zmieniłeś ten warunek if - podaj obecny kod. Jestem bardzo ciekaw jak teraz wygląda Twój kod.

W html zmieniłem label class na notRequired jak napisał Pablo, a php wygląda teraz tak:

<?php

    $owner_email = "info@hacjendadziwnow.pl"; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< tutaj wpisz adres email na który mają byc wysyłane maile

    $headers = "From: ".$_POST["email"]."\r\n";

    $headers .= "MIME-Version: 1.0\r\n";

	$headers .= "Content-type: text/plain; charset=utf-8\r\n";

    $headers .= "Content-Transfer-Encoding: 8bit";

    $subject = 'Wiadomość ze strony internetowej Hacjenda';

	$subject = "=?utf-8?B?".base64_encode($subject)."?=";

    $messageBody = "";



    if($_POST['name']!='nope'){

        $messageBody .= '
Imię i nazwisko: ' . $_POST["name"] . '' . "\n";

        $messageBody .= '
' . "\n";

    }

	else{

		$headers ="";

		$messageBody .= '
Nie podano imienia i nazwiska. ' . '' . "\n";

		$messageBody .= '
' . "\n";

	}

    if($_POST['email']!='nope'){

		$mailnadawcy = $_POST['email'];

        $messageBody .= '
Email: ' . $_POST['email'] . '' . "\n";

        $messageBody .= '
' . "\n"; 

    }else{

        $messageBody .= '
Nie podano emaila. ' . '' . "\n";

        $messageBody .= '
' . "\n"; 

    }

    if($_POST['state']!='nope'){        

        $messageBody .= '
State: ' . $_POST['state'] . '' . "\n";

        $messageBody .= '
' . "\n";

    }

    if($_POST['phone']!='nope'){        

        $messageBody .= '
Telefon: ' . $_POST['phone'] . '' . "\n";

        $messageBody .= '
' . "\n";

    }    

    if($_POST['fax']!='nope'){        

        $messageBody .= '
Fax: ' . $_POST['fax'] . '' . "\n";

        $messageBody .= '
' . "\n";

    }

    if($_POST['message']!='nope'){

        $messageBody .= '
Treść: ' . $_POST['message'] . '' . "\n";

    }


    if($_POST["stripHTML"] == 'true'){

        $messageBody = strip_tags($messageBody);

    }

	mail($owner_email, $subject, $messageBody, $headers);



?>

Musze przyznać, że rozwiązanie kernelusa jest bardzo eleganckie (z tym else), ale niepotrzebnie kasuje on nagłówek maila (przy ‘name’ w else):

$headers ="";

Wywal ten wiersz.

Hmm nie wiem od czego to zależy, ale jak nie było $headers =""; to nazwa maila była none@jupe2.pl (serwer jupe jak się można domyślić :))

Ale tym $headers =""; wywalałeś cały potrzebny nagłówek maila (w tym kodowanie znaków). To już popraw drugą linie skryptu:

$headers = "From: ".$_POST["email"]."\r\n";

na następującą:

$headers = "From: ".($_POST["email"]!='nope'?$_POST["email"]:'nie.podano@adresu.pl')."\r\n";

Hmmm tylko teraz jak zmieniłem tą linię to kiedy w formularzu wpiszę imię i nazwisko oraz maila to przysyła mi tak czy siak “nie.podano@adresu.pl” i w wiadomości nie ma maila którego wpisałem oraz imienia i nazwiska.

Edit:

Ale dopiero zauważyłem, że nawet przy moim sposobie też kiedy wpiszę imię i nazwisko to nie ma ich w mailu.