【发布时间】:2018-05-14 14:25:29
【问题描述】:
作为练习,我正在尝试使用 CodeIgniter 创建一个非常基本的 Twitter 克隆。我目前正在尝试创建一个简单的注册/注册表单来创建一个帐户并将其添加到数据库表users。 这些字段是名字、姓、用户名、电子邮件地址、密码和密码确认。
但是,我收到以下错误。
错误号:1452
无法添加或更新子行:外键约束失败(
lamp.users, CONSTRAINTusers_ibfk_1FOREIGN KEY (user_id) REFERENCEStweets(user_id))插入
users(first_name、last_name、username、password)值('fn'、'ln'、'用户名'、'user@gmail.com' , 'pw')文件名:models/User_model.php
行号:33
我使用 user_id 列在我的 Tweet_model.php 中加入了我的两个表 users 和 tweets表。
两个表中 user_id 的结构是:
推文表
字段:user_id,类型:INT,长度:11,无符号,密钥:MUL
用户表
字段:user_id,类型:INT,长度:11,无符号,密钥:PRI,额外:auto_increment
我的代码如下:
控制器: Register.php
class Register extends CI_Controller
{
public function index()
{
$this->load->model('user_model');
$this->form_validation->set_rules('first_name', 'First Name', 'required');
$this->form_validation->set_rules('last_name', 'Last Name', 'required');
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('email', 'Email', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
if ($this->form_validation->run() == false) {
$this->load->view('templates/header');
$this->load->view('register');
$this->load->view('templates/footer');
} else {
$this->user_model->set_user();
$this->load->view('templates/header');
$this->load->view('home');
$this->load->view('templates/footer');
}
}
}
型号: User_model.php
class User_model extends CI_Model
{
public function __construct()
{
$this->load->database();
}
public function get_users($user_id = false)
{
if ($user_id === false) {
$query = $this->db->get('users');
return $query->result_array();
}
$query = $this->db->get_where('users', array('user_id' => $user_id));
return $query->row_array();
}
public function set_user()
{
$url = url_title($this->input->post('user'), 'dash', true);
$data = array(
'first_name' => $this->input->post('first_name'),
'last_name' => $this->input->post('last_name'),
'username' => $this->input->post('username'),
'email' => $this->input->post('email'),
'password' => $this->input->post('password')
);
return $this->db->insert('users', $data);
}
}
查看: register.php
<form action="/index.php/register" method="POST">
<h5>First Name</h5>
<input type="text" name="first_name" value="" size="50" />
<h5>Last Name</h5>
<input type="text" name="last_name" value="" size="50" />
<h5>Username</h5>
<input type="text" name="username" value="" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />
<div><input type="submit" value="Register" /></div>
</form>
Tweet_model.php
class Tweet_model extends CI_Model
{
public function __construct()
{
$this->load->database();
}
public function get_tweets($tweet_id = false)
{
if ($tweet_id === false) {
$this->db->join('users', 'tweets.user_id = users.user_id');
$query = $this->db->get('tweets');
return $query->result_array();
}
$query = $this->db->get_where('tweets', array('tweet_id' => $tweet_id));
return $query->row_array();
}
public function set_tweet()
{
$tweet = url_title($this->input->post('tweet'), 'dash', true);
$data = array(
'tweet' => $this->input->post('tweet')
);
return $this->db->insert('tweets', $data);
}
}
编辑:是它倒退了。但是现在我想发布推文时遇到了同样的问题。
错误号:1452
无法添加或更新子行:外键约束失败(
lamp.tweets, CONSTRAINTtweets_ibfk_1FOREIGN KEY (user_id) REFERENCESusers(user_id))插入
tweets(tweet) 值(“测试推文”)文件名:models/Tweet_model.php
行号:30
【问题讨论】:
-
用户表上是否有引用推文表的外键?应该反过来。
-
好的,这是因为我在 Tweet_model 中加入表格的方式?
标签: php mysql database codeigniter