CodeIgniter:检查记录是不是存在
Posted
技术标签:
【中文标题】CodeIgniter:检查记录是不是存在【英文标题】:CodeIgniter: checking if record existsCodeIgniter:检查记录是否存在 【发布时间】:2015-01-02 17:43:56 【问题描述】:我一直在为学校开发一个 CodeIgniter 项目,我需要使用用户数据创建一张票。如果用户还没有在数据库中,他填写表格的数据将被插入到数据库中,如果他已经存在于数据库中,则使用他已经存在的用户 ID 创建一张票。
我一直在尝试使用他的电子邮件检查用户是否存在,但我没有运气。谷歌搜索了几个小时;尝试过回调,正常验证,你可以命名它。我似乎无法让它工作,非常感谢一些帮助。这是我当前的代码:
控制器
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 变量放在那里,我会收到他缺少参数的错误,所以我在这里有点困惑。另外,我遇到的主要问题是,尽管它给出了错误和所有内容,但他还是将记录插入到数据库中......尽管已经存在具有相同电子邮件地址的记录!
我真的不知道如何解决这个问题,因此非常感谢任何帮助。提前致谢。
【问题讨论】:
执行 print_r($_POST) 并向我们展示结果 【参考方案1】:只有一个错误,将电子邮件字段数据分配给变量,然后将您的电子邮件传递给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;
【讨论】:
我收到您给我的新查询的语法错误。我看不出问题出在哪里,因为它应该是正确的......“您的 SQL 语法有错误;请查看与您的 mysql 服务器版本相对应的手册,以了解在 'ruud@mail.com 附近使用的正确语法'' LIMIT 1' 在第 2 行" 有什么想法吗? @Jason OOPs 对,应该是".$this->db->escape($email)."
,查看此以获取更多信息:ellislab.com/codeigniter/user-guide/database/queries.html以上是关于CodeIgniter:检查记录是不是存在的主要内容,如果未能解决你的问题,请参考以下文章