2014-11-06 2 views
1

학교용 CodeIgniter 프로젝트에서 작업 중이므로 사용자 데이터가있는 티켓을 만들어야합니다. 사용자가 아직 데이터베이스에 없으면 양식에 채운 데이터가 데이터베이스에 삽입되고 데이터베이스에 이미 존재하면 기존 사용자 ID로 티켓 만 생성됩니다.CodeIgniter : 레코드가 있는지 확인한 후 모든 것을 시도했습니다.

사용자가 전자 메일을 가지고 있는지 확인하려고했으나 운이 없었습니다. 시간 동안 Google 검색; 시도한 콜백, 일반적인 유효성 검사, 이름을 지정합니다. 나는 그걸 작동시키지 못하고 정말로 도움이 될 것입니다. 여기에 내 현재 코드입니다 :

컨트롤러

public function create_ticket() { 
    $this->load->library('form_validation'); 
    // field name, error message, validation rules 
    $this->form_validation->set_rules('voornaam', 'Voornaam', 'trim|required'); 
    $this->form_validation->set_rules('tussenvoegsel', 'Tussenvoegsel', 'trim'); 
    $this->form_validation->set_rules('achternaam', 'Achternaam', 'trim|required'); 
    $this->form_validation->set_rules('email', 'E-mailadres', 'trim|required|valid_email'); 
    $this->form_validation->set_rules('geboortedatum', 'Geboortedatum', 'required'); 
    $this->form_validation->set_rules('postcode', 'Postcode', 'trim|required'); 
    $this->form_validation->set_rules('woonplaats', 'Woonplaats', 'trim|required'); 

    if($this->form_validation->run() == FALSE) 
    { 
     echo "Failed"; 
     $this->reservate(); 
    } 
    else 
    { 
     $this->ticket_model->add_ticket($email); 
     $this->reservate(); 

    } 
} 

모델 :

public function add_ticket($email) { 
    $query = $this->db->query("SELECT email FROM visitor 
           WHERE email = '".$email."'"); 
    if($query->num_rows() == 0){ 
     $data = array(
      'voornaam' => $this->input->post('voornaam'), 
      'tussenvoegsel' => $this->input->post('tussenvoegsel'), 
      'achternaam' => $this->input->post('achternaam'), 
      'email' => $this->input->post('email'), 
      'geboortedatum' => $this->input->post('geboortedatum'), 
      'postcode' => $this->input->post('postcode'), 
      'woonplaats' => $this->input->post('woonplaats') 
     ); 
     $this->db->insert('visitor', $data); 
    } 
    else { 
     return false; 
    } 

    } 

보기 (만약에 전혀 중요)

<?php echo validation_errors(); ?> 
<h1>Ticket Bestellen</h1> 
<label> 
    <span>Voornaam</span> 
    <input type="text" class="input_text" name="voornaam" id="voornaam"/> 
</label> 
<label> 
    <span>Tussenvoegsel</span> 
    <input type="text" class="input_text" name="tussenvoegsel" id="tussenvoegsel"/> 
</label> 
<label> 
    <span>Achternaam</span> 
    <input type="text" class="input_text" name="achternaam" id="achternaam"/> 
</label> 
<label> 
    <span>E-mailadres</span> 
    <input type="text" class="input_text" name="email" id="email"/> 
</label> 
<label> 
    <span>Geboortedatum</span> 
    <input type="text" id="geboortedatum" name="geboortedatum" placeholder="dd-mm-jjjj"> 
</label> 
<label> 
    <span>Postcode</span> 
    <input type="text" class="input_text" name="postcode" id="postcode"/> 
</label> 
<label> 
    <span>Woonplaats</span> 
    <input type="text" class="input_text" name="woonplaats" id="woonplaats"/> 
</label> 
    <input type="submit" class="button" value="Reserveren" /> 
</label> 

내가 갖는 오류 :

A PHP Error was encountered 

심각도 :

메시지주의 : 정의되지 않은 변수 : 이메일

파일 이름 : 컨트롤러/booking.php

행 번호 : 42

나는 $ email 변수를 거기에 넣지 않으면 그가 인자를 놓치고 있다는 오류가 발생하기 때문에 왜 이런 일이 일어나고 있는지 모르겠다. 그래서 나는 약간 혼란 스럽다. 또한, 내가 가지고있는 주된 문제는 그것이 오류와 모든 것을 제공함에도 불구하고 그는 어쨌든 데이터베이스에 레코드를 삽입한다는 것입니다 ... 이미 같은 전자 메일 주소를 가진 기록에도 불구하고!

저는이 문제를 어떻게 해결해야할지 모르므로 도움을 주시면 대단히 감사하겠습니다. 미리 감사드립니다.

+0

인 print_r ($ _ POST)을 할 우리에게 그것을 한 결과 –

답변

1

전자 메일 필드 데이터를 변수로 변환하는 실수를 한 번만 수행 한 다음 이메일을 add_ticket 모델로 전달하십시오. 그게 전부는

function add_ticket($email) { 

    // Added $this->db->escape() and limit 1 for Performance 
    $query = $this->db->query("SELECT email FROM visitor 
          WHERE email = ".$this->db->escape($email)." limit 1"); 

    // Collect Data Array 
    $data = array(
     'voornaam' => $this->input->post('voornaam'), 
     'tussenvoegsel' => $this->input->post('tussenvoegsel'), 
     'achternaam' => $this->input->post('achternaam'), 
     'email' => $this->input->post('email'), 
     'geboortedatum' => $this->input->post('geboortedatum'), 
     'postcode' => $this->input->post('postcode'), 
     'woonplaats' => $this->input->post('woonplaats') 
    ); 

// Make Code Short and Clear 
return $query->num_rows() == 0 ? $this->db->insert('visitor', $data) : false; 
} 
+0

그래를 보여

$email = $this->input->post("email"); $this->ticket_model->add_ticket($email); 

지금 모형, 그냥 약간의 수정 :)! 그것이 쉽지 않았다라고 나는 믿을 수 없다, 나는이 haha ​​위에 나의 마음을 잃어 버리고 있었다. 정말 고맙습니다. –

+0

@ Jason hahaha, 가끔은 일어납니다;) –

+0

당신이 저에게 준 새로운 쿼리로 구문 오류가 발생합니다. 문제가있는 곳이 어디인지는 알 수 없습니다 ... "SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 올바른 구문을 찾으려면 'ruud @ mail' .com 'LIMIT 1'2 호선에서 " 아이디어가 있으십니까? –