2013-07-21 11 views
7

Mam w mojej formie doświadczenie zawodowe, które jest dodawane dynamicznie z wprowadzeniem jako nazwa organizacji, nazwa działu, pozycja i czas trwania.jak sprawdzić poprawność wartości tablicy w sygnaturze kodowej

<tr> 
    <td><span class="serial_no">1</span></td> 
    <td><input type="text" name="organization[]" size="50"/></td> 
    <td><input type="text" name="department[]" size="50"></td> 
    <td><input type="text" name="positions[]" size="40"></td> 
    <td><input type="text" name="duration[]"></td> 
</tr> 

Podczas sprawdzania w CI Zrobiłem następujące:

$organization = $this->input->post('organization'); 
$department = $this->input->post('department'); 
$positions = $this->input->post('positions'); 
$duration  = $this->input->post('duration'); 

//printr($organization); 
for($i = 0; $i < count($organization); $i++) 
{ 
    $org = $organization[$i]; 
    $dept = $department[$i]; 
    $pos = $positions[$i]; 
    $dura = $duration[$i]; 

    $this->form_validation->set_rules($org, "Organization", "trim|xss_clean|max_length[1]"); 
    $this->form_validation->set_rules($dept, "Department", "trim|xss_clean|max_length[50]"); 
    $this->form_validation->set_rules($pos, "Position", "trim|xss_clean|max_length[40]"); 
    $this->form_validation->set_rules($dura, "Duration", "trim|xss_clean|integer"); 
} 

i wyświetlane jako błąd:

<?php 
    echo form_error("organization[]"); 
    echo form_error("department[]"); 
    echo form_error("positions[]"); 
    echo form_error("duration[]"); 
?> 

Teraz problemem jest to, że nie sprawdza czas jako liczba całkowita. Nawet jeśli wstawię kilka losowych znaków alfy, to nie pokazują błędów.

Kiedy zweryfikować następująco:

$this->form_validation->set_rules('organization[]', "Organization", "trim|xss_clean|max_length[50]"); 
$this->form_validation->set_rules('department[]', "Department", "trim|xss_clean|max_length[50]"); 
$this->form_validation->set_rules('positions[]', "Position", "trim|xss_clean|max_length[40]"); 
$this->form_validation->set_rules('duration[]',"Duration", "trim|xss_clean|numeric"); 

To nie pozwala mi przesłać formularz jak to ma czas jako obowiązkowe, które nie jest.

Jak mogę to rozwiązać?

każda pomoc/sugestie są mile widziane. dzięki.

+0

Może powinnam; t dodać 'trim' (i' xss_clean' zbyt) do 'duration' walidacji? –

+0

@sammy Zaktualizowałem moją odpowiedź, sprawdź, czy link został dodany, proszę. wszelkie opinie są mile widziane. –

Odpowiedz

3

It doesn't let me submit the form Jeśli tak, to brzmi jak błąd.

Tymczasowo można sprawdzić, czy duration[] tablica jest empty czy nie:

if (! empty($_POST['duration'])) { 
    $this->form_validation->set_rules('duration[]',"Duration", "trim|xss_clean|numeric"); 
} 

będę aktualizować moją odpowiedź, jeśli znalazłem główne rozwiązanie.


Aktualizacja: Jest to błąd, jak się spodziewałem, że opened a PR w CodeIgniter repozytorium, które będzie rozwiązać ten problem.

+0

Przepraszam ... Czy możesz rzucić okiem na to pytanie. [http://stackoverflow.com/questions/39941976/codeigniter-array-backend-validation](http://stackoverflow.com/questions/39941976/codeigniter-array-backend-validation) – Shihas

6

Zgodnie z sugestią @ Hashem Qolami zrobiłem następujące zmiany w moim kodzie i zadziałało.

$organization = $this->input->post('organization'); 
$department  = $this->input->post('department'); 
$positions  = $this->input->post('positions'); 
$duration  = $this->input->post('duration'); 

foreach($organization as $ind=>$val) 
{ 
    $org = $organization[$ind]; 
    $dept = $department[$ind]; 
    $pos = $positions[$ind]; 
    $dura = $duration[$ind]; 

    $this->form_validation->set_rules("organization[".$ind."]", "Organization", "trim|xss_clean|max_length[1]"); 
    $this->form_validation->set_rules("department[".$ind."]", "Department", "trim|xss_clean|max_length[50]"); 
    $this->form_validation->set_rules("positions[".$ind."]", "Position", "trim|xss_clean|max_length[40]"); 
    if(!empty($dura)) 
     $this->form_validation->set_rules("duration[".$ind."]", "Duration", "trim|xss_clean|integer"); 
} 

i wyświetlane moje błędy następująco

for($i = 0; $i < count($organization); $i++) { 
    echo form_error("organization[".$i."]"); 
    echo form_error("department[".$i."]"); 
    echo form_error("positions[".$i."]"); 
    echo form_error("duration[".$i."]"); 
    } 
+0

Przepraszam ... Czy możesz proszę spojrzeć na to pytanie. [http://stackoverflow.com/questions/39941976/codeigniter-array-backend-validation](http://stackoverflow.com/questions/39941976/codeigniter-array-backend-validation) – Shihas

+0

świetna odpowiedź, naprawdę pomaga .. –

Powiązane problemy