Я работал над проектом CodeIgniter для школы, и мне нужно создать тикет с данными пользователя. Если пользователя еще нет в базе данных, данные, которые он заполнил в форме, вставляются в базу данных, и если он уже существует в базе данных, создается только заявка с его уже существующим идентификатором пользователя.
Я пытался проверить, существует ли пользователь с его электронной почтой, но мне не повезло. Гуглил часами; пробовал обратные вызовы, нормальные проверки, вы называете это. Я просто не могу заставить его работать и буду очень признателен за помощь. Вот мой текущий код:
контроллер
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
Серьезность: Уведомление
Сообщение: неопределенная переменная: электронная почта
Имя файла: controllers / booking.php
Номер строки: 42
Я не знаю, почему это происходит, потому что, если я не помещу туда переменную $ email, я получаю ошибку, что он пропускает аргумент, поэтому я немного запутался здесь. Кроме того, главная проблема, с которой я столкнулся, заключается в том, что, несмотря на все ошибки и ошибки, он все равно вставляет запись в базу данных … Несмотря на то, что запись с таким же адресом электронной почты уже существует!
Я действительно не знаю, как это исправить, поэтому любая помощь очень ценится. Заранее спасибо.
Всего одна ошибка: присвоение данных поля электронной почты переменной, а затем передача электронной почты add_ticket
модель. Это оно 🙂
$email = $this->input->post("email");
$this->ticket_model->add_ticket($email);
Теперь измените вашу модель, просто немного,
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;
}
Других решений пока нет …