Jump to content
php.lv forumi

Pietrūkst isset();


metal-0-1

Recommended Posts

Agrāk, neko nezinot par MVC, lai nodrošinātu to, ka formas validācija notiek tikai pēc tam kad lietotājs nospiedis "submit" un tāpēc tikko kā atvēris formas lapu jau nesaņem erroru par tukšu input lauku, es lietoju vnk isset()

if(isset($_POST['x'])){
	//Lietotajs ir nospiedis "submit" pogu un varu sakt validet datus

	//Valideju datus
}
//Else lietotajs nav nospiedis submit pogu, tatad vel neko nevajag darit.

Bet šobrīd manā login lapā ir links uz reģistrēšanos, kas ved uz metodi, kas ielādē formas skatu bez nekādas validēšanas

anchor('/x_controller/load_x_form', 'Sign up for the X!');
public function load_x_form(){

	$view_data['main_content'] = 'x_form';
	$this->load->view('template_view', $view_data);	
	
}

Tālāk formas action ved atpakaļ uz to pašu Kontrolleri, bet citu metodi, kas veic validēšanu. Ja izdodas - ielādē success skatu, ja neizdodas, ielāde vēlreiz formu un parāda erroru

form_open('x_controller/verify_x_form');
....
form_close();
public function verify_article(){

        $this->load->library('form_validation'); 
        $this->form_validation->set_rules('title', 'Title', 'required|trim|max_length[50]|min_length[3]');
        $this->form_validation->set_rules('text', 'Text', 'required|trim|min_length[3]');
        $input_validates = $this->form_validation->run();

	if($input_validates){

		//Do stuff

		$view_data['main_content']		= 'success_view';
		$view_data['data']['msg']		= 'You have signed up for the X!';
	}
	else{
		$view_data['main_content']  = 'x_form_view';
		$view_data['data']['error'] = validation_errors();
	}

	$this->load->view('template_view', $view_data);	
}

Man ir aizdomas ka MVC variants ir galīgi kreiss, isnt it? Tur ir viena metode priekš vnk plikas skata ielādēšanas, un tad atsevišķa ar validāciju. Kā to putru izstrebt elegantāk?

Link to comment
Share on other sites

Es personīgi POST datu sūtīšanu no formas pedējo reizi izmantoju varbūt pirms gadiem pieciem. Parasti to visu daru ar ajax.

Bet šajā gadījumā, vai tad ērtāk nav 2 action-i, kur post datu apstrādes action-s pēcāk redirekto uz formas/lapas attēlošanas action-u?

Link to comment
Share on other sites

vai tad ajax jau tas pats http reqvests vien ir ar get vai post parametriem. Vai tad tas butiski kaut ko maina?

Es, piemeram, nesaprotu kapec jaizgudro jauns divritenis. Panem jau gatavu cms un papeti.

Link to comment
Share on other sites

vai tad ajax jau tas pats http reqvests vien ir ar get vai post parametriem. Vai tad tas butiski kaut ko maina?

Es, piemeram, nesaprotu kapec jaizgudro jauns divritenis. Panem jau gatavu cms un papeti.

 

Ir divas princiāli atškirīgas darbības:

1) salasīt datus, kas jāatēlo lapā un attēlot tos

2) savākt datus no POST un veikt ar tiem darbības

Gadījumā ar formām iesācējiem bieži vien ir tieksme šīs abas darbības likt vienā vietā/metodē/action-ā/utt.

Ajax gadījumā šīs abas lietas principiāli atrodas dažādās vietās, tāpēc arī ieteicu veidu, kurš ir līdzīgākais tam, kā daru ar ajax.

Link to comment
Share on other sites

Īsti nesaprotu tavu problēmu. Vajag noteikt, vai tas ir POST rekvests?

 

Katram freimvorkam tas ir savādāk, bet, piemēram, Kohana -- http://kohanaframework.org/3.3/guide-api/Request#method , vai Django -- https://docs.djangoproject.com/en/1.5/ref/request-response/#django.http.HttpRequest.method .

Link to comment
Share on other sites

  • 3 weeks later...

Jēdz atšķirību starp GET/POST un AJAX?

GET/POST ir datu sūtīšanas metodes, kuras var izmantot gan sūtot no formas, gan sūtot ar ajax.

Kā rakstīju iepriekš, no formas datus nesūtu pa tiešo, bet, ja sūtītu, izmantotu 2 actionus, kur pirmais apstradā no POST sanemtos datus, bet otrais kurš attēlo lapu. Un to darītu kaut vā tā iemesla dēļ, lai pēc post datu nosūtīšanas spiežot f5, nenotiktu atkārtota post datu nosūtīšana.

Link to comment
Share on other sites

Tas laikam Tavs šķībais ietvars, normālos tas viss ir atrisināts un AJAXu ieslēdz ar papildus darbībām pa virsu esošajam risinājumam, t.i., tā, ka darbojas gan ar, gan bez ajax. Piemēram, mobilajā skatā var neizmantot AJAX, bet kontrollera kods paliek tas pats.

Link to comment
Share on other sites

Tas laikam Tavs šķībais ietvars, normālos tas viss ir atrisināts un AJAXu ieslēdz ar papildus darbībām pa virsu esošajam risinājumam, t.i., tā, ka darbojas gan ar, gan bez ajax. Piemēram, mobilajā skatā var neizmantot AJAX, bet kontrollera kods paliek tas pats.

Atvaino, ka neatbilstu taviem standartiem, bet pēdējie projekti man bijuši diezgan sarežģītas klienta puses aplikācijas, kur viss griežas uz js. Kontaktu formas sen vairs netaisu.

Un kāpēc lai mobīlajā taisītu formas postu un pārlādētu visu lapu, ja var ar ajax?

Ar formu postošanu nodarbojas tie, kas mācās vēl pamatus, vai uztur arhaiskas sistēmas.

 

P.S. Vienīgā vieta, kur izmantoju formas postu, ir failu aukšuplāde, jo vienkārši nav citu variantu.

Edited by codez
Link to comment
Share on other sites

Kāpēc? Lietotājiem vienalga.

 

1. Tiek izmantots HTML method=post.

 

2. Formas submits tiek noķerts, tiek aizsūtīts AJAX rekvests, ar JavaScript tiek veikts redirekts.

Link to comment
Share on other sites

2. Formas submits tiek noķerts, tiek aizsūtīts AJAX rekvests, ar JavaScript tiek veikts redirekts.

1. Pamēģini uztaisīt ar formas postu un lapas pārlādi, piemēram, treeview, kur var navigēt pa koku, kurš ir pietiekami liels un tā apakšzari tiek ielādēti tikai uz konkrēta foldera atvēršanu.

2. Pamēģini formas submita pārķeršanu izmantot datu nosūtīšanai no jebkura kaut cik komplicēta jquery widget-a, piemēram, kādu grida, charta, spreadsheeta, kalendāra, intervālu slidera, utt.

 

Man jāsāk domāt, ar kāda līmeņa projektiem jūs ņematies, ja jums pietiek ar html formas submitu.

Esat dzirdējuši kaut ko par klienta puses mvc, mvvm, klienta puses modeļiem (Backbone, Knockout, Ember ???) un tamlīdzīgām lietām? Šajās kategorijās par html formu submitu neviens vairs sen nerunā, jo ar to vienkārši nav iespējams atrisināt tās lietas, kas ir normālā modernā web aplikācijā.

Edited by codez
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...